diff --git a/.gitignore b/.gitignore index cc9538d..89ba558 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,3 @@ home/migrations/__pycache__ # Frontend (Vite / React islands) frontend/node_modules/ static/dist/ - -# Copias de seguridad locales -web-next/.bak-armory/ diff --git a/web-next/.bak-armory/ArmoryModel3D.tsx b/web-next/.bak-armory/ArmoryModel3D.tsx new file mode 100644 index 0000000..d175b6c --- /dev/null +++ b/web-next/.bak-armory/ArmoryModel3D.tsx @@ -0,0 +1,142 @@ +'use client' + +import { useEffect, useRef, useState } from 'react' + +/** + * Visor 3D del personaje. Usa la librería `wow-model-viewer` (generateModels), que a + * su vez necesita jQuery y el ZamModelViewer de wowhead (wow.zamimg.com) cargados en + * global. Se cargan bajo demanda solo en esta ficha. + * + * OJO: es integración cliente que depende de un CDN externo (zamimg) y no se puede + * verificar sin navegador; por eso todo va envuelto en try/catch y con un temporizador + * de reserva: si el modelo no aparece, se muestra un aviso en lugar de romper la ficha. + * + * El equipo se pasa como {slot, entry, displayid}; la librería mapea cada ítem a su + * slot del visor. displayid = transmog si lo hay, si no el del ítem equipado. + */ + +// Same-origin (proxy /modelviewer/* -> zamimg en next.config): evita el bloqueo CORS +// del visor, que es lo que dejaba el modelo «no disponible». +const ZAM_VIEWER = '/modelviewer/live/viewer/viewer.min.js' +const JQUERY = 'https://code.jquery.com/jquery-3.7.1.min.js' +const CONTENT_PATH = '/modelviewer/live/' + +type Win = typeof window & { jQuery?: unknown; $?: unknown; ZamModelViewer?: unknown; CONTENT_PATH?: string } + +/** + * Garantiza que window.WH está completo. El viewer.min.js de zamimg crea un WH + * propio SIN `debug`, y entonces el setup.js de la librería (que hace `if (!WH)`) + * se lo salta y nunca define WH.debug → el visor casca con «WH.debug is not a + * function». Aquí se rellena cada propiedad que falte, con fallback, tras cargar + * los scripts y antes de generar el modelo. + */ +function ensureWH() { + const w = window as unknown as { WH?: Record } + const WH = (w.WH = w.WH || {}) + if (typeof WH.debug !== 'function') WH.debug = () => {} + if (!WH.defaultAnimation) WH.defaultAnimation = 'Stand' + if (!WH.WebP) WH.WebP = { getImageExtension: () => '.webp' } + if (!WH.Wow) { + WH.Wow = { + Item: { + INVENTORY_TYPE_HEAD: 1, INVENTORY_TYPE_NECK: 2, INVENTORY_TYPE_SHOULDERS: 3, + INVENTORY_TYPE_SHIRT: 4, INVENTORY_TYPE_CHEST: 5, INVENTORY_TYPE_WAIST: 6, + INVENTORY_TYPE_LEGS: 7, INVENTORY_TYPE_FEET: 8, INVENTORY_TYPE_WRISTS: 9, + INVENTORY_TYPE_HANDS: 10, INVENTORY_TYPE_FINGER: 11, INVENTORY_TYPE_TRINKET: 12, + INVENTORY_TYPE_ONE_HAND: 13, INVENTORY_TYPE_SHIELD: 14, INVENTORY_TYPE_RANGED: 15, + INVENTORY_TYPE_BACK: 16, INVENTORY_TYPE_TWO_HAND: 17, INVENTORY_TYPE_BAG: 18, + INVENTORY_TYPE_TABARD: 19, INVENTORY_TYPE_ROBE: 20, INVENTORY_TYPE_MAIN_HAND: 21, + INVENTORY_TYPE_OFF_HAND: 22, INVENTORY_TYPE_HELD_IN_OFF_HAND: 23, + INVENTORY_TYPE_PROJECTILE: 24, INVENTORY_TYPE_THROWN: 25, INVENTORY_TYPE_RANGED_RIGHT: 26, + INVENTORY_TYPE_QUIVER: 27, INVENTORY_TYPE_RELIC: 28, INVENTORY_TYPE_PROFESSION_TOOL: 29, + INVENTORY_TYPE_PROFESSION_ACCESSORY: 30, + }, + } + } +} + +function loadScript(src: string): Promise { + return new Promise((resolve, reject) => { + if (document.querySelector(`script[src="${src}"]`)) return resolve() + const s = document.createElement('script') + s.src = src + s.async = true + s.onload = () => resolve() + s.onerror = () => reject(new Error(`no se pudo cargar ${src}`)) + document.head.appendChild(s) + }) +} + +export function ArmoryModel3D({ + race, + gender, + equip, + labels, +}: { + race: number + gender: number + equip: { slot: number; entry: number; displayid: number }[] + labels: { loading: string; unavailable: string } +}) { + const ref = useRef(null) + const [state, setState] = useState<'loading' | 'ok' | 'fail'>('loading') + + useEffect(() => { + let cancelled = false + const failTimer = setTimeout(() => !cancelled && setState((s) => (s === 'loading' ? 'fail' : s)), 12000) + + ;(async () => { + try { + const w = window as Win + w.CONTENT_PATH = CONTENT_PATH + await loadScript(JQUERY) + await loadScript(ZAM_VIEWER) + // La librería es ESM y usa jQuery/ZamModelViewer globales. + const mv = await import('wow-model-viewer') + ensureWH() // completar WH.debug/WebP/Wow tras cargar viewer.min.js + setup.js + if (cancelled || !ref.current) return + + // La resolución de ítems hace consultas al CDN y puede fallar; si falla, se + // renderiza al menos el personaje sin equipo en vez de dejar la ficha vacía. + let items: unknown[] = [] + try { + items = await mv.findItemsInEquipments( + equip.map((e) => ({ slot: e.slot, entry: e.entry, displayid: e.displayid })), + 'live', + ) + } catch (err) { + console.warn('[armory-3d] no se pudieron resolver los ítems del modelo:', err) + } + if (cancelled || !ref.current) return + + ref.current.id = ref.current.id || `armory-model-${race}-${gender}` + await mv.generateModels(1, `#${ref.current.id}`, { race, gender, items }, 'live') + if (!cancelled) { + clearTimeout(failTimer) + setState('ok') + } + } catch (err) { + console.error('[armory-3d] no se pudo cargar el visor 3D:', err) + if (!cancelled) { + clearTimeout(failTimer) + setState('fail') + } + } + })() + + return () => { + cancelled = true + clearTimeout(failTimer) + } + // solo al montar / cambiar de personaje + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [race, gender]) + + return ( +
+
+ {state === 'loading' &&

{labels.loading}

} + {state === 'fail' &&

{labels.unavailable}

} +
+ ) +} diff --git a/web-next/.bak-armory/armory.css b/web-next/.bak-armory/armory.css new file mode 100644 index 0000000..0f534df --- /dev/null +++ b/web-next/.bak-armory/armory.css @@ -0,0 +1,88 @@ +/* Estilos de la armería, en la línea del tema (oscuro + dorado #d79602). Reutiliza + main-wide, nice_button, forum-input y los colores de calidad qN de forum.css. */ + +.armory-search { position: relative; margin: 10px 0 18px; } +.armory-search-form { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } +.armory-search .forum-input { flex: 1 1 260px; margin: 0; } + +/* Desplegable de autocompletar (tipo wowhead) */ +.armory-suggest { + position: absolute; top: calc(100% + 4px); left: 0; right: 0; z-index: 50; max-height: 420px; overflow-y: auto; + background: #14110d; border: 1px solid #2a2723; border-radius: 4px; + box-shadow: 0 8px 24px rgba(0, 0, 0, .6); +} +.armory-suggest-group { border-bottom: 1px solid #201d18; } +.armory-suggest-group:last-child { border-bottom: 0; } +.armory-suggest-head { + font-size: 10px; text-transform: uppercase; letter-spacing: .05em; color: #6d6a5e; font-weight: bold; + padding: 6px 12px; background: rgba(255, 255, 255, .02); +} +.armory-suggest-item { + display: flex; justify-content: space-between; align-items: center; gap: 10px; width: 100%; + padding: 8px 12px; background: none; border: 0; cursor: pointer; text-align: left; text-decoration: none; + font-size: 13px; font-weight: bold; color: #d4cdbb; transition: background .1s; +} +.armory-suggest-item:hover { background: rgba(255, 255, 255, .05); } +.armory-suggest-sub { font-size: 11px; color: #6d6a5e; font-weight: normal; white-space: nowrap; } + +.armory-tabs { display: flex; gap: 6px; border-bottom: 1px solid #2a2723; margin-bottom: 16px; flex-wrap: wrap; } +.armory-tab { + padding: 8px 16px; color: #8a8578; text-decoration: none; font-weight: bold; text-transform: uppercase; + font-size: 13px; border-bottom: 2px solid transparent; transition: all .15s; +} +.armory-tab:hover { color: #d79602; } +.armory-tab.active { color: #d79602; border-bottom-color: #d79602; } + +.armory-hint { color: #6d6a5e; text-align: center; padding: 24px 0; } + +.armory-list { display: flex; flex-direction: column; gap: 6px; } +.armory-row { + display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; + padding: 10px 14px; border-radius: 3px; text-decoration: none; + background: rgba(0, 0, 0, .18); box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03); + transition: background .15s; +} +a.armory-row:hover { background: rgba(255, 255, 255, .05); } +.armory-name { font-weight: bold; font-size: 14px; color: #d4cdbb; text-decoration: none; } +a.armory-name:hover { text-decoration: underline; } +.armory-meta { font-size: 12px; color: #6d6a5e; } + +/* Ficha de personaje: dos columnas (modelo 3D | equipo). */ +.armory-char { display: flex; gap: 20px; flex-wrap: wrap; align-items: flex-start; } +.armory-char-left { flex: 1 1 320px; } +.armory-char-right { flex: 1 1 320px; } +.armory-char-name { font-size: 28px; font-weight: bold; margin: 0; } +.armory-char-sub { color: #8a8578; font-size: 14px; margin: 6px 0 10px; } +.armory-char-tags { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-bottom: 14px; } +.armory-faction { font-size: 11px; text-transform: uppercase; font-weight: bold; padding: 2px 8px; border-radius: 3px; } +.armory-faction.alliance { color: #4a90d9; background: rgba(74, 144, 217, .12); } +.armory-faction.horde { color: #cc3038; background: rgba(204, 48, 56, .12); } +.armory-status { font-size: 11px; text-transform: uppercase; font-weight: bold; } +.armory-status.online { color: #1eff00; } +.armory-status.offline { color: #6d6a5e; } +.armory-guild-tag { color: #8a8578; font-size: 13px; text-decoration: none; } +.armory-guild-tag:hover { color: #d79602; } + +.armory-section-title { font-size: 15px; text-transform: uppercase; color: #8a8578; margin: 0 0 12px; } +.armory-equip { display: flex; flex-direction: column; gap: 4px; } +.armory-equip-slot { + display: flex; justify-content: space-between; align-items: center; gap: 10px; + padding: 7px 12px; border-radius: 3px; background: rgba(0, 0, 0, .18); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03); +} +.armory-equip-slot.empty { opacity: .45; } +.armory-item { font-weight: bold; font-size: 13px; text-decoration: none; } +.armory-item:hover { text-decoration: none; } +.armory-slot-name { font-size: 11px; color: #6d6a5e; text-align: right; white-space: nowrap; } + +/* Visor 3D */ +.armory-model { + margin-top: 8px; border-radius: 3px; overflow: hidden; background: rgba(0, 0, 0, .3); + box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .03); +} +.armory-model-canvas { width: 100%; height: 420px; } +.armory-model .armory-hint { padding: 12px; } + +@media (max-width: 767px) { + .armory-model-canvas { height: 320px; } +} diff --git a/web-next/.bak-armory/armory.ts b/web-next/.bak-armory/armory.ts new file mode 100644 index 0000000..ba119c2 --- /dev/null +++ b/web-next/.bak-armory/armory.ts @@ -0,0 +1,254 @@ +import type { RowDataPacket } from 'mysql2' +import { db, DB } from './db' + +// Armería: búsqueda de personajes/ítems/hermandades y ficha de personaje con equipo. +// Datos de personaje/equipo en acore_characters; datos de ítem (nombre/calidad/ +// display_id) en django_wow.item_data (importado de los db2; item_template no existe +// en 3.4.3). Se resuelve en dos pasos para no depender de joins entre esquemas. + +export interface CharacterResult { + guid: number + name: string + race: number + gender: number + class: number + level: number +} + +export interface ItemResult { + entry: number + name: string + quality: number + itemLevel: number + inventoryType: number +} + +export interface GuildResult { + guildid: number + name: string + members: number +} + +export interface EquipItem { + slot: number + entry: number + name: string + quality: number + itemLevel: number + inventoryType: number + displayId: number | null + transmogEntry: number | null + transmogDisplayId: number | null +} + +const LIMIT = 25 + +export async function searchCharacters(q: string, limit = LIMIT): Promise { + try { + const [rows] = await db(DB.characters).query( + 'SELECT guid, name, race, gender, class, level FROM characters WHERE LOWER(name) LIKE ? ORDER BY level DESC, name LIMIT ?', + [`%${q.toLowerCase()}%`, limit], + ) + return rows.map((r) => ({ + guid: r.guid, + name: r.name, + race: r.race, + gender: r.gender, + class: r.class, + level: r.level, + })) + } catch { + return [] + } +} + +export async function searchGuilds(q: string, limit = LIMIT): Promise { + try { + const [rows] = await db(DB.characters).query( + `SELECT g.guildid, g.name, (SELECT COUNT(*) FROM guild_member gm WHERE gm.guildid = g.guildid) AS members + FROM guild g WHERE LOWER(g.name) LIKE ? ORDER BY members DESC LIMIT ?`, + [`%${q.toLowerCase()}%`, limit], + ) + return rows.map((r) => ({ guildid: r.guildid, name: r.name, members: Number(r.members ?? 0) })) + } catch { + return [] + } +} + +export async function searchItems(q: string, locale: string, limit = LIMIT): Promise { + const col = locale === 'en' ? 'name_en' : 'name_es' + try { + const [rows] = await db(DB.default).query( + `SELECT entry, COALESCE(${col}, name_en) AS name, quality, item_level, inventory_type + FROM item_data WHERE LOWER(${col}) LIKE ? OR LOWER(name_en) LIKE ? ORDER BY item_level DESC LIMIT ?`, + [`%${q.toLowerCase()}%`, `%${q.toLowerCase()}%`, limit], + ) + return rows.map((r) => ({ + entry: r.entry, + name: r.name, + quality: r.quality, + itemLevel: r.item_level, + inventoryType: r.inventory_type, + })) + } catch { + return [] + } +} + +/** Sugerencias para el autocompletar: pocos resultados de cada tipo. */ +export async function suggest( + q: string, + locale: string, +): Promise<{ characters: CharacterResult[]; items: ItemResult[]; guilds: GuildResult[] }> { + const [characters, items, guilds] = await Promise.all([ + searchCharacters(q, 6), + searchItems(q, locale, 6), + searchGuilds(q, 5), + ]) + return { characters, items, guilds } +} + +export async function getCharacter(guid: number): Promise< + (CharacterResult & { guildName: string | null; guildId: number | null; online: boolean }) | null +> { + try { + const [rows] = await db(DB.characters).query( + 'SELECT guid, name, race, gender, class, level, online FROM characters WHERE guid = ?', + [guid], + ) + const c = rows[0] + if (!c) return null + let guildName: string | null = null + let guildId: number | null = null + try { + const [g] = await db(DB.characters).query( + `SELECT gu.guildid, gu.name FROM guild_member gm JOIN guild gu ON gu.guildid = gm.guildid WHERE gm.guid = ?`, + [guid], + ) + if (g[0]) { + guildId = g[0].guildid + guildName = g[0].name + } + } catch { + /* sin hermandad */ + } + return { + guid: c.guid, + name: c.name, + race: c.race, + gender: c.gender, + class: c.class, + level: c.level, + online: c.online === 1, + guildName, + guildId, + } + } catch { + return null + } +} + +/** Ítems equipados (slots 0-18) del personaje, resueltos con item_data. */ +export async function getCharacterEquipment(guid: number, locale: string): Promise { + const col = locale === 'en' ? 'name_en' : 'name_es' + try { + const [inv] = await db(DB.characters).query( + `SELECT ci.slot, ii.itemEntry, ii.transmogrification + FROM character_inventory ci JOIN item_instance ii ON ii.guid = ci.item + WHERE ci.guid = ? AND ci.bag = 0 AND ci.slot <= 18 ORDER BY ci.slot`, + [guid], + ) + if (inv.length === 0) return [] + + // Resolver todos los entries (equipados + transmog) en una consulta a item_data. + const entries = [ + ...new Set(inv.flatMap((r) => [Number(r.itemEntry), Number(r.transmogrification)]).filter((n) => n > 0)), + ] + const meta = new Map() + if (entries.length) { + const [items] = await db(DB.default).query( + `SELECT entry, COALESCE(${col}, name_en) AS name, quality, item_level, inventory_type, display_id + FROM item_data WHERE entry IN (${entries.map(() => '?').join(',')})`, + entries, + ) + for (const it of items) meta.set(Number(it.entry), it) + } + + return inv.map((r) => { + const entry = Number(r.itemEntry) + const tmog = Number(r.transmogrification) || null + const m = meta.get(entry) + const tm = tmog ? meta.get(tmog) : undefined + return { + slot: r.slot, + entry, + name: m?.name ?? `#${entry}`, + quality: m ? Number(m.quality) : 0, + itemLevel: m ? Number(m.item_level) : 0, + inventoryType: m ? Number(m.inventory_type) : 0, + displayId: m && m.display_id != null ? Number(m.display_id) : null, + transmogEntry: tmog, + transmogDisplayId: tm && tm.display_id != null ? Number(tm.display_id) : null, + } + }) + } catch { + return [] + } +} + +export interface GuildMember { + guid: number + name: string + race: number + class: number + level: number + rank: number +} + +export async function getGuild( + guildid: number, +): Promise<{ guildid: number; name: string; members: GuildMember[]; leaderName: string | null } | null> { + try { + const [g] = await db(DB.characters).query( + 'SELECT guildid, name, leaderguid FROM guild WHERE guildid = ?', + [guildid], + ) + if (!g[0]) return null + const [members] = await db(DB.characters).query( + `SELECT c.guid, c.name, c.race, c.class, c.level, gm.rank + FROM guild_member gm JOIN characters c ON c.guid = gm.guid + WHERE gm.guildid = ? ORDER BY gm.rank, c.level DESC`, + [guildid], + ) + const list = members.map((m) => ({ + guid: m.guid, + name: m.name, + race: m.race, + class: m.class, + level: m.level, + rank: m.rank, + })) + const leader = list.find((m) => m.guid === g[0].leaderguid) + return { guildid: g[0].guildid, name: g[0].name, members: list, leaderName: leader?.name ?? null } + } catch { + return null + } +} + +export interface CharacterCustomization { + optionId: number + choiceId: number +} + +/** Apariencia del personaje (piel, cara, pelo, marcas...) del sistema de choices de 3.4.3. */ +export async function getCharacterCustomizations(guid: number): Promise { + try { + const [rows] = await db(DB.characters).query( + 'SELECT chrCustomizationOptionID AS optionId, chrCustomizationChoiceID AS choiceId FROM character_customizations WHERE guid = ? ORDER BY chrCustomizationOptionID', + [guid], + ) + return rows.map((r) => ({ optionId: Number(r.optionId), choiceId: Number(r.choiceId) })) + } catch { + return [] + } +} diff --git a/web-next/.bak-armory/en.json b/web-next/.bak-armory/en.json new file mode 100644 index 0000000..69bda0d --- /dev/null +++ b/web-next/.bak-armory/en.json @@ -0,0 +1,2038 @@ +{ + "Metadata": { + "title": "NightSpire WoW WotLK 3.4.3 Server - Latino & Español 💎", + "description": "Download and play WotLK Classic for free on NightSpire - WoW WotLK 3.4.3 server - The best WoW server 🔥" + }, + "Nav": { + "home": "Home", + "login": "Sign in", + "register": "Create account", + "account": "My account", + "logout": "Log out", + "language": "Language", + "forum": "Forums", + "vote": "Vote", + "recruit": "Recruit", + "store": "Store" + }, + "Home": { + "brand": "NightSpire", + "serverStatus": "Server status", + "server": "Server", + "onlineCharacters": "Online characters", + "login": "Login", + "address": "Address", + "notAvailable": "Not available", + "news": "News", + "noNews": "There are no news available at the moment.", + "link": "Link", + "here": "here", + "tagline": "The best WoW WotLK Classic 3.4.3 server in Spanish and Latino. Join a community of thousands of players for free.", + "ctaRegister": "Create free account", + "ctaForum": "View forums" + }, + "Login": { + "title": "Sign in to NightSpire", + "alreadyLogged": "You are already signed in!", + "alreadyLoggedOther": "If you want to sign in with another account, sign out first.", + "email": "Email", + "password": "Password", + "submit": "Sign in", + "connecting": "Signing in…", + "success": "Signed in successfully. Redirecting…", + "invalidCredentials": "Incorrect email or password", + "notAnEmail": "Enter your email address, not the account name.", + "missingFields": "Please fill in all fields.", + "invalidRequest": "Invalid request.", + "genericError": "Something went wrong. Please try again later.", + "forgot": "I forgot my password/username", + "newHere": "New to the community? You can create an account", + "createAccount": "here", + "captchaFailed": "Anti-bot verification failed. Please retry.", + "forgotActivation": "I did not receive the activation link", + "publicNote": "* If you log in from a public place, remember to log out when you are not using the website or forum." + }, + "Account": { + "title": "My account", + "bnetAccount": "Account (Battle.net)", + "gameAccount": "Game account", + "logout": "Log out", + "points": "Points", + "dp": "DP", + "vp": "VP", + "battlepayCredits": "Battlepay credits", + "securityToken": "Security token", + "requested": "Requested", + "notRequested": "Not requested", + "characters": "My characters", + "level": "Level", + "noCharacters": "You have no characters yet.", + "servicesTitle": "Character services", + "utilitiesTitle": "Utilities", + "accountSettings": "Account settings", + "communityTitle": "Community", + "svcRename": "Rename character", + "svcCustomize": "Customize character", + "svcChangeRace": "Change race", + "svcChangeFaction": "Change faction", + "svcLevelUp": "Level up to 80", + "svcGold": "Buy gold", + "svcTransfer": "Transfer character", + "svcRevive": "Revive character", + "svcUnstuck": "Unstuck character", + "svcToken": "Security token", + "svcChangePassword": "Change password", + "svcChangeEmail": "Change email", + "svcVote": "Vote for us", + "svcRecruit": "Recruit a friend", + "svcStore": "Client store", + "adminPanel": "Admin panel", + "infoTitle": "Information", + "toolsTitle": "Utilities & Tools", + "adminPanelDesc": "Manage the server", + "svcChangePasswordDesc": "Manage a new password", + "svcChangeEmailDesc": "Manage an active email", + "svcTokenDesc": "Extra security for your account", + "svcRenameDesc": "Get a different name", + "svcCustomizeDesc": "A fresh new look", + "svcChangeRaceDesc": "Pick a new race for your class", + "svcChangeFactionDesc": "New adventures on the opposite faction", + "svcLevelUpDesc": "For those who don't want to grind", + "svcGoldDesc": "Get more gold for your character", + "svcTransferDesc": "Move your characters to another account", + "svcReviveDesc": "Nobody else will revive you?", + "svcUnstuckDesc": "For stuck characters", + "svcVoteDesc": "Cast your vote on top sites", + "svcRecruitDesc": "Bring friends and get great rewards", + "svcStoreDesc": "Pay your pending Battlepay purchases", + "accountOptions": "ACCOUNT OPTIONS", + "characterOptions": "CHARACTER OPTIONS", + "basicData": "Basic data", + "accountState": "Account status", + "regMail": "Registration email", + "currentMail": "Current email", + "joindate": "Registration date", + "lastIpWeb": "Last IP (web)", + "lastIpServer": "Last IP (Server)", + "banned": "Account banned", + "banEnd": "Suspension ends", + "recruited": "Recruited account", + "recruitedFriends": "Recruited friends", + "yes": "Yes", + "no": "No", + "historyOptions": "HISTORIES", + "svcPointsHistory": "PD & VP history", + "svcPointsHistoryDesc": "Check where you've spent your PD and VP", + "svcTransHistory": "Transaction history", + "svcTransHistoryDesc": "Check the operations you've made", + "svcBanHistory": "Ban history", + "svcBanHistoryDesc": "Check your account's sanctions", + "svcSecurityHistory": "Security history", + "svcSecurityHistoryDesc": "Check your account's security", + "svcQuest": "Quest tracker", + "svcQuestDesc": "Help with important quest chains", + "svcRestoreChar": "Restore character", + "svcRestoreCharDesc": "Restore a deleted character", + "svcRestoreItems": "Restore items", + "svcRestoreItemsDesc": "Restore deleted items", + "svcStoreItems": "Store", + "svcStoreItemsDesc": "Get all kinds of items", + "svcSendGift": "Send gift", + "svcSendGiftDesc": "Send gifts to your friends", + "svc2FA": "2FA (Two-step verification)", + "svc2FADesc": "Manage two-factor authentication", + "svcTransferDP": "Transfer PD", + "svcTransferDPDesc": "Transfer PD to your alt accounts", + "svcTradePD": "PD trading", + "svcTradePDDesc": "Buy or sell PD for gold", + "svcPromo": "Promo code", + "svcPromoDesc": "Redeem codes for PD or VP", + "svcRenameGuild": "Rename guild", + "svcRenameGuildDesc": "Change your guild's name", + "svcDPoints": "Get PD", + "svcDPointsDesc": "Get PD and access rewards", + "accountName": "Account name", + "twofaLabel": "2FA (Two-step verification)", + "twofaOff": "Disabled", + "banHistoryLink": "View history", + "switchAccountLabel": "Load account data:", + "addAccount": "Add account", + "addAccountPassword": "Password", + "addAccountConfirm": "Add", + "addAccountBadPassword": "Wrong password", + "addAccountMax": "You reached the account limit", + "addAccountError": "Could not add the account" + }, + "SelectAccount": { + "title": "Select your game account", + "loggedInAs": "Logged in as", + "choose": "Your Battle.net account has several game accounts. Choose which one to continue with:", + "noAccounts": "No game accounts were found linked to this Battle.net account.", + "entering": "Entering…", + "error": "The account could not be selected." + }, + "Register": { + "title": "Create account", + "alreadyLogged": "You are already signed in!", + "alreadyLoggedCreate": "If you want to create an account, sign out first.", + "password": "Password", + "confPassword": "Confirm password", + "email": "Email address", + "confEmail": "Confirm email address", + "recruiter": "Recruiter (optional)", + "submit": "Create account", + "creating": "Creating…", + "success": "The account ''{email}'' has been created.", + "successActivation": "An activation link has been sent to {email}.", + "missingFields": "Please fill in all fields.", + "passwordMismatch": "Passwords do not match.", + "passwordTooLong": "The password must not exceed 16 characters.", + "invalidEmail": "The email address is not valid.", + "emailExists": "An account with that email already exists.", + "recruiterNotFound": "The recruiter entered does not exist.", + "genericError": "Something went wrong. Please try again later.", + "captchaFailed": "Anti-bot verification failed. Please retry.", + "bnetType": "Your account is a Battle.net account: it is identified by your email address.", + "passwordRule": "The password must be alphanumeric and up to 16 characters long.", + "emailRule": "The email must be valid and one you have access to.", + "activation1": "Once the account has been created successfully, an email with an activation link will be sent.", + "activation2": "If you do not use the activation link, the account cannot be used to connect to the server.", + "loginHint": "When logging in, use your EMAIL address.", + "recruiterOptional": "Optional: only if a friend recruited you.", + "notUs": "I confirm that I am not accessing this service from the United States.", + "termsRich": "I accept the Terms and Conditions and the Privacy Policy.", + "showPassword": "Show/hide password", + "emailMismatch": "The email addresses do not match." + }, + "Activate": { + "activating": "Activating your account…", + "welcome": "Welcome to {realm}!", + "activated": "The account {email} has been activated successfully.", + "canPlay": "You can now log in to the website or start enjoying the server.", + "invalidLink": "The activation link is invalid", + "expiredLink": "The activation link has expired", + "emailExists": "An account with that email already exists", + "needHelp": "If you need help creating an account, you can contact the {realm} team.", + "title": "Account activation" + }, + "Recover": { + "title": "Recover account information", + "infoTitle": "Information", + "reqTitle": "Information request", + "prompt": "Choose the option matching the information you want to recover", + "type": "What do you want to recover?", + "typePassword": "Password", + "typeAccountName": "Account name", + "typeSecurityToken": "Security token", + "typeActivation": "Activation link", + "email": "Email address", + "submit": "Request", + "sending": "Requesting data", + "sent": "Data sent", + "success": "If an account exists with those details, we have sent you the information.", + "invalidEmail": "Enter a valid email address.", + "genericError": "Something went wrong. Please try again later.", + "captchaFailed": "Anti-bot verification failed. Please retry.", + "infoSections": [ + { + "h": "If you forgot the account password:", + "lines": [ + "- Select the 'Password' option.", + "- Enter your Username.", + "- An email will be sent with a link to generate a new password." + ] + }, + { + "h": "If you forgot the account name:", + "lines": [ + "- Select the 'Account name' option.", + "- Enter your email.", + "- An email will be sent with all accounts linked to that email." + ] + }, + { + "h": "If you forgot the Security token:", + "lines": [ + "- Select the 'Security token' option.", + "- Enter your email.", + "- An email will be sent with the Security token." + ] + }, + { + "h": "If you didn't receive the activation link:", + "lines": [ + "- Select the 'Activation link' option.", + "- Enter your email.", + "- An email will be sent with the activation link." + ] + } + ] + }, + "Reset": { + "title": "Reset password", + "password": "New password", + "confPassword": "Confirm password", + "submit": "Reset", + "saving": "Saving…", + "success": "Password reset. You can now sign in.", + "goLogin": "Go to sign in", + "invalidLink": "The password reset link is invalid", + "expiredLink": "The password reset link has expired", + "needHelp": "If you need help creating an account, you can contact the {realm} team.", + "passwordMismatch": "Passwords do not match.", + "passwordTooLong": "The password must not exceed 16 characters.", + "accountNotFound": "Account not found.", + "genericError": "Something went wrong. Please try again later." + }, + "Services": { + "reviveTitle": "Revive character", + "unstuckTitle": "Unstuck character", + "reviveAction": "Revive", + "unstuckAction": "Unstuck", + "selectCharacter": "Select a character", + "noCharactersYet": "You have no available characters.", + "processing": "Processing…", + "success": "Action completed successfully.", + "noCharacter": "Select a character.", + "notOfflineOrOwned": "The character must be offline and yours.", + "cooldown": "You can only do this once every 12 hours.", + "soapError": "Server communication error. Please try again later.", + "genericError": "Something went wrong. Please try again later.", + "info": "Information", + "back": "Back to my account", + "backShort": "Back", + "choose": "Choose your character:", + "unstuckInfo1": "The Unstuck character tool lets you unstuck a character that is stuck and moves it to its Hearthstone location.", + "unstuckInfo2": "Use this option when your character is trapped and no other option works.", + "unstuckNote1": "The character must be offline.", + "unstuckNote2": "You can repeat the action on the same character every 12 hours.", + "unstuckChoose": "Choose the character you want to unstuck", + "unstuckProcessing": "Unstucking", + "unstuckDone": "Unstucked", + "reviveChoose": "Choose the character you want to revive", + "reviveProcessing": "Reviving", + "reviveDone": "Revived", + "reviveInfo1": "The Revive character tool lets you revive a dead character.", + "reviveInfo2": "Use this option when your character is dead and no other option works.", + "reviveNote1": "The character must be offline.", + "reviveNote2": "You can repeat the action on the same character every 12 hours." + }, + "Paid": { + "rename": { + "title": "Rename character", + "pay": "Rename for {price} €", + "success": "Character {name} has been flagged for rename (applies on next login)." + }, + "customize": { + "title": "Customize character", + "pay": "Customize for {price} €", + "success": "Character {name} has been flagged for customization." + }, + "change-race": { + "title": "Change race", + "pay": "Change race for {price} €", + "success": "Character {name} has been flagged for race change." + }, + "change-faction": { + "title": "Change faction", + "pay": "Change faction for {price} €", + "success": "Character {name} has changed faction successfully." + }, + "level-up": { + "title": "Level up to 80", + "pay": "Level up to 80 for {price} €", + "success": "Character {name} has been leveled to 80." + }, + "error": "The operation could not be completed. If you were charged, contact support.", + "gold": { + "title": "Buy gold", + "buy": "Buy gold", + "selectAmount": "Select the amount", + "option": "{amount} gold — {price} €", + "success": "Gold has been added to character {name}.", + "send": "SEND GOLD" + }, + "transfer": { + "title": "Transfer character", + "pay": "Transfer for {price} €", + "destination": "Destination account", + "success": "Character {name} has been transferred to the destination account." + }, + "alreadyProcessed": "Your payment is confirmed and the reward was already delivered.", + "send-gift": { + "title": "Send gift", + "success": "The gift has been mailed to character {name}." + }, + "restore-item": { + "title": "Restore item", + "pay": "Restore for {price} €", + "success": "The item has been returned to character {name}." + }, + "rename-guild": { + "title": "Rename guild", + "pay": "Rename for {price} €", + "success": "The guild has been renamed to \"{name}\". Online members may need to reconnect to see it." + }, + "store": { + "title": "Store", + "pay": "Buy for {price} €", + "success": "Items sent to character {name}! Check your in-game mail." + } + }, + "SecurityToken": { + "title": "Security token", + "info1": "The Security token is a 6-digit (case-sensitive) code that adds security to certain options in your account panel on the website.", + "info2": "It will be requested for important account actions.", + "info3": "To get one, request it by clicking the button below.", + "info4": "When you click, a message will be sent to the account's email containing the Security Token.", + "warning": "It is important that you keep the Security token in a safe place and do not share it with other users.", + "note": "You can request a new Security token once every 7 days.", + "requestDateLabel": "Security token request date:", + "never": "Not requested", + "request": "Request token", + "requesting": "Requesting token", + "forgot": "I forgot the Security token", + "success": "The Security token has been sent to the account's email.", + "cooldown": "You can only request a new Security token every 7 days.", + "noEmail": "Add an email to your account before requesting a token.", + "genericError": "Something went wrong. Please try again later." + }, + "ChangePassword": { + "title": "Change password", + "info": "The new password must be alphanumeric and up to 16 characters. You need a security token.", + "currentPassword": "Current password", + "newPassword": "New password", + "confPassword": "Confirm new password", + "token": "Security token", + "submit": "Change password", + "changing": "Changing…", + "success": "Password changed. You have been logged out for security.", + "missingFields": "Please fill in all fields.", + "passwordMismatch": "Passwords do not match.", + "passwordTooLong": "The password must not exceed 16 characters.", + "invalidToken": "The security token is incorrect.", + "wrongCurrentPassword": "The current password is incorrect.", + "accountNotFound": "Account not found.", + "genericError": "Something went wrong. Please try again later." + }, + "ChangeEmail": { + "title": "Change email", + "info": "The current email must be entered exactly, respecting case. You need a security token.", + "currentPassword": "Current password", + "currentEmail": "Current email", + "newEmail": "New email", + "confEmail": "Confirm new email", + "token": "Security token", + "submit": "Change email", + "sending": "Sending…", + "success": "A confirmation email has been sent to your current email.", + "missingFields": "Please fill in all fields.", + "wrongCurrentEmail": "The current email is not correct.", + "invalidEmail": "The new email is not valid.", + "invalidToken": "The security token is incorrect.", + "wrongCurrentPassword": "The current password is incorrect.", + "genericError": "Something went wrong. Please try again later." + }, + "ConfirmOldEmail": { + "title": "Confirm email change", + "activating": "Confirming…", + "success": "Current email confirmed. Check your NEW email to complete the second step.", + "error": "The link is invalid or has already been used." + }, + "ConfirmNewEmail": { + "title": "Confirm new email", + "activating": "Applying the change…", + "success": "Email changed successfully! You can now sign in with the new email.", + "error": "The link is invalid, expired or the account was not found.", + "goLogin": "Go to sign in" + }, + "Forum": { + "title": "Forums", + "noForums": "No forums available yet.", + "topics": "Topics", + "posts": "Posts", + "lastTopic": "Latest topic", + "by": "by", + "views": "Views", + "noTopics": "No topics in this forum yet.", + "locked": "Locked", + "sticky": "Pinned", + "backToForum": "Back to forums", + "backToTopics": "Back to forum", + "notFound": "Not found", + "newTopic": "New topic", + "reply": "Reply", + "newTopicName": "Topic title", + "newTopicText": "Write your message…", + "publish": "Post topic", + "publishing": "Posting…", + "replyText": "Write your reply…", + "sendReply": "Reply", + "sending": "Sending…", + "loginToPost": "Sign in to participate.", + "emptyError": "Fill in all fields.", + "genericError": "Something went wrong. Please try again later.", + "moderation": "Moderation", + "lock": "Lock", + "unlock": "Unlock", + "pin": "Pin", + "unpin": "Unpin", + "pinned": "Pinned", + "deleteTopic": "Delete topic", + "confirmDeleteTopic": "Are you sure you want to delete this topic?", + "edit": "Edit", + "delete": "Delete", + "save": "Save", + "cancel": "Cancel", + "confirmDeletePost": "Are you sure you want to delete this post?", + "tooShort": "The message is too short (minimum 5 characters).", + "topicLocked": "This topic is locked.", + "editedMark": "edited", + "search": "Search", + "searchPlaceholder": "Search the forum…", + "searchHint": "Type at least 2 characters to search.", + "noResults": "No results for “{query}”.", + "resultsCount": "{count} result(s) for “{query}”.", + "in": "in", + "replyOnLastPage": "Go to the last page to reply", + "moveTopic": "Move to", + "restore": "Restore", + "restoreTopic": "Restore topic", + "deletedMark": "Deleted", + "memberSince": "Member since", + "recentTopics": "Recent topics", + "roleAdmin": "Administrator", + "roleGm": "GM", + "topic": "topic", + "createdBy": "Created by", + "deleted": "Deleted", + "createTopic": "Create topic", + "topicTitle": "Topic title", + "postTopic": "Post topic", + "errTitle": "The title must be between 3 and 45 characters.", + "post": "Post", + "staff": "Staff", + "member": "Member", + "editPost": "Edit post", + "undelete": "Undelete" + }, + "Admin": { + "title": "Admin panel", + "dashboard": "Dashboard", + "news": "News", + "manageNews": "Manage news", + "newsTitle": "Title", + "newsContent": "Content (HTML)", + "newsLink": "Link (optional)", + "create": "Create news", + "creating": "Creating…", + "delete": "Delete", + "confirmDelete": "Delete this news item?", + "noNews": "No news.", + "forbidden": "You do not have permission to access here.", + "emptyError": "Fill in the title and content.", + "genericError": "Something went wrong.", + "managePrices": "Manage prices", + "prices": "Service prices", + "price": "Price (€)", + "save": "Save", + "saved": "Saved", + "svc_rename": "Rename character", + "svc_customize": "Customize", + "svc_change-race": "Change race", + "svc_change-faction": "Change faction", + "svc_level-up": "Level up to 80", + "svc_transfer": "Transfer character", + "manageVotes": "Manage vote sites", + "votes": "Vote sites", + "voteName": "Name", + "voteUrl": "URL", + "voteImage": "Image URL", + "votePoints": "VP per vote", + "noVotes": "No vote sites.", + "manageGold": "Manage gold options", + "gold": "Gold options", + "goldAmount": "Gold amount", + "goldPrice": "Price (€)", + "goldUnit": "gold", + "noGold": "No gold options.", + "manageUsers": "Manage users", + "users": "Users", + "searching": "Searching…", + "userSearchPlaceholder": "Search account by username or email…", + "noUsers": "No matching accounts.", + "online": "Online", + "banned": "Banned", + "lastLogin": "Last login", + "ban": "Ban", + "unban": "Unban", + "banReasonPrompt": "Ban reason:", + "banDaysPrompt": "Ban days (0 = permanent):", + "confirmUnban": "Unban {name}?", + "manageRecruit": "Manage recruit rewards", + "recruit": "Recruit-a-friend rewards", + "requiredFriends": "Required friends", + "rewardName": "Reward name", + "itemId": "Item ID", + "itemQuantity": "Quantity", + "itemLink": "Item link", + "iconClass": "Icon class", + "noRewards": "No rewards.", + "requiredFriendsShort": "{n} friend(s)", + "manageForum": "Manage forums", + "newCategory": "New category", + "categoryName": "Category name", + "order": "Order", + "noCategories": "No categories.", + "noForums": "No forums in this category.", + "forumName": "Forum name", + "forumDescription": "Description", + "addForum": "Add forum", + "hidden": "hidden", + "show": "Show", + "hide": "Hide", + "categoryNotEmpty": "Category has forums; delete them first.", + "backToPanel": "← Back to panel", + "managePromo": "Manage promo codes", + "promo": "Promo codes", + "createPromo": "Create code", + "promoCode": "Code", + "promoPd": "PD", + "promoPv": "PV", + "promoMaxUses": "Max uses", + "promoExpires": "Expires (optional)", + "promoActive": "Active", + "promoUses": "Uses", + "promoRedemptions": "Redemptions", + "noPromo": "No promo codes.", + "promoDuplicate": "A code with that text already exists.", + "promoEmptyError": "Enter the code and at least PD or PV (with max uses ≥ 1).", + "forum": "Forums", + "search": "Search", + "promoConfirmDelete": "Delete this promo code?", + "newsTitleEn": "Title (English, optional)", + "newsContentEn": "Content (English, optional)", + "edit": "Edit", + "saving": "Saving…", + "cancel": "Cancel", + "newsEnHint": "Leave English empty to fall back to Spanish on the English site.", + "categoryNameEn": "Name (English, optional)", + "forumNameEn": "Forum name (English, optional)", + "forumDescriptionEn": "Description (English, optional)", + "forumEnHint": "Leave English empty to fall back to Spanish on the English site.", + "forumType": "Type", + "forumTypeNormal": "Normal", + "forumTypeClass": "Class", + "forumTypeFlag": "Language (flag)", + "forumIcon": "Icon (name or path)", + "forumColor": "Title color (#hex)", + "forumNotEmpty": "Cannot delete a forum that has topics." + }, + "Vote": { + "title": "Vote for us", + "info": "Vote for {server} on the sites below and earn VP. You can vote on each site every 12 hours.", + "sitesTitle": "Vote sites", + "noteLabel": "Note:", + "note": "some sites may take a few minutes to credit the vote.", + "refresh": "Refresh", + "vote": "Vote", + "voting": "Voting", + "voted": "Voted", + "pv": "VP", + "lastVote": "Last vote: {date}", + "neverVoted": "You haven't voted here yet.", + "success": "Thanks for voting on {site}! {points} VP credited.", + "cooldown": "You must wait {hours}h {minutes}m to vote again on this site.", + "siteNotFound": "Vote site not found.", + "genericError": "Something went wrong. Please try again later.", + "noSites": "No vote sites configured yet.", + "loginToVote": "Sign in to vote.", + "infoSections": [ + { + "h": "What is voting?", + "lines": [ + "Voting is the act of giving the server a vote on a website that offers top lists.", + "As a reward for voting for {server}, you receive VP." + ] + }, + { + "h": "What are VP?", + "lines": [ + "We give our users the chance to earn levels with exclusive benefits in our online community. These benefits include access to special tools, exclusive content and significant improvements to the website experience. When voting, users receive VP, an internal recognition unit reflecting their commitment and progress on our platform. VP let you reach new levels and unlock exclusive rewards. VP are a unique way to value and reward the active participation of our users in the community." + ] + }, + { + "h": "How can I vote?", + "lines": [ + "To vote for {server}, click the buttons below; each one redirects to the corresponding top-list website.", + "Once there, give the server a vote and you'll receive your VP." + ] + }, + { + "h": "How many VP do I get per vote?", + "lines": [ + "In the list below, each site shows how many VP it grants for a successful vote." + ] + }, + { + "h": "How often can I vote?", + "lines": [ + "You can only vote on each site every 12 hours.", + "The box shows the last time you voted on each site." + ] + }, + { + "h": "Why doesn't my vote count on the site?", + "lines": [ + "We use a postback system, so each vote site sends us a response whenever a user votes for our server.", + "Once the response is analyzed on our site, the corresponding VP are added as long as the user voted correctly.", + "Each vote site also has its own restrictions, such as only allowing one vote per IP, so a vote may not count if several accounts vote from the same IP on the same day." + ] + }, + { + "h": "Questions or problems voting?", + "lines": [ + "If after reading this guide you still have questions, the {server} team can assist you at any time. You can open a ticket asking for help to vote." + ] + } + ] + }, + "Common": { + "prev": "Previous", + "next": "Next", + "page": "Page", + "note": "NOTE" + }, + "RecruitClaim": { + "title": "Recruit a friend", + "intro": "Invite your friends: when they reach level 80, claim rewards.", + "loginToClaim": "Log in to claim rewards", + "level80Friends": "Recruited friends at level 80", + "deliverTo": "Deliver to", + "noCharacters": "You have no characters.", + "noRewards": "No rewards available.", + "requires": "Requires {n} friend(s)", + "claimed": "Claimed", + "claiming": "Claiming…", + "claim": "Claim", + "locked": "Locked", + "notEnoughFriends": "You don’t have enough level-80 friends.", + "notAuthenticated": "You must be logged in.", + "invalidRequest": "Invalid request.", + "selectRewardAndCharacter": "Select a reward and a character.", + "rewardNotFound": "Reward not found.", + "invalidCharacter": "That character is not yours.", + "alreadyClaimed": "You already claimed this reward.", + "requirementsNotMet": "Requirements not met (or friends share your IP).", + "deliveryError": "Error delivering the reward.", + "claimSuccess": "Reward “{reward}” delivered to {character}." + }, + "Editor": { + "bold": "Bold", + "italic": "Italic", + "underline": "Underline", + "strike": "Strikethrough", + "link": "Link", + "quote": "Quote", + "list": "List", + "code": "Code", + "linkPrompt": "Link URL:", + "linkText": "link text", + "quoteText": "quote", + "listItem": "item" + }, + "Battlepay": { + "title": "Store (Battlepay)", + "intro": "Pay your pending in-game store purchases here. They are delivered in-game automatically.", + "noOrders": "You have no pending purchases.", + "reference": "Reference", + "pay": "Pay", + "redirecting": "Redirecting…", + "paidOk": "Payment confirmed! Your purchase will be delivered in-game.", + "alreadyPaid": "This purchase was already paid.", + "backToStore": "Back to the store", + "orderNotFound": "Order not found or already processed.", + "genericError": "An error occurred. Please try again." + }, + "NotFound": { + "title": "Page not found", + "message": "It looks like the page you are looking for doesn't exist or isn't available." + }, + "CharService": { + "transfer": { + "pageTitle": "Transfer character", + "intro": "The Transfer character tool lets you move a character to another account.", + "dkHeading": "For Death Knight characters:", + "dkCond1": "- The destination account must have at least one character of level 55 or higher.", + "dkCond2": "- The destination account cannot have a Death Knight character.", + "securityLock": "Your account will be locked for 5s as a security measure if the operation succeeds.", + "buttonExplain": "When you use the TRANSFER CHARACTER button for the character you have chosen, it will be transferred from your account to the account you have specified.", + "afterTransfer": "When you enter the character list of the destination account, you will see the transferred character.", + "securityTokenHint": "If you don't have a Security Token yet, you can request it here.", + "twoFaHint": "If you don't have 2FA yet, you can request it here.", + "noteOffline": "The character is required to be offline.", + "noteIrreversible": "Please make sure you have chosen the correct character, as this action cannot be reversed once performed.", + "requires": "Requires {price} (SumUp)", + "noCharacters": "You don't have any characters available.", + "selectPlaceholder": "Select a character", + "destinationPlaceholder": "Destination account", + "passwordPlaceholder": "Your account password", + "tokenPlaceholder": "Security Token", + "submit": "TRANSFER CHARACTER", + "submitting": "Transferring character", + "confirm": "Are you sure you want to transfer the character \"{character}\" to the account {destination} for {price} € (SumUp)?", + "errorGeneric": "The transfer could not be started. Please try again.", + "errorUnexpected": "Something went wrong. Please try again later." + }, + "sendGift": { + "pageTitle": "Send gift", + "intro": "The Send gift tool lets you send gifts to your friends.", + "explain1": "When you choose which character sends the gift and the character that will receive it, you will be able to see the list of items available to send as a gift.", + "explain2": "The available items are the same as in the store, and you can send several items at once.", + "explain3": "When you use the SEND GIFT button, a mail will be sent to the destination character with the selected items, indicating who gave it.", + "securityTokenHint": "If you don't have a Security Token yet, you can request it here.", + "noteIrreversible": "Please make sure you have entered the correct character name, as this action cannot be reversed once performed.", + "noCharacters": "You don't have any characters available.", + "noItems": "There are no items available to gift right now.", + "errMissingFields": "Fill in the source character, the destination character and the security token.", + "errEmptyCart": "Add at least one item to the cart.", + "confirm": "Send the gift to \"{destination}\" for {total} {currency} (SumUp)? This action cannot be reversed.", + "errPayment": "The payment could not be started. Please try again.", + "errUnexpected": "Something went wrong. Please try again later.", + "sourcePrompt": "Choose which character sends the gift:", + "sourcePlaceholder": "Source character", + "destPrompt": "Name of the character that will receive the gift:", + "destPlaceholder": "Destination character", + "tokenPrompt": "Security Token:", + "tokenPlaceholder": "Security Token", + "availableItems": "Available items", + "add": "Add", + "back": "Back", + "next": "Next", + "cart": "Cart", + "cartEmpty": "You haven't added any items yet.", + "total": "Total: {total} {currency} (SumUp)", + "submit": "SEND GIFT", + "submitting": "Sending gift" + }, + "quest": { + "pageTitle": "Quest tracker", + "intro": "The Quest tracker tool lets you see the status of important quests or quest chains on your characters.", + "optionsAvailable": "Available options:", + "className": { + "warlock": "Warlock", + "hunter": "Hunter", + "shaman": "Shaman", + "druid": "Druid", + "warrior": "Warrior", + "paladin": "Paladin" + }, + "fromLevel": "starting at level {level}", + "byReputation": "By reputation", + "hodir": "The Sons of Hodir: Main quest chain up to interacting with the quartermaster Lillehoff", + "bySpecific": "By specific quest", + "fromLevel10": "Starting at level 10", + "howToSearch": "How to search by specific quest:", + "step1": "1) Visit our database.", + "step2": "2) Search there for the name of the quest.", + "step3": "3) Once you have found it, its link will look like \"{url}/?quest=12843\"", + "step4": "4) Use the final number of the link in the Quest ID field (Example from the previous link: 12843).", + "searchButtonExplain": "When you use the SEARCH QUESTS button, you will be able to see the status of the character's quests.", + "noteOffline": "The character is required to be offline and to meet the minimum level of each option.", + "noteChain1h": "The quest chain search can be repeated on the same character every 1 hour.", + "noteClass30": "The class quest chain search can be repeated on the same character every 30 minutes.", + "noteSpecific10": "The specific quest search can be repeated on the same character every 10 minutes.", + "specificLabel": "By specific quest", + "selectPlaceholder": "Select a character", + "selectOption": "Select an option", + "questIdPlaceholder": "Quest ID", + "submit": "SEARCH QUESTS", + "submitting": "Searching quests", + "noCharacters": "There are no characters available for this tool", + "stateCompleted": "Completed", + "stateInProgress": "In progress", + "stateNotStarted": "Not started", + "questNumber": "Quest #{quest}", + "errors": { + "missingFields": "Select a character and an option.", + "characterNotOwned": "The selected character is not valid.", + "characterOnline": "The character must be offline.", + "wrongClass": "That option does not match the character's class.", + "levelTooLow": "The character does not meet the minimum level for that option.", + "invalidQuestId": "Enter a valid quest ID.", + "noData": "That option is not available yet.", + "cooldown": "You must wait {minutes} min to repeat this search on this character.", + "captcha": "Verify that you are not a robot.", + "notAuthenticated": "Your session has expired. Please sign in again.", + "default": "The search could not be completed. Please try again." + } + }, + "restoreChar": { + "pageTitle": "Restore character", + "intro": "The Restore character tool lets you restore a character that has been deleted.", + "conditions": "Only available for characters that meet the following two conditions:", + "cond1": "- Level higher than 60.", + "cond2": "- Deleted within a period of less than 30 days.", + "dkHeading": "For Death Knight characters:", + "dkCond": "- It is not possible to restore a Death Knight character if there is already another active one on the account.", + "afterRestore": "When you enter the character list of your account, you will see the restored character.", + "noteConditions": "Deleted characters that do not meet those conditions are no longer restorable.", + "noteCooldown": "The action can be repeated on the same character every 12 hours.", + "noCharacters": "There are no characters", + "selectPlaceholder": "Select a character", + "optionLabel": "{name} (level {level})", + "restored": "RESTORED", + "recovering": "Restoring", + "recover": "RESTORE", + "successMsg": "Character \"{name}\" restored! You'll see it when you enter the realm.", + "errors": { + "notFound": "That deleted character does not belong to your account.", + "notDeleted": "That character is not deleted.", + "levelTooLow": "Only characters higher than level 60 can be restored.", + "tooOld": "The character was deleted more than 30 days ago and is no longer restorable.", + "dkExists": "You cannot restore a Death Knight: you already have an active one on the account.", + "nameTaken": "The original name is already in use by another character.", + "cooldown": "You can only attempt to restore the same character once every 12 hours.", + "notAuthenticated": "Your session has expired. Please sign in again.", + "default": "The character could not be restored. Please try again." + } + }, + "restoreItems": { + "pageTitle": "Restore items", + "intro": "The Restore items tool lets you restore items that have been deleted.", + "conditions": "Only available for items that meet the following conditions:", + "quality": "- Of quality: Rare | Epic | Legendary | Artifact | Relic.", + "condEquip": "- Equippable.", + "condBound": "- Binds when picked up.", + "condDeleted": "- Deleted within a period of less than 7 days.", + "noteConditions": "Deleted items that do not meet those conditions are no longer restorable.", + "noteCooldown": "Deleted items can be checked on the same character every 8 hours.", + "requires": "Each item requires {price} (SumUp)", + "selectPlaceholder": "Select a character", + "search": "SEARCH ITEMS", + "searching": "Searching", + "deletedItemsOf": "Deleted items of {character}", + "noDeletedItems": "There are no restorable deleted items.", + "noDeletedItemsMsg": "This character has no restorable deleted items.", + "restoreItem": "Restore ({price} €)", + "confirm": "Restore \"{name}\" for {price} € (SumUp)?", + "queryOther": "Check another character", + "errors": { + "characterNotOwned": "The selected character is not valid.", + "cooldown": "You can only check this character's items every 8 hours ({minutes} min left).", + "soapError": "Could not connect to the game server. Please try again later.", + "insufficientPoints": "You don't have enough DP (100 are required per item).", + "captcha": "Verify that you are not a robot.", + "notAuthenticated": "Your session has expired. Please sign in again.", + "default": "Something went wrong. Please try again." + } + } + }, + "CharServiceB": { + "changeFaction": { + "intro": "The Change character faction tool lets you switch from the Alliance to the Horde and vice versa.", + "alsoRename": "If you also want to change the character's name, you must use the Rename character tool.", + "onChange": "When making a Faction change:", + "change1": "- Items, spells, titles, reputations, mounts and achievements will be changed to the new faction", + "change2": "- Active quests in the Quest Log will be abandoned", + "change3": "- Arena teams will be deleted", + "change4": "- Friends in the Friends List will be removed", + "restrictionsTitle": "Character restrictions:", + "restriction1": "- Must not have active auctions", + "restriction2": "- Must not have mail in the mailbox", + "restriction3": "- Must not be the captain of an arena team", + "restriction4": "- Must not be a member of a guild", + "restriction5": "- Must not have too much gold", + "tableLevel": "Level", + "tableMaxGold": "Max. Gold", + "instructions": "By using the CHANGE FACTION button on the character you have chosen, a faction change request will be sent for that character.", + "iconInfo": "When you enter your account's character list, you will see an icon to the left of your chosen character.", + "iconClick": "By clicking that icon you will enter the character edit menu that will let you switch to the opposite faction.", + "noteLegend": "NOTE", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requires": "Requires {price} (SumUp)", + "payLabel": "CHANGE FACTION", + "confirm": "Are you sure you want to change the selected character’s faction for {price} € (SumUp)?", + "title": "Change character faction" + }, + "changeRace": { + "warning": "THIS CHANGE DOES NOT ALLOW SWITCHING TO THE OPPOSITE FACTION", + "intro": "The Change character race tool lets you change the character's race to others of the SAME faction.", + "alsoRename": "If you also want to change the character's name, you must use the Rename character tool.", + "instructions": "By using the CHANGE RACE button on the character you have chosen, a race change request will be sent for that character.", + "iconInfo": "When you enter your account's character list, you will see an icon to the left of your chosen character.", + "iconClick": "By clicking that icon you will enter the character edit menu that will let you choose among the races of the same faction.", + "noteLegend": "NOTE", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requires": "Requires {price} (SumUp)", + "payLabel": "CHANGE RACE", + "confirm": "Are you sure you want to change the selected character’s race for {price} € (SumUp)?", + "title": "Change character race" + }, + "customize": { + "intro": "The Customize character tool lets you change the following aspects of a character:", + "aspect1": "- Skin color", + "aspect2": "- Face", + "aspect3": "- Hair", + "aspect4": "- Sex", + "aspect5": "- Race-specific features such as horns, earrings, markings, facial hair", + "alsoRename": "If you also want to change the character's name, you must use the Rename character tool.", + "instructions": "By using the CUSTOMIZE button on the character you have chosen, a customization request will be sent for that character.", + "iconInfo": "When you enter your account's character list, you will see an icon to the left of your chosen character.", + "iconClick": "By clicking that icon you will enter the character edit menu that will let you choose different features.", + "noteLegend": "NOTE", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requires": "Requires {price} (SumUp)", + "payLabel": "CUSTOMIZE", + "confirm": "Are you sure you want to customize the selected character for {price} € (SumUp)?", + "title": "Customize character" + }, + "levelUp": { + "intro": "The Level up to 80 tool lets you raise any character to level 80.", + "onlyLevel": "It will only level up the character. This option does not include items/gold/etc.", + "instructions": "By using the LEVEL UP TO 80 button on the character you have chosen, level 80 will be sent to the character.", + "levelInfo": "When you enter your account's character list, you will see that your chosen character is already level 80.", + "noteLegend": "NOTE", + "noteOffline": "The character is required to be offline.", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requires": "Requires {price} (SumUp)", + "payLabel": "LEVEL UP TO 80", + "confirm": "Are you sure you want to level the selected character up to 80 for {price} € (SumUp)?", + "title": "Level up to 80" + }, + "gold": { + "intro": "The Acquire gold tool lets you send gold to a character.", + "instructions": "By using the SEND GOLD button on the character you have chosen, a mail with the chosen amount of gold will be sent to the character.", + "mailInfo": "When you log into the realm with that character, you will have the message with the selected amount of gold in your mailbox.", + "noteLegend": "NOTE", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requiresLabel": "Requires", + "title": "Acquire gold" + }, + "rename": { + "intro": "The Rename character tool lets you change a character's name.", + "instructions": "By using the RENAME button on the character you have chosen, a name change request will be sent for that character.", + "newNameInfo": "When you try to enter the realm with that character, it will ask you to choose a new name.", + "noteLegend": "NOTE", + "noteConfirm": "Please make sure you have chosen the correct character, as this action cannot be undone once performed.", + "requires": "Requires {price} (SumUp)", + "payLabel": "RENAME", + "confirm": "Are you sure you want to rename the selected character for {price} € (SumUp)?", + "title": "Rename character" + } + }, + "History": { + "points": { + "pageTitle": "PD and PV history", + "intro1": "Here you will see the most recent PD and PV usage on the account.", + "intro2": "With this information you can keep track of everything you have acquired as well as check that all activity is normal.", + "intro3": "If you notice any suspicious movement, you can contact the NightSpire team.", + "boxTitle": "PD and PV history", + "currentBalance": "Current balance:", + "noMovements": "No movements", + "thDate": "Date", + "thConcept": "Concept", + "thMethod": "Method", + "thAmount": "Amount", + "thStatus": "Status", + "concept": { + "pd": "{n} PD", + "vote": "Vote on {detail}", + "promo": "Code {detail}", + "rename": "Rename character: {detail}", + "customize": "Customize character: {detail}", + "changeRace": "Change race: {detail}", + "changeFaction": "Change faction: {detail}", + "levelUp": "Level up to 80: {detail}", + "gold": "Acquire gold: {detail}", + "transfer": "Transfer character: {detail}", + "restoreItem": "Restore item: {detail}", + "sendGift": "Gift for {detail}" + }, + "method": { + "vote": "Vote", + "promo": "Promotion" + }, + "status": { + "delivered": "Delivered", + "pending": "Pending", + "credited": "Credited" + } + }, + "trans": { + "pageTitle": "Transaction history", + "intro1": "Here you will see the information we receive from our different automatic payment platforms.", + "intro2": "Have you had a problem with any transaction?", + "intro3": "If you have had a problem with one of the transactions or you have not received your PD, you can contact us on our Discord or through the email consultas@nightspire.gg.", + "noteStripe": "Card payments are normally approved within a few seconds.", + "noteSumup": "SumUp may take a few minutes to confirm the payment after completing the checkout.", + "paidNote": "You will receive the PD corresponding to each transaction only when it is approved and the status is PAID (Paid).", + "important": "Important:", + "noMovements": "No movements", + "thTxId": "Transaction ID", + "thStatus": "Status", + "thConcept": "Concept", + "thCreatedAt": "Created date", + "thAmount": "Amount" + }, + "ban": { + "pageTitle": "Sanctions history", + "intro1": "Here you can see all the sanctions the account has had.", + "intro2": "If you have an active sanction, you will see that its status shows Active.", + "intro3": "To prevent your account from being sanctioned, remember to respect our server's rules.", + "important": "Important:", + "autoBlock1": "If your account appears as sanctioned or closed when trying to log in to the realm, but your history does not have any active sanction, it means you have had a temporary automatic block due to too many failed login attempts.", + "autoBlock2": "Wait at least 10 minutes before trying again and make sure to use the correct account name and password.", + "claim": "To file a sanction appeal, please go to our forum and visit the Appeals section.", + "bansTitle": "Bans history", + "noBans": "No bans", + "mutesTitle": "Mutes history", + "noMutes": "No mutes", + "thScope": "Scope", + "thReason": "Reason", + "thBy": "Sanctioned by", + "thDate": "Date", + "thExpires": "Expires", + "thStatus": "Status", + "permanent": "Permanent", + "scope": { + "account": "Account", + "battlenet": "Battle.net", + "character": "Character: {name}" + }, + "status": { + "active": "Active", + "activePermanent": "Active (permanent)", + "expired": "Expired" + } + }, + "security": { + "pageTitle": "Security history", + "intro1": "Here you will see activity and connection information for your account.", + "intro2": "Each table has a detailed explanation of the information provided.", + "intro3": "If you don't recognize any type of activity, we recommend changing the password of your account and of the email linked to it.", + "activityTitle": "Activity history", + "activityDesc": "Shows account security activity, such as password changes.", + "realmTitle": "Connection history (Realm)", + "realmDesc": "Shows a history of connections to the realm only when the IP has changed. It is not a history of every connection.", + "webTitle": "Connection history (Web)", + "webDesc": "Shows a history of every connection to the website.", + "noActivity": "No activity", + "noConnections": "No connections", + "thUser": "User", + "thAction": "Action", + "thStatus": "Status", + "thDate": "Date", + "action": { + "tokenRequested": "Security token requested" + }, + "webStatus": { + "success": "Successful login", + "wrongPassword": "Wrong password" + } + } + }, + "Legal": { + "cookies": { + "title": "Cookie Declaration", + "p1": "This website uses cookies. The cookies on this website are used to personalize content and ads, offer social media features and analyze traffic. In addition, we share information about your use of the website with our social media, advertising and web analytics partners, who may combine it with other information that you have provided to them or that they have collected from your use of their services.", + "p2": "Cookies are small text files that websites can use to make the user experience more efficient.", + "p3": "The law states that we can store cookies on your device if they are strictly necessary for the operation of this page. For all other types of cookies we need your permission.", + "p4": "This page uses different types of cookies. Some cookies are placed by third-party services that appear on our pages.", + "p5": "At any time you can change or withdraw your consent from this Cookie Declaration on our website.", + "p6": "Learn more about who we are, how you can contact us and how we process personal data in our Privacy Policy.", + "h1cat": "Types of cookies we use", + "necessaryTitle": "Necessary Cookies", + "necessaryDesc": "Necessary cookies help make a website usable by enabling basic functions like page navigation and access to secure areas of the website. The website cannot function properly without these cookies.", + "thCookie": "Cookie", + "thProvider": "Provider", + "thPurpose": "Purpose", + "thDuration": "Duration", + "thContentType": "Content type", + "thMoreInfo": "More information", + "durSession": "Session", + "dur1Year": "1 year", + "nPurpose1": "Remembers the language you chose (Spanish or English).", + "nPurpose2": "Stores your cookie preferences so we do not ask you again.", + "nPurpose3": "Keeps you signed in. It is encrypted and cannot be read by JavaScript in your browser.", + "cfNote": "Our server does not sit behind a Cloudflare proxy, so this site sets no Cloudflare cookies. The only exception is the Turnstile widget on forms, which loads from Cloudflare’s domain and is governed by their own policy.", + "embeddedTitle": "Embedded Content Cookies", + "embeddedDesc": "Some pages load third-party content or resources. Those services may receive your IP address and, in the case of videos, set their own cookies on their own domains (never on ours).", + "embType1": "Anti-bot verification on forms (sign-up, sign-in, recovery). It sets no cookies on our domain.", + "embType2": "Game item icons and information.", + "embType3": "Site libraries (fonts and icons).", + "embType4": "Videos embedded in the Content Creators section.", + "privacyPolicyLink": "Privacy Policy", + "embeddedNote": "YouTube videos are only embedded if a content creator has one configured. These third parties are governed by their own privacy policies.", + "h2cat": "How to delete cookies from your browser", + "deleteP": "In addition to using our settings panel, you can delete cookies directly from your browser:", + "deleteLi1": "Chrome: Settings → Privacy and security → Cookies and other site data", + "deleteLi2": "Firefox: Options → Privacy & Security → Cookies and Site Data", + "deleteLi3": "Safari: Preferences → Privacy → Manage Website Data", + "deleteLi4": "Edge: Settings → Cookies and site permissions → Cookies", + "h3cat": "Your consent status", + "consentP": "You can change or withdraw your consent at any time. When contacting us regarding your consent, please indicate the date of your consent.", + "h4cat": "More information", + "moreInfoP": "If you have any questions about our cookie policy, you can contact us through our Contact page.", + "updated": "Last updated: March 2026", + "noneTitle": "Cookies we do NOT use", + "noneDesc": "This site uses no analytics, marketing or advertising cookies. There is no Google Analytics, no social media pixels and no cross-site tracking. We do not use preference cookies either, beyond the language one." + }, + "privacy": { + "title": "Privacy Policy", + "p1": "This Privacy Policy describes how we collect, use, store and protect the personal information of the users (\"you\" or \"user\") of our website. By using our website, you accept the practices described in this policy.", + "h1": "Collection of Personal Information", + "p2": "We collect the following personal information when you use our website:", + "p3": "1. Cookies: We use cookies to collect information about your activity on our website. Cookies are small text files that are stored on your device and allow us to recognize your browser or device and remember certain information. These cookies may be session cookies or persistent cookies. You can adjust your browser settings to refuse all cookies or to indicate when a cookie is being sent. However, if you disable cookies, some features of our website may not work properly.", + "p4": "2. IP addresses: We collect the IP addresses of the users who visit our website. IP addresses are used to analyze trends, administer the website, track user movement and gather demographic information. We do not link IP addresses to any personally identifiable information.", + "p5": "3. Email addresses: We collect the email addresses that you provide when registering on our website or when updating your registration information. We use these email addresses to send you information related to your account, such as registration confirmations, notifications of changes to the terms or policies, and security updates.", + "p6": "4. Usernames and passwords: We collect the usernames and passwords that you choose when registering an account on our website. These credentials are used to authenticate your access to your account and to protect your personal information.", + "h2": "Use of Personal Information", + "p7": "We use the personal information we collect for the following purposes:", + "p8": "1. Provide and improve our services: We use your personal information to provide you with the requested services and improve your experience on our website. This includes personalizing content and recommendations, providing technical support, and analyzing the performance and effectiveness of our website.", + "p9": "2. Communications: We may use your email address to send you communications related to your account, such as registration confirmations, notifications of changes to the terms or policies, security updates and other important updates.", + "h3": "Protection of Personal Information", + "p10": "We take reasonable measures to protect the personal information we collect and store. We use technical, administrative and physical security measures to protect your information against unauthorized access, disclosure, alteration or destruction.", + "h4": "Disclosure of Personal Information to Third Parties", + "p11": "We do not sell, trade or transfer your personal information to third parties without your consent, except in the following cases:", + "p12": "- Service providers: We may share your personal information with service providers who perform functions on our behalf, such as website hosting, payment processing and data analysis. These service providers have access to your personal information only to the extent necessary to perform their functions and are obligated not to disclose or use the information for any other purpose.", + "p13": "- Legal compliance: We may disclose your personal information if we believe in good faith that such disclosure is necessary to comply with a legal obligation, protect your rights or safety, investigate fraud or respond to a legal request.", + "h5": "Your Rights and Choices", + "p14": "You have certain rights and choices regarding your personal information:", + "p15": "- Access and update: You can access and update certain personal information provided through your account on our website.", + "p16": "- Deletion of data: You may request the deletion of your personal information from our records, subject to any legal or contractual requirement we may have.", + "p17": "- Cookies: You can adjust your browser settings to refuse cookies or to indicate when a cookie is being sent. However, please note that disabling cookies may affect the functioning of our website.", + "h6": "Improper use of third-party platforms in order to violate our refund policy", + "p18": "This type of action will result in the expulsion of the user from our site without any refund.", + "h7": "Changes to this Privacy Policy", + "p19": "We reserve the right to update this Privacy Policy at any time. We recommend that you periodically review this page to be aware of any changes. The effective date of the policy will be indicated at the top of the page.", + "h8": "Contact us", + "p20": "If you have any questions or concerns about this Privacy Policy, you can contact us through the following contact information:", + "updated": "Update date: 23-05-2023" + }, + "terms": { + "title": "Terms and conditions", + "h1": "IMPORTANT", + "p1": "Please take a moment to read the terms and conditions detailed below. If you agree with them, then you may enter our site.", + "h2": "ACCEPTANCE OF THE TERMS OF USE AND CONDITIONS", + "p2": "NightSpire is a non-profit project developed with the purpose of simulating outdated versions of the server for educational purposes only. The Services offered by NightSpire do not support nor will they provide any kind of modification for the server or its files; that said, by using this site or any service belonging to or derived from the Administration, the user accepts responsibility for following and complying with the server's end-user license agreement (EULA).", + "p3": "NightSpire does not provide nor take responsibility for the distribution of any server client or external source that contains it. The client download links offered by this site or any medium under its responsibility will always point to said external sources, which, as of this date, do not belong to nor have any relationship with this administration. NightSpire is therefore, and under no circumstances, responsible for any aspect regarding said source, namely: quality, performance, warranties or any other characteristic determinant to its purpose, whether or not it is one.", + "p4": "By accessing, browsing or using this Internet site, hereinafter (the “Site”), owned by the NightSpire administration, hereinafter (the “Administration”), the user acknowledges having read and understood these terms and conditions of use, hereinafter (“Terms and Conditions”) and agrees to abide by them and comply with all applicable rules, laws and regulations that form part of the legislation in force in their place of residence, or to which they are otherwise subject. In addition, when the user uses any service supplied or referenced on the Site (provided it resides under the responsibility or ownership of the Administration), they will be subject to the rules, guides, policies, terms and conditions applicable to said services.", + "p5": "This Site is controlled and developed by the Administration, reachable through its Discord platforms.", + "p6": "The Administration is not responsible for the material on this Site being appropriate or available for use in other places, its access being prohibited from territories where its content is illegal. Those who choose to access this Site from other places do so on their own initiative, and it is their responsibility to comply with the applicable local laws.", + "p7": "These Terms and Conditions are subject to change at discretion, without prior notice and at any time, under the sole will of NightSpire, and starting from the date of publication of their modification on this Site, all operations carried out between the Administration and the user shall be governed by the modified document.", + "h3": "OUR SERVICE: USE, DISTRIBUTION AND DISCLAIMER OF LIABILITY", + "p8": "In accordance with the legislation to which the Administration is subject, the material contained on this Site or any other that may be under its responsibility or care, hereinafter (the “Services” or the “Service”), including without limitation, every image, links, logo, design, insignia, brand, photograph, sound, text, message, tool, software, technology, product, file, information, data, demonstration, sample, promotional material, audiovisual work or multimedia work, and any other element or form of expression (collectively and hereinafter, (the \"Materials\"), are supplied to the best of our knowledge and understanding; however, it is not possible to rule out errors of content or of the material, which is why the Administration assumes no responsibility for the quality, veracity or accuracy of the published information nor for the omissions, errors or discrepancies that may be found in the published information or service provided. ", + "p9": "Regarding the information published in the Services, the Administration confers no warranties of any kind, express or implied, excluding, but not limited to:", + "p10": "- Warranties of merchantability or fitness for a particular purpose.", + "p11": "- Uninterrupted stability of the Service.", + "p12": "- Existence of errors or viruses, as well as its security.", + "p13": "- Accuracy, reliability, qualification or certification for its download.", + "p14": "The Administration is not responsible for the use the user makes of the contents included in the Services, nor for the decisions they make regarding them. The information regarding the products and services of NightSpire, included in its Services, is provided for non-commercial educational purposes and does not constitute an offer of sale to its users.", + "p15": "NightSpire reserves the right, at its discretion, to:", + "p16": "- Correct any error, omission or inaccuracy in the data provided.", + "p17": "- Change or update, discontinue or delete the information contained in the Services at any time and without prior notice.", + "p18": "- As well as disclaim liability regarding the timeliness, lack of storage, inaccuracy or incorrect delivery of any information or data that it \"normally\" provides, whether temporarily or permanently.", + "h4": "RESPONSIBILITIES AND OBLIGATIONS OF REGISTRATION AND PASSWORDS", + "p19": "The enjoyment of the main fundamental and objective functions of the Service will always be determined by and subject to the existence of a personal and non-transferable registration (namely, a user account). The Administration urges you to provide truthful and verifiable information as requested. Beyond an intrusive nature, said information would be used strictly and discreetly in order to make possible in the future a resolution by the Administration of any extraordinary situation that may arise due to the user's carelessness, thus attempting to settle it in the least harmful way possible for the user. ", + "p20": "It belongs completely and strictly to, and falls upon, the user the responsibility of keeping confidential and secure the passwords established for the Service. As well as the actions taken through the use of their registration, whether or not these are authorized by the user. It also remains the user's responsibility to immediately notify the Administration if they notice any suspicious activity, unauthorized use or unrecognized registration in which their own account appears as the object of manipulation or breach.", + "p21": "The exchange, trade, buying and selling and any similar activity of any form and under any concept in which the knowledge by any person other than the user of their access credentials to the Service appears and is involved is strictly prohibited. Violating said prohibitions could cause the user to incur a serious offense, which could be sanctioned with penalties of a magnitude determined by the Administration at its judgment and discretion, from which in no case would they be exempt from said penalty by claiming use by third parties and in general under no justification.", + "p22": "The characters of the realm that have been deleted and have reached the maximum time limit (on-hold) for recovery, established by the Administration, will disappear permanently, forfeiting with them the possibility of restoration or assistance by the Administration in these cases, independently of and completely disregarding the user's will regarding such action at that time.", + "h5": "CHEATING", + "p23": "Cheating is understood as any act outside and inside the server that attempts to alter or in fact alters and interferes with the rules or with the normal behavior of the server. As well as attempting to or in fact gaining an advantage over other players. Among these, by way of example only and without any limiting intent, any of the following behaviors, whether in one's own name or on behalf of third parties, will be considered as such:", + "p24": "- Accessing the Services in an unauthorized manner (including the use of modified or malicious software).", + "p25": "- Using several accounts at once on the same realm in a way in which controlling several characters simultaneously on the same realm represents a disadvantage of any kind for other users with respect to the offender.", + "p26": "- Using any technique or software to alter or manipulate the variables preset by the server and the Administration.", + "p27": "Cheating is strictly prohibited and the Administration reserves the right to deny any user access to the Service, provided that they have incurred or been the object of an offense of this type, whether directly or indirectly.", + "h6": "PURCHASES, CLAIMS, REFUNDS AND WARRANTIES", + "p28": "NightSpire does not represent nor constitute a remittance entity nor a financial services entity of any kind and consequently has no control or responsibility whatsoever over the origin of the funds used to make purchases toward its community. Nor is it responsible for the risks that the user takes on their own will when carrying out financial operations of any type.", + "p29": "Purchases: will always be considered of voluntary good faith and in no case an obligation of any kind for any user. Note also that purchases by natural persons under 18 years of age, or in any case those persons who have not yet reached, under the relevant local legal entities that apply to them, their legal age of majority, are strictly prohibited.", + "p30": "The Service: in any case, does not require any kind of purchase for full and complete use and enjoyment. That said, the user will have an official communication channel via email consultas@nightspire.gg in order to notify the Administration of any error made by either party, in order to issue and make effective a fair resolution.", + "p31": "The Administration: guarantees and commits to providing the buyer with all the information they may require about the current forms or methods of purchase for the community. As well as clarifying any doubt that may arise about the established steps or processes of the same, provided that said information resides within the limits that concern the buyer and has a purely informational purpose.", + "p32": "Taking the above into account, the buyer has monetary and service refund guarantees, subject to the aspects and conditions set out below.", + "h7": "Monetary:", + "p33": "Taking into account the nature of any monetary transaction toward the community's coffers, the Administration commits to refunding (free of transaction costs, at its consideration), in full or in part, ultimately agreed jointly between both parties, those purchases where the user, unintentionally, ended up under the inconvenience, when carrying it out, of errors on their part in the amount of the total sum to be transferred. Said error being in all cases truthful and of a verifiable nature at the Administration's consideration.", + "p34": "Taking into account that the acquired services are received immediately and do not constitute, determine, agree upon nor modify any deadline for their use. Nor for the enjoyment of the service and its functionalities, which, it should be stressed, are considered completely free, of an educational nature and lack admission and expiration deadlines.", + "p35": "The Administration does not guarantee nor will it provide in any case nor under any concept or circumstance any refund on purchases or any goods in general transferred to the community. Note and let the following cases be clarified:", + "p36": "- To users whose accounts have been temporarily or permanently sanctioned for incurring any offense set out in any of its Terms and Conditions.", + "p37": "- To users who have made the decision not to continue (partially or temporarily) using any of the services provided by The Administration.", + "p38": "In none of these cases will the Administration present, in full or in part, any trace of any of its monetary records or of any kind for resolution purposes.", + "p39": "Likewise, the user has the respective means and channels, namely within the Service's forums, or the Discord server, to submit a formal appeal before an administrator and thus have the case evaluated for subsequent resolution. The Administration reserves the right to evaluate but not guarantee, and at its discretion, refunds in those cases where, after being studied and reconciled, it is considered by the same to be fair and extraordinary.", + "h8": "Service-related:", + "p40": "The Administration guarantees the integrity and functionality of all the items purchased in its store. In any case, it will provide you a term of 48 hours after your purchase to request replacements for items or services of equal value, or also, upon request, the full return of the services used in those cases where said item or service is found broken or unusable, or was purchased or chosen by mistake, all of this always and after a relevant analysis has been carried out by an administrator, and after authentic and conclusive evidence relevant to the case has been demonstrated by the user.", + "p41": "As well as the Administration guaranteeing the restoration of the service due to technical and specific problems, between the Service and the payment platforms, always beyond the buyer's control, if said services were not delivered automatically and immediately in their name. ", + "h9": "PRIVACY POLICY", + "p42": "The Service and the Administration collect information regarding the user such as email address, name, password, language and time zone, in order to provide better optimization of their services each time, using this information to adapt the functionalities to better performance in line with the user and their requirements. Said information may also be used to keep the user informed through independent communication channels not related to the Service, informing about important news, updates, technical problems or any other information of such nature that the Administration considers relevant to the user's interests. ", + "p43": "The Administration and the Service commit to safeguarding the confidentiality of such data, as well as to guaranteeing the NON-disclosure of it, except in cases where the laws in force governing the Administration consider it necessary and mandatory for reasons not related to NightSpire. " + }, + "refund": { + "title": "Refund Policy", + "h1": "OUR SERVICE", + "p1": "All of our services are delivered immediately and are received exactly as described.", + "h2": "OUR RESPONSIBILITY", + "p2": "We guarantee the functioning, delivery time and description of the services provided by our site.", + "p3": "It is important that the user understands that what they acquire on the site are services that are received immediately.", + "p4": "They do not acquire any usage time of the services, nor any benefit, nor immunity.", + "p5": "Every case covered by our refund policy will be handled with the reset or correction of the service and a subsequent review guaranteeing the correct functioning of the reset or corrected service.", + "h3": "NOTIFICATION TIME", + "p6": "Any error or problem with our services must be notified to the administration within a maximum period of 48 hours from the delivery of the service.", + "p7": "After this period of time, the user can no longer request any type of refund.", + "p8": "Contact: consultas@nightspire.gg.", + "h4": "COVERAGE", + "p9": "This refund policy covers:", + "p10": "- Acquisition of the wrong service due to a poor selection by the user.", + "p11": "- Errors caused by the website that prevented the delivery of the service.", + "p12": "- Errors caused by third-party platforms that prevented the delivery of the service.", + "p13": "This refund policy does NOT cover, under any circumstances:", + "p14": "- Regrets.", + "p15": "- Errors in the use of the service made by the user.", + "p16": "- Ignorance of our refund policy.", + "p17": "- Improper use of third-party platforms in order to violate our refund policy.", + "p18": "- Expulsion from our site for breach of our terms and rules.", + "h5": "Refund request made through the payment platform.", + "p19": "Requesting a refund for reasons covered by this refund policy will result in a refund on our part with the corresponding cancellation of the acquired service.", + "p20": "Requesting a refund for reasons not covered by this refund policy such as:", + "p21": "- The account has been sanctioned.", + "p22": "- The person no longer uses the service and tries to request a refund after 48 hours from the moment of acquisition.", + "p23": "- Abuse of available tools claiming reasons that are untrue regarding the delivered service.", + "p24": "Do not qualify for a refund and may lead to permanent expulsion from the site for breach of our terms and improper use of the available payment platforms.", + "h6": "Regrets", + "p25": "No type of regret after the delivery of a service qualifies for a refund.", + "h7": "Errors in the use of the service made by the user", + "p26": "Errors in the use of the services, caused by the user, that are not related to any type of failure in the delivered service do not qualify for a refund.", + "p27": "Any user error caused by not reading the description of a service does not qualify for a refund.", + "p28": "Once the service is delivered, its use remains the user's responsibility.", + "h8": "Ignorance of our refund policy", + "p29": "The user's ignorance of our refund policy does not exempt the user from complying with it.", + "h9": "Improper use of third-party platforms in order to violate our refund policy", + "p30": "This type of action will result in the expulsion of the user from our site without any refund.", + "h10": "Expulsion from our site for breach of our terms and rules", + "p31": "No acquisition of our services grants any type of immunity.", + "p32": "The expulsion of a user from our site does not qualify for any type of refund.", + "p33": "Compliance with our terms and rules remains the exclusive responsibility of the user, and any expulsion resulting from breach of them does not qualify to request a refund of the services already delivered and enjoyed.", + "h11": "Changes to this Refund Policy", + "p34": "We reserve the right to update this Refund Policy at any time. We recommend that you periodically review this page to be aware of any changes.", + "h12": "Contact us", + "p35": "If you have any questions or concerns about this Refund Policy, you can contact us through the following contact information:", + "updated": "Update date: 25-05-2023" + }, + "legalNotice": { + "title": "Legal Notice", + "p1": "The website \"NightSpire.com\" and its subdomains (hereinafter, \"the website\") are offered solely for informational and entertainment purposes. NightSpire is not responsible for the use that users make of the website. Although correct use is intended, NightSpire assumes no responsibility for the actions, decisions or consequences derived from the use of the website. Users are responsible for verifying the accuracy, completeness and usefulness of the information provided, as well as for complying with applicable laws and regulations when using the content of the website.", + "p2": "Third-party links: The website may contain links to third-party websites. These links are provided solely for your convenience and do not imply the endorsement or affiliation of NightSpire with said websites. NightSpire is not responsible for the content or privacy practices of these third-party websites.", + "p3": "Privacy and Cookies: The collection and use of your personal data is governed by our Privacy Policy and the use of cookies is governed by our Cookie Declaration. By using the website, you accept our practices described in said policies.", + "p4": "Copyright: Users of the website must respect copyright and not publish content that infringes the intellectual property rights of third parties. NightSpire is committed to protecting copyright and complying with applicable laws. If you find infringing content, contact us using the infringement claim mechanism described below.", + "p5": "Infringement claim mechanism: If you believe that your work has been used in an unauthorized manner on the website, you can submit a copyright infringement claim by providing the required information. Contact us using the contact details below.", + "contactTitle": "Contact" + }, + "contact": { + "title": "Contact us", + "p1": "Thank you for your interest in contacting us!", + "p2": "If you have any questions, inquiries or comments, we will be happy to help you. Please send an email to the following address:", + "p3": "NightSpire is the service these terms refer to.", + "p4": "We strive to respond to all messages within 48 business hours.", + "p5": "Be sure to include the relevant information in your email so that we can provide you with an accurate and timely response.", + "p6": "At NightSpire, we value your comments and opinions. Your satisfaction is our priority and we strive to provide you with the best possible experience at NightSpire.", + "p7": "We look forward to hearing from you soon!", + "p8": "Sincerely, the NightSpire team." + } + }, + "Misc": { + "home": { + "recruitFriend": "RECRUIT A FRIEND!", + "labelTime": "Time", + "introP1": "{realm} is a community focused on Spanish-speaking users, especially aimed at the Spanish and Latin American audience.", + "introP2": "We attract users passionate about both PvE and PvP, and we offer a wide variety of content.", + "introP3": "Our main goal is to maintain a high-level community, providing a pleasant environment so that all members, new and veteran alike, find here a place where they can experience unforgettable moments.", + "introP4": "Join us and enjoy a unique experience with thousands of users!", + "newsHeading": "NEWS", + "noNews": "No news available at this time.", + "newsLinkLabel": "Link:", + "here": "here", + "showingLatest": "* Showing the latest 50 news items" + }, + "realm": { + "charactersHeading": "Characters", + "realmHeading": "Realm" + }, + "creators": { + "pageTitle": "Content creators", + "empty": "No information available at this time.", + "contentType": "Content type", + "media": "Media" + }, + "expiredLink": { + "pageTitle": "Expired Link", + "message": "Sorry, the link you used has expired or is not valid.", + "requestNew": "Request a new email change" + }, + "maintenance": { + "pageTitle": "Maintenance", + "line1": "Our website is currently under maintenance to improve our users experience.", + "line2": "We appreciate your patience and understanding.", + "discord": "To stay informed about the maintenance status and get real-time updates, join our Discord server." + }, + "downloadAddons": { + "title": "Addon download", + "recommended": "Recommended addons", + "intro1": "Addons are optional plugins that enhance and personalize your gaming experience.", + "intro2": "Download the ones you want from their official page (choose the version compatible with WotLK 3.4.3).", + "howToInstall": "How to install them", + "step1": "1) Download the addon and unzip the .zip file.", + "step2": "2) Copy the resulting folder into Interface/AddOns (in your client folder).", + "step3": "3) Start the game and, on the character selection screen, click AddOns to enable them.", + "download": "Download", + "descDbm": "Warnings and timers for boss abilities in dungeons and raids.", + "descDetails": "Damage, healing and threat meter with detailed graphs.", + "descAtlasLoot": "Check the loot of dungeon and raid bosses inside the game.", + "descQuestie": "Shows quest objectives and locations on the map and minimap.", + "descBagnon": "Unifies all your bags and the bank into a single searchable window.", + "descBartender4": "Fully customize your action bars.", + "descAuctioneer": "Advanced tools for the auction house.", + "descPawn": "Compares gear and tells you which item is an upgrade for your character." + }, + "twofaLogin": { + "pageTitle": "Two-step verification", + "info": "Information", + "backToAccount": "Return to my account", + "back": "Return", + "previewAlt": "Authenticator preview", + "p1": "2FA stands for \"Two Factor Authentication\", or two-step verification.", + "p2": "It is a method that adds an extra layer of security to the login process.", + "p3": "Instead of simply entering your username and password, 2FA requires a second verification step, thus increasing the protection of your account.", + "p4": "Once enabled, after entering your username and password, a window (image on the right) will appear asking for the authentication code generated by the app.", + "backupCodes": "Backup codes", + "p5": "When you enable 2FA, you will be provided with unique backup codes.", + "p6": "These codes are useful in case you lose access to your authentication app.", + "p7": "Each backup code can be used only once.", + "p8": "Keep them in a safe place, as they will allow you to access your account on the website if you cannot use the authentication app.", + "requestToken": "If you don't have a Security Token yet, you can request it here.", + "note": "NOTE", + "noteText": "Use an authentication app to log in to the game once you have it enabled." + }, + "help": { + "title": "Help", + "subtitle": "Assistance guide", + "intro1": "In this guide you will learn what steps to follow to get the right assistance depending on the type of problem you have found on our server.", + "intro2": "We offer a set of common problems, which means to use for each case and an explanation of each means of contact.", + "intro3": "The different means for each problem are listed from the most ideal to the last resort.", + "clientTitle": "With the client", + "clientText": "Problems that prevent the client from launching, connecting to the server, or errors that cause the client to crash abruptly.", + "mediaAre": "The means are:", + "mediaForos": "- Forums", + "mediaDiscord": "- Discord", + "mediaTicket": "- Ticket", + "serverErrorsTitle": "With server errors", + "serverErrorsText": "Problems related to errors that must be fixed by our repair team to improve the server.", + "characterTitle": "With the character", + "characterText": "Problems related to errors that may affect the character, abilities, spells, quests, etc.", + "otherPlayerTitle": "With another player", + "otherPlayerText1": "Problems related to other users breaking the server rules.", + "otherPlayerText2": "These types of problems require a report with the corresponding evidence of what happened.", + "accountBlocksTitle": "With account blocks", + "accountBlocksText": "Problems related to account blocks issued by the {realm} team.", + "websiteTitle": "With the website", + "websiteText": "Problems related to errors, bugs or suggestions regarding this website.", + "mailTo": "- Email to", + "pdTitle": "With PD", + "pdText": "Problems related to PD or PV.", + "contactMeans": "Means of contact", + "ticketTitle": "Ticket", + "ticket1": "To submit a ticket, you must click the red question mark in the lower right corner of the client interface (to the left of the character's keyring).", + "ticket2": "When you click it, a window will appear in the middle of the screen.", + "ticket3": "In that window, click the first button in the lower left corner called 'Talk to a GM'", + "ticket4": "A window will appear with informative text and, below in the middle, a button called 'Open a query'.", + "ticket5": "When you click the button, a text field will appear in which you can describe your problem", + "ticket6": "When you have finished, click the first button in the lower right corner called 'Send'.", + "ticket7": "The ticket has now been created and is pending a response from a team member.", + "discordTitle": "Discord", + "discord1": "Discord is a chat and voice communication platform that can be downloaded here.", + "discord2": "To join our server's Discord, click here.", + "discord3": "Once you are a member of our Discord, you can ask for help in the 'Assistance' channel or send a direct message to any team member requesting help.", + "forosTitle": "Forums", + "foros1": "The forums are a great tool where not only the {realm} team can help you, but other players can also assist you if they know how to solve the problem you have.", + "foros2": "To request help through this means, you must have a user with which to log in and open a new topic in the appropriate forum.", + "foros3": "You can visit our forums here.", + "emailTitle": "Email", + "email1": "The server has different email addresses dedicated to different server topics.", + "email2": "Depending on your problem, use the appropriate one to send us an email message." + }, + "changelogs": { + "title": "Changelogs", + "loadError": "The changelog could not be loaded right now." + } + }, + "Points": { + "dpoints": { + "title": "Get PD" + }, + "dpointsSuccess": { + "title": "Get PD", + "paidOk": "Payment complete! Your PD have been credited to your account.", + "alreadyPaid": "This payment had already been processed. Your PD are credited.", + "error": "We couldn't confirm your payment. If you were charged, please contact support.", + "backToAccount": "← Back to my account" + }, + "transferDp": { + "title": "Transfer PD", + "intro1": "The Transfer PD tool lets you transfer PD from your account to any other account.", + "intro2": "Using the TRANSFER PD button will transfer the amount you chose from your account to the account of the character you entered.", + "tokenHelp": "If you don't have a Security Token yet, you can request one here.", + "note": "NOTE", + "noteText": "Please make sure you have typed the correct character name, as this action cannot be reversed once done.", + "noPd": "You have no PD", + "confirm": "You are about to transfer {n} PD to the character \"{character}\".\nThis action cannot be reversed. Do you want to continue?", + "success": "You have transferred {n} PD to the character \"{character}\".", + "available": "You have {balance} PD available", + "characterPlaceholder": "Destination character name", + "amountPlaceholder": "Amount of PD", + "tokenPlaceholder": "Security token", + "transferring": "Transferring…", + "transferButton": "TRANSFER PD", + "errors": { + "missingFields": "Fill in the destination character, the amount and the security token.", + "invalidAmount": "The amount must be a whole number greater than 0.", + "invalidToken": "The security token is not valid.", + "characterNotFound": "There is no character with that name.", + "sameAccount": "You can't transfer PD to your own account.", + "insufficientFunds": "You don't have enough PD to make this transfer.", + "notAuthenticated": "Your session has expired. Please log in again.", + "generic": "The transfer could not be completed. Please try again." + } + }, + "trade": { + "title": "PD trading", + "intro1": "The PD trading tool lets you buy or sell PD for gold in a secure way.", + "intro2": "The system lets you create single-use codes worth X amount of PD in exchange for X amount of gold.", + "intro3": "Sellers have the SELL section to create the code, and buyers have the BUY section to redeem that code.", + "sellTitle": "Sell", + "sell1": "1) Decide how much the code will be worth in PD.", + "sell2": "2) Decide how much gold it can be redeemed for.", + "sell3": "3) Choose which character on the account will receive the gold when the code is redeemed.", + "sell4": "4) Fill in the details with your password and Security Token.", + "sell5": "5) Use the CREATE CODE button.", + "sell6": "6) A box will appear with the details of the created Code, including the ID to be used to send to another player.", + "buyTitle": "Buy", + "buy1": "1) Enter the ID of the code another player gave you.", + "buy2": "2) Check the PD value and gold cost with the CHECK CODE button.", + "buy3": "3) Choose which character on the account will have the gold deducted when the code is redeemed.", + "buy4": "4) Fill in the details with your password and Security Token.", + "buy5": "5) Use the REDEEM CODE button.", + "buy6": "6) A box will appear with the details of the redeemed Code, PD received and gold withdrawn from the selected character.", + "duration": "Each code lasts 1 hour.", + "onceRedeemed": "Once the code is redeemed:", + "redeemed1": "- The PD will be withdrawn from the code creator's account and sent to whoever redeemed it.", + "redeemed2": "- The gold will be withdrawn and mailed to the creator.", + "redeemed3": "- The transaction will be recorded in the PD & VP history.", + "lockNote": "The account of whoever redeems the code will be locked for 5s as a security measure if the operation is successful.", + "tokenHelp": "If you don't have a Security Token yet, you can request one here.", + "note": "NOTE", + "noteText": "Please make sure you have entered all the correct details, as this action cannot be reversed once done.", + "sellTab": "SELL", + "buyTab": "BUY", + "noCharacters": "You have no characters on this account.", + "codeCreated": "Code created!", + "sellPointsLabel": "How much will the code be worth in PD?", + "sellPointsPlaceholder": "Code value in PD", + "sellGoldLabel": "How much will the code cost in gold?", + "sellGoldPlaceholder": "Code value in gold", + "sellCharLabel": "Which character will receive the gold?", + "selectCharacter": "Select a character", + "passwordPlaceholder": "Your account password", + "tokenPlaceholder": "Security token", + "creating": "Creating…", + "createButton": "Create code", + "createdLegend": "Code created", + "codeIdLabel": "Code ID:", + "createdValue": "Value: {points} PD for {gold} gold", + "createdHint": "Send this ID to the buyer. The code expires in 1 hour.", + "buyCodeLabel": "Enter the PD code ID", + "buyCodePlaceholder": "PD code", + "checkInfo": "Worth {points} PD · Costs {gold} gold", + "buyCharLabel": "Which character will be charged the gold?", + "checkButton": "Check code", + "processing": "Processing…", + "redeemButton": "Redeem code", + "checkResult": "This code is worth {points} PD and costs {gold} gold.", + "redeemConfirm": "You are about to redeem this code. This action cannot be reversed. Do you want to continue?", + "redeemSuccess": "Redeemed successfully! You received {points} PD and {gold} gold was withdrawn from {character}.", + "errors": { + "missingFields": "Fill in all fields.", + "invalidAmount": "The amounts must be whole numbers between 1 and 99999.", + "characterInvalid": "The selected character is not valid.", + "captcha": "Verify that you are not a robot.", + "wrongPassword": "Your account password is incorrect.", + "invalidToken": "The security token is not valid.", + "insufficientPoints": "You don't have enough PD available to create this code.", + "codeNotFound": "There is no code with that ID.", + "codeUnavailable": "The code is no longer available (redeemed or expired).", + "cannotRedeemOwn": "You can't redeem your own code.", + "characterOnline": "The character must be offline to collect the gold.", + "insufficientGold": "The character doesn't have enough gold.", + "creatorInsufficient": "The code creator no longer has enough PD.", + "locked": "Wait a few seconds before redeeming another code.", + "deliveryFailed": "The gold could not be delivered (game server unavailable). Please try again later.", + "notAuthenticated": "Your session has expired. Please log in again.", + "generic": "The operation could not be completed. Please try again." + } + }, + "promo": { + "title": "Promo code", + "intro1": "Promo codes are words with letters and numbers that are redeemed in the form below for PD or VP and have limited uses. Each one may give a different amount of PD/VP.", + "intro2": "These codes are generated by the {realm} Team and may appear on the website, Discord, social media or the server.", + "intro3": "We recommend keeping an eye on social media and server announcements to know when a code is available.", + "note": "NOTE", + "noteText": "Codes are case-sensitive, so you must always type them exactly as they appear published.", + "placeholder": "Enter your promo code", + "redeeming": "Redeeming…", + "redeemButton": "REDEEM CODE", + "rewardPd": "{pd} PD", + "rewardPv": "{pv} VP", + "and": "and", + "rewardDefault": "the reward", + "success": "Code redeemed! You have received {reward}.", + "errors": { + "missingCode": "Enter a promo code.", + "notFound": "The code doesn't exist or is no longer available.", + "expired": "This code has expired.", + "exhausted": "This code has already reached its usage limit.", + "alreadyUsed": "You have already redeemed this code.", + "notAuthenticated": "Your session has expired. Please log in again.", + "generic": "The code could not be redeemed. Please try again." + } + }, + "renameGuild": { + "title": "Rename guild", + "intro1": "The Rename guild tool lets you rename a guild of which you are the Guild Master.", + "rules": "When choosing a new name, keep in mind:", + "rule1": "- The maximum length is 24 characters.", + "rule2": "- The allowed characters are A-Za-z and the space.", + "intro2": "Using the RENAME GUILD button on the guild you chose will change its name to the new name you entered.", + "intro3": "The guild name change is instant. Connected guild members may need to reconnect to finally see the new name.", + "note": "NOTE", + "noteText": "Please make sure you have chosen the correct name, as this action cannot be reversed once done.", + "requires": "Costs {pd} PD or {eur} . Choose the payment method (PD, card with Stripe or SumUp) below.", + "noGuilds": "No Guild Master characters", + "confirm": "Are you sure you want to rename the selected guild?", + "success": "Guild renamed to \"{newName}\"! Connected members may need to reconnect to see it.", + "selectGuild": "Select a guild", + "newNamePlaceholder": "New guild name", + "tokenPlaceholder": "Security token", + "renamed": "GUILD RENAMED", + "renaming": "RENAMING GUILD", + "renameButton": "RENAME GUILD", + "errors": { + "missingFields": "Complete all fields.", + "invalidName": "The name must be 1 to 24 characters, only letters (A-Z, a-z) and spaces.", + "invalidToken": "The security token is not valid.", + "notGuildMaster": "You are not the Master of that guild.", + "nameTaken": "A guild with that name already exists.", + "insufficientPoints": "You don't have enough PD (1000 required).", + "soapError": "The change could not be applied (game server unavailable). Please try again later.", + "notAuthenticated": "Your session has expired. Please log in again.", + "generic": "The guild could not be renamed. Please try again." + } + }, + "tabs": { + "info": "Information", + "backToAccount": "Back to my account", + "back": "Back", + "whatArePd": "What are PD?", + "whatArePdText": "We offer our users the opportunity to earn levels that grant them exclusive benefits within our online community. These benefits include access to special tools, exclusive content and significant improvements to their experience on our website. When making a purchase, our users receive PD, an internal unit of recognition that reflects their commitment and progress on our platform. PD let them reach new levels and unlock exclusive rewards. It is worth noting that these PD are a unique way to value and reward our users' active participation in our community.", + "availableLevels": "What levels are available?", + "show": "Show", + "hide": "Hide", + "level": "Level {n}", + "purchaseMethods": "What are the PD purchase methods?", + "purchaseMethodsText": "The currently available purchase methods are:", + "stripeMethod": "Stripe (credit/debit card, for all countries).", + "sumupMethod": "SumUp (credit/debit card).", + "howManyPd": "How many PD do you receive?", + "howManyPdText": "For every {sym}1 you receive 100 PD. The final amount is shown before confirming the payment.", + "doubts": "Do you have questions or issues with a purchase?", + "doubtsText1": "Don't make a purchase until you are completely sure you have read this information and understand the process you are going to choose.", + "doubtsText2": "If after reading this guide you still have questions, the {realm} team can assist you at any time. You can open a ticket on the server, or contact us through our Discord platform.", + "mustAccept": "You must accept the Terms and Conditions and the Refund Policy", + "confirmPurchase": "You are about to get {points} PD for {sym}{amount}.\nDo you want to continue to payment?", + "rate": "{sym}1 = 100 PD", + "minMax": "Minimum value: {sym}1 · Maximum value per transaction: {sym}200", + "important": "Important!", + "integersOnly": "Enter whole values only (no decimals).", + "example": "Example: for 200 PD type 2.", + "amountLabel": "Amount in {currency} to get", + "amountPlaceholder": "Amount in {currency}", + "willReceive": "You will receive {points} PD", + "acceptTerms": " I accept the Terms and Conditions and the Refund Policy", + "acquireButton": "GET PD", + "redirecting": "Redirecting…", + "whatIsStripe": "What is Stripe?", + "stripeAboutText": "Stripe is a secure online payment platform that processes credit and debit cards from all over the world. Your payment details are handled directly by Stripe; {realm} never stores them.

More information about Stripe here.", + "howStripe": "How to get PD through Stripe?", + "stripeHowText": "As it is a self-managed system, purchases are automatic, and within minutes of completing the payment you will receive the PD in your account.", + "step1": "- Enter the amount you wish to get in the field below.", + "stripeStep2": "- When you press GET PD, you will be redirected to Stripe's secure gateway to complete the payment with your card.", + "stripeStep3": "- Once Stripe validates your payment, you will have the PD in your account automatically.", + "reminderMin": "Remember that the amount only accepts whole numbers and the lowest possible is {sym}1.", + "wrongExamples": "Examples of incorrect value: {sym}5.90 | {sym}22.30 | {sym}53.10", + "rightExamples": "Examples of correct value: {sym}6 | {sym}22 | {sym}53", + "whatIsSumup": "What is SumUp?", + "sumupAboutText": "SumUp is a European payment platform that lets you pay quickly and securely with a credit or debit card. Your payment details are handled directly by SumUp; {realm} never stores them.

More information about SumUp here.", + "howSumup": "How to get PD through SumUp?", + "sumupHowText": "As it is a self-managed system, purchases are automatic, and after completing the payment you will receive the PD in your account.", + "sumupStep2": "- When you press GET PD, you will be redirected to SumUp's secure gateway to complete the payment with your card.", + "sumupStep3": "- Once SumUp validates your payment, you will have the PD in your account automatically.", + "checkoutErrors": { + "notConfigured": "This payment method is not available yet. Please use another method or try again later.", + "invalidAmount": "The amount must be a whole number between 1 and 200.", + "notAuthenticated": "Your session has expired. Please log in again.", + "generic": "The payment could not be started. Please try again." + }, + "rangeFrom": "From {pd} PD ({price} {sym})", + "rangeUpTo": "Up to {pd} PD ({price} {sym})", + "rangeOver": "More than {pd} PD (over {price} {sym})" + } + }, + "UI": { + "header": { + "home": "HOME", + "register": "CREATE ACCOUNT", + "downloads": "DOWNLOADS", + "client": "CLIENT", + "addons": "ADDONS", + "changelog": "CHANGELOG", + "realm": "REALM", + "players": "PLAYERS", + "community": "COMMUNITY", + "forums": "FORUMS", + "wotlkDb": "WOTLK DB", + "videos": "VIDEOS", + "help": "HELP", + "myAccount": "MY ACCOUNT", + "logout": "LOG OUT", + "login": "LOG IN", + "armory": "ARMORY" + }, + "footer": { + "terms": "Terms and Conditions", + "privacy": "Privacy Policy", + "refund": "Refund Policy", + "cookies": "Cookie Statement", + "legal": "Legal Notice", + "contact": "Contact Us", + "copyright": "© Copyright {realmName}™ {year}. All rights reserved", + "design": "Design: \"{realmName}\" By Inna Hoover Brown" + }, + "social": { + "followUs": "FOLLOW US ON" + }, + "realmInfo": { + "ratesTitle": "Rates", + "experience": "Experience", + "experienceValue": "x8 adjustable with .xp (With Recruit-A-Friend x16)", + "greenBlueDrop": "Green and blue item drop", + "greenBlueDropValue": "x4", + "goldNpc": "Gold drop from NPCs", + "goldNpcValue": "x2", + "goldQuest": "Gold drop from quests", + "goldQuestValue": "x1", + "skills": "Skills", + "skillsValue": "x3", + "professions": "Professions", + "professionsValue": "x3", + "reputations": "Reputations", + "reputationsValue": "x3 (Bonus with Recruit-A-Friend)", + "honor": "Honor", + "honorValue": "x3", + "scheduleTitle": "Schedules", + "scheduleNote": "The following schedules are based on the realm time.", + "dailyQuests": "Daily quests", + "dailyQuestsValue": "7 am", + "dailyDungeons": "Daily dungeon reset", + "dailyDungeonsValue": "9 am", + "raidReset": "Raid reset", + "raidResetValue": "9 am (Wednesday)", + "battlegrounds": "Battlegrounds", + "battlegroundsValue": "10 am", + "arenaPoints": "Arena Points distribution", + "arenaPointsValue": "11 am (Friday)" + }, + "players": { + "updateNotice": "The information on this page is updated automatically once a day", + "charsByClass": "Characters created by class", + "total": "Total:", + "alliances": "Alliance:", + "hordes": "Horde:", + "allianceAlt": "Alliance", + "hordeAlt": "Horde", + "totalChars": "Total characters:", + "allianceChars": "Alliance characters:", + "hordeChars": "Horde characters:", + "firstsTitle": "Realm Firsts - Level 80", + "noLevel80": "There are no level 80 characters registered yet.", + "thAchievement": "Achievement", + "thCharacter": "Character", + "thDate": "Date", + "firstOfRealm": "Realm first!", + "topAchTitle": "Top achievements", + "topAchSub": "The 10 players with the most achievements", + "thName": "Name", + "thRace": "Race", + "thClass": "Class", + "thAchPoints": "Achievement points", + "topHonorTitle": "Top honorable kills", + "topHonorSub": "The 10 players with the most honorable kills", + "thTotalKills": "Total kills", + "thTodayKills": "Total kills today" + }, + "recruit": { + "errRequirements": "You do not meet the requirements for this reward yet.", + "errAlreadyClaimed": "This reward has already been claimed.", + "errInvalidCharacter": "Invalid character.", + "errNotFound": "Reward not found.", + "errGeneric": "The reward could not be claimed. Please try again.", + "accountRecruited": "Recruited account:", + "yes": "Yes", + "no": "No", + "friendsRecruited": "Recruited friends:", + "friendsAtLevel80": "Friends recruited to level 80:", + "rewardsClaimed": "Rewards claimed:", + "receiveRewardsOn": "Receive rewards on:", + "thFriends": "Recruited friends", + "thReward": "Reward", + "thStatus": "Status", + "friendsAtLevel80Row": "{count, plural, one {# friend at level 80} other {# friends at level 80}}", + "claimed": "Claimed", + "claim": "Claim", + "unclaimed": "Not claimed", + "availableRewards": "AVAILABLE REWARDS", + "recruitToClaim": "Recruit friends to be able to claim the rewards", + "readyToClaim": "You have {count, plural, one {# reward ready} other {# rewards ready}} to claim" + }, + "clientDownload": { + "torrentTitle": "Torrent Download", + "infoLabel": "Information", + "info1": "- No installation required.", + "info2": "- The realmlist is already configured.", + "info3": "- The download is handled through a magnet link. If you already know how to make downloads of this type, the following steps are optional.", + "requirementsLabel": "Download requirements", + "requirementsText": "You will need a program that handles Torrent downloads and a program that handles .rar files.", + "popupNote": "Additionally, you will need this page to be able to open pop-up windows.", + "stepByStep": "Step by step:", + "stepOptional": "Optional: If you do not have Winrar, click WinRAR and install the program.", + "step1": "1) Click qBittorrent.", + "step2": "2) Download the appropriate version for your operating system.", + "step3": "3) Run the downloaded file and install the program.", + "step4": "4) Run qBitTorrent.", + "step5": "5) Go to the bottom of this page and choose your preferred language.", + "step6": "6) Below the language, choose the operating system.", + "step7": "7) Click Download.", + "step8": "8) In the pop-up window, accept Open qBitTorrent.", + "step9": "9) Wait for qBitTorrent to load the corresponding file in the Magnet link window.", + "step10": "10) Click OK.", + "step11": "11) In the qBitTorrent window, wait for the download to complete.", + "step12": "12) Go to qBitTorrent's downloads folder (Downloads by default).", + "step13": "13) Right-click the .rar file and use the Extract here option.", + "step14": "14) Go into the extracted folder and there you will find the executable to start playing.", + "step15": "15) Connect using your website account; in the email field do not enter your email but your account name.", + "languageLabel": "Language", + "chooseLanguage": "Choose language", + "clientEses": "esES Client", + "clientEsmx": "esMX Client", + "clientEnus": "enUS Client", + "clientEngb": "enGB Client", + "langEses": "esES language: Spanish (Spain).", + "langEsmx": "esMX language: Spanish (Latin America).", + "langEnus": "enUS language: English (US).", + "langEngb": "enGB language: British English.", + "osLabel": "Operating system", + "chooseOs": "Choose operating system", + "windows": "Windows", + "macCatalina": "Mac OS Catalina", + "downloadBtn": "DOWNLOAD", + "errorChoose": "You must choose a client and an operating system.", + "macGuideTitle": "Guide to run the client on mac OS Catalina", + "mac1": "macOS Catalina no longer supports applications that run in 32-bit, and the client runs in 32-bit.", + "mac2": "By following the steps below you will be able to enjoy NightSpire without problems on macOS Catalina.", + "macInstructions": "Instructions", + "macStep1": "1 - Download and install CrossOver.", + "macStep2": "2 - Once you have downloaded the client, run CrossOver and click \"Install a Windows application\".", + "macStep3": "3 - In the \"Select an application to install\" field, look for the download, select it and click continue. (Do not click install yet).", + "macStep4": "4 - Go to the tab that says \"Select installer\", click \"Choose installer file\", and now look for WoW.exe and select it.", + "macStep5": "5 - In the Bottle tab, you can select Windows 7 64-bit.", + "macStep6": "6 - Go to the \"Install and finish\" tab, click Install, and it will install all the fonts, files and Visual Redistributables that WoW uses on a standard Windows operating system.", + "macStep7": "7 - It will ask you to install and accept the FONTS, Microsoft Visual C ++, click Yes for each request that appears.", + "macStep8": "8 - The client will start automatically.", + "macStep9": "9 - Once you finish and exit the client, click \"Done\" in the CrossOver application.", + "macStep10": "10 - The next time you want to return, open the CrossOver application, look at the left panel and select the WoW that was previously created in Bottle, and click RUN COMMAND, select WoW.exe and click ¨Save command as launcher¨, then click Open.", + "macStep11": "11 - Finally, you will see the WoW icon under the WoW Bottle tab; now you can drag the WoW launcher to the Dock, so that next time you want to log in, you simply run WoW from the Dock.", + "pageTitle": "Download the client" + }, + "cookie": { + "dialogLabel": "Cookie consent", + "title": "We use cookies", + "description": "This site uses first-party and third-party cookies to ensure the site works, analyze traffic and offer you personalized advertising. Check our cookie policy for more information.", + "policyLink": "Cookie Policy", + "catNecessary": "Necessary", + "descNecessary": "Essential for the site to work. They cannot be disabled.", + "catAnalytics": "Analytics", + "descAnalytics": "They help us understand how you use the site to improve it.", + "catMarketing": "Marketing", + "descMarketing": "They are used to show you relevant ads.", + "savePrefs": "Save preferences", + "reject": "Reject", + "customize": "Customize", + "acceptAll": "Accept all", + "changeConsent": "Change consent", + "revokeConsent": "Withdraw consent", + "statusZaraz": "Current status (Cloudflare Zaraz Consent API):", + "statusSaved": "Current status (saved preference):", + "statusUnavailable": "Cloudflare Zaraz is not available on this domain; there is no saved preference yet.", + "accepted": "Accepted", + "rejected": "Rejected", + "alwaysOn": "Always on" + }, + "twofa": { + "errGeneric": "Something went wrong. Please try again later.", + "eyeHide": "Hide", + "eyeShow": "Show", + "passwordPlaceholder": "Password", + "tokenPlaceholder": "Security token", + "activating": "Activating 2FA", + "activate": "Activate 2FA", + "step1": "Step 1) Download the authenticator app:", + "step2": "Step 2) Scan this QR code with your authenticator app:", + "copyKeyNote": "If you cannot scan the QR code, copy and paste this key into your authenticator app:", + "copied": "Copied!", + "copyKey": "Copy key", + "step3": "Step 3) Enter the code generated by your authenticator app:", + "codePlaceholder": "6-digit code", + "verified": "Verified ✔️", + "verifying": "Verifying...", + "verifyCode": "Verify code", + "enabledNotice": "Two-step verification is enabled on this account.", + "disableInstruction": "To disable it, enter a current code from your authenticator app.", + "disabled": "2FA disabled ✔️", + "disabling": "Disabling...", + "disable": "Disable 2FA" + } + }, + "Pay": { + "method": "Payment method", + "pd": "PD balance", + "stripe": "Card (Stripe)", + "sumup": "Card (SumUp)", + "pdCost": "{cost} PD", + "eur": "{price} €", + "balance": "Available balance: {balance} PD", + "insufficient": "Insufficient balance ({cost} PD)", + "confirm": "Confirm the payment of {amount}?", + "errors": { + "insufficientPd": "You don't have enough PD balance for this service.", + "fulfillFailed": "The service could not be completed. Your PD balance has been refunded.", + "notConfigured": "This payment method is not available right now.", + "invalidRequest": "Invalid request.", + "genericError": "An error occurred. Please try again.", + "insufficientVp": "You don't have enough vote points for this service." + }, + "vp": "Vote points", + "vpCost": "{cost} VP", + "insufficientVp": "Insufficient balance ({cost} VP)", + "balanceVp": "VP: {balance}" + }, + "Store": { + "title": "Store", + "infoTooltip": "- Hover over an item's name to preview its tooltip.", + "infoDb": "- You can click the item names to visit them in our database. There you can view weapons, armor, mounts and pets in 3D!", + "choosePlayer": "Choose the character the items will be sent to", + "selectPlaceholder": "Select a character", + "noCharacters": "You don't have any characters on this account yet.", + "loading": "Loading the store…", + "quantity": "Quantity", + "add": "Add", + "added": "Added", + "addedCount": "Added ({n})", + "cartTitle": "Cart", + "selectedCharacter": "Selected character", + "colItem": "Item", + "colQty": "Qty", + "colValue": "Value", + "remove": "Remove item", + "empty": "Empty cart", + "send": "Send", + "sending": "Sending…", + "cartEmpty": "Your cart is empty.", + "confirm": "Send the items to {character} for {pd} PD and {vp} VP?", + "successMsg": "Items sent to {character}! Check your in-game mail.", + "errors": { + "insufficientPd": "You don't have enough PD for this purchase.", + "insufficientVp": "You don't have enough VP for this purchase.", + "deliveryFailed": "The items could not be sent (game server unavailable). Your balance has been refunded.", + "partialDelivery": "Only part of the purchase could be sent (the game server stopped responding). The items that did arrive are in your in-game mail; you have been refunded for the rest.", + "invalidCharacter": "Invalid character.", + "emptyCart": "Your cart is empty.", + "generic": "An error occurred. Please try again.", + "amountTooLow": "The minimum amount to pay by card is {min} €.", + "missingFields": "Fill in the source character, the target one and the security token.", + "invalidDestination": "The target character name is not valid.", + "invalidSource": "The source character does not belong to your account.", + "destinationNotFound": "The target character does not exist.", + "invalidToken": "The security token is not valid.", + "notAuthenticated": "Your session has expired. Please log in again to continue.", + "invalidRequest": "Invalid request." + }, + "newsTitle": "News", + "newsIntro": "List of additions made based on the community's suggestions in our forum.", + "newsDate": "November 2024", + "payMethod": "Payment method", + "payBalance": "PD/VP balance", + "payStripe": "Card (Stripe)", + "paySumUp": "Card (SumUp)", + "minCard": "Minimum {min} €", + "confirmCard": "Pay {eur} € by card and send the items to {character}?", + "amountTooLow": "The minimum amount to pay by card is {min} €.", + "gift": { + "choosePlayer": "Choose the character that will send the gift", + "destPlaceholder": "Target character name", + "confirmPlaceholder": "Confirm target character name", + "tokenPlaceholder": "Security token", + "show": "Show Gifts", + "showing": "Showing gifts", + "errMissing": "Fill in the source character, the target one and the security token.", + "errConfirm": "The target character name does not match the confirmation.", + "successMsg": "Gift sent to {character}! They will receive it in their in-game mail." + } + }, + "header": { + "armory": "Armory" + }, + "Armory": { + "title": "Armory", + "searchPlaceholder": "Search character, item or guild…", + "search": "Search", + "tabCharacters": "Characters", + "tabItems": "Items", + "tabGuilds": "Guilds", + "noResults": "No results.", + "searchHint": "Type at least 3 characters.", + "level": "Level", + "itemLevel": "Item level", + "members": "Members", + "equipment": "Equipment", + "guild": "Guild", + "race": "Race", + "class": "Class", + "faction": "Faction", + "alliance": "Alliance", + "horde": "Horde", + "online": "Online", + "offline": "Offline", + "viewProfile": "View profile", + "model3d": "3D model", + "modelLoading": "Loading model…", + "modelUnavailable": "The 3D model is not available.", + "rank": "Rank", + "leader": "Leader", + "noEquipment": "No visible equipment.", + "backToArmory": "Back to armory" + } +} diff --git a/web-next/.bak-armory/es.json b/web-next/.bak-armory/es.json new file mode 100644 index 0000000..f52b958 --- /dev/null +++ b/web-next/.bak-armory/es.json @@ -0,0 +1,2038 @@ +{ + "Metadata": { + "title": "NightSpire Server de WoW WotLK 3.4.3 Latino y Español 💎", + "description": "Descarga y juega gratis a WotLK Classic en NightSpire - Server de WoW WotLK 3.4.3 Latino y Español - El mejor server de WoW 🔥" + }, + "Nav": { + "home": "Inicio", + "login": "Iniciar sesión", + "register": "Crear cuenta", + "account": "Mi cuenta", + "logout": "Cerrar sesión", + "language": "Idioma", + "forum": "Foros", + "vote": "Votar", + "recruit": "Reclutar", + "store": "Tienda" + }, + "Home": { + "brand": "NightSpire", + "serverStatus": "Estado del servidor", + "server": "Servidor", + "onlineCharacters": "Personajes en línea", + "login": "Login", + "address": "Dirección", + "notAvailable": "No disponible", + "news": "Noticias", + "noNews": "No hay noticias disponibles en este momento.", + "link": "Enlace", + "here": "aquí", + "tagline": "El mejor servidor de WoW WotLK Classic 3.4.3 en español y latino. Únete gratis a una comunidad de miles de jugadores.", + "ctaRegister": "Crear cuenta gratis", + "ctaForum": "Ver foros" + }, + "Login": { + "title": "Conectar a NightSpire", + "alreadyLogged": "¡Ya estás conectado!", + "alreadyLoggedOther": "Si quieres conectar otra cuenta, primero desconecta.", + "email": "Correo electrónico", + "password": "Contraseña", + "submit": "Conectar", + "connecting": "Conectando…", + "success": "Conexión exitosa. Redirigiendo…", + "invalidCredentials": "Correo o contraseña incorrectos", + "notAnEmail": "Introduce tu correo electrónico, no el nombre de la cuenta.", + "missingFields": "Por favor rellene todos los campos.", + "invalidRequest": "Solicitud no válida.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "forgot": "He olvidado mi contraseña/usuario", + "newHere": "¿Nuevo en la comunidad? Puedes crear una cuenta", + "createAccount": "aquí", + "captchaFailed": "Verificación anti-bots fallida. Reintenta.", + "forgotActivation": "No me ha llegado el enlace de activación", + "publicNote": "* Si conectas desde un lugar público recuerda desconectar cuando no estés usando la página web o el foro." + }, + "Account": { + "title": "Mi cuenta", + "bnetAccount": "Cuenta (Battle.net)", + "gameAccount": "Cuenta de juego", + "logout": "Cerrar sesión", + "points": "Puntos", + "dp": "PD", + "vp": "PV", + "battlepayCredits": "Créditos Battlepay", + "securityToken": "Token de seguridad", + "requested": "Solicitado", + "notRequested": "Sin solicitar", + "characters": "Mis personajes", + "level": "Nivel", + "noCharacters": "No tienes personajes todavía.", + "servicesTitle": "Servicios de personaje", + "utilitiesTitle": "Utilidades", + "accountSettings": "Ajustes de cuenta", + "communityTitle": "Comunidad", + "svcRename": "Renombrar personaje", + "svcCustomize": "Personalizar personaje", + "svcChangeRace": "Cambiar de raza", + "svcChangeFaction": "Cambiar de facción", + "svcLevelUp": "Subir a nivel 80", + "svcGold": "Adquirir oro", + "svcTransfer": "Transferir personaje", + "svcRevive": "Revivir personaje", + "svcUnstuck": "Desbloquear personaje", + "svcToken": "Token de seguridad", + "svcChangePassword": "Cambiar contraseña", + "svcChangeEmail": "Cambiar correo", + "svcVote": "Votar por nosotros", + "svcRecruit": "Recluta a un amigo", + "svcStore": "Tienda del cliente", + "adminPanel": "Panel de administración", + "infoTitle": "Información", + "toolsTitle": "Utilidades y Herramientas", + "adminPanelDesc": "Gestiona el servidor", + "svcChangePasswordDesc": "Gestiona una nueva contraseña", + "svcChangeEmailDesc": "Gestiona un correo activo", + "svcTokenDesc": "Seguridad extra para tu cuenta", + "svcRenameDesc": "Adquiere un nombre diferente", + "svcCustomizeDesc": "Un cambio de look para renovarse", + "svcChangeRaceDesc": "Elije una nueva raza acorde a tu clase", + "svcChangeFactionDesc": "Vive nuevas aventuras en la facción opuesta", + "svcLevelUpDesc": "Para los que no quieren levear", + "svcGoldDesc": "Consigue más oro para tu personaje", + "svcTransferDesc": "Mueve tus personajes a otra cuenta", + "svcReviveDesc": "¿Nadie más te quiere revivir?", + "svcUnstuckDesc": "Para personajes atascados", + "svcVoteDesc": "Suma tu voto en páginas top", + "svcRecruitDesc": "Trae amigos y recibe grandes premios", + "svcStoreDesc": "Paga tus compras Battlepay pendientes", + "accountOptions": "OPCIONES DE CUENTA", + "characterOptions": "OPCIONES DE PERSONAJE", + "basicData": "Datos básicos", + "accountState": "Estado de la cuenta", + "regMail": "Correo de registro", + "currentMail": "Correo actual", + "joindate": "Fecha de registro", + "lastIpWeb": "Última IP (web)", + "lastIpServer": "Última IP (Servidor)", + "banned": "Cuenta baneada", + "banEnd": "Fin de la suspensión", + "recruited": "Cuenta reclutada", + "recruitedFriends": "Amigos reclutados", + "yes": "Sí", + "no": "No", + "historyOptions": "HISTORIALES", + "svcPointsHistory": "Historial de PD y PV", + "svcPointsHistoryDesc": "Revisa en qué has usado tus PD y PV", + "svcTransHistory": "Historial de transacciones", + "svcTransHistoryDesc": "Revisa los trámites que has realizado", + "svcBanHistory": "Historial de sanciones", + "svcBanHistoryDesc": "Revisa las sanciones de tu cuenta", + "svcSecurityHistory": "Historial de seguridad", + "svcSecurityHistoryDesc": "Revisa la seguridad de tu cuenta", + "svcQuest": "Rastreador de misiones", + "svcQuestDesc": "Ayuda con cadenas de misiones importantes", + "svcRestoreChar": "Recuperar personaje", + "svcRestoreCharDesc": "Restaura un personaje borrado", + "svcRestoreItems": "Recuperar ítems", + "svcRestoreItemsDesc": "Restaura objetos borrados", + "svcStoreItems": "Tienda", + "svcStoreItemsDesc": "Adquiere objetos de todo tipo", + "svcSendGift": "Enviar regalo", + "svcSendGiftDesc": "Envía regalos a tus amigos", + "svc2FA": "2FA (Verificación en 2 pasos)", + "svc2FADesc": "Gestiona la doble autenticación", + "svcTransferDP": "Tranferir PD", + "svcTransferDPDesc": "Transfiere PD a tus cuentas alternativas", + "svcTradePD": "Comercio de PD", + "svcTradePDDesc": "Compra o vende PD por oro", + "svcPromo": "Código de promoción", + "svcPromoDesc": "Canjea códigos por PD o PV", + "svcRenameGuild": "Renombrar hermandad", + "svcRenameGuildDesc": "Cambia el nombre de tu hermandad", + "svcDPoints": "Adquirir PD", + "svcDPointsDesc": "Obtiene PD y accede a recompensas", + "accountName": "Nombre de la cuenta", + "twofaLabel": "2FA (Verificación en 2 pasos)", + "twofaOff": "Desactivado", + "banHistoryLink": "Consultar historial", + "switchAccountLabel": "Cargar datos de la cuenta:", + "addAccount": "Añadir cuenta", + "addAccountPassword": "Contraseña", + "addAccountConfirm": "Añadir", + "addAccountBadPassword": "Contraseña incorrecta", + "addAccountMax": "Has alcanzado el máximo de cuentas", + "addAccountError": "No se pudo añadir la cuenta" + }, + "SelectAccount": { + "title": "Selecciona tu cuenta de juego", + "loggedInAs": "Conectado como", + "choose": "Tu cuenta Battle.net tiene varias cuentas de juego. Elige con cuál quieres continuar:", + "noAccounts": "No se han encontrado cuentas de juego asociadas a esta cuenta Battle.net.", + "entering": "Entrando…", + "error": "No se pudo seleccionar la cuenta." + }, + "Register": { + "title": "Creación de cuenta", + "alreadyLogged": "¡Ya estás conectado!", + "alreadyLoggedCreate": "Si quieres crear una cuenta, primero desconecta.", + "password": "Contraseña", + "confPassword": "Confirmar contraseña", + "email": "Correo electrónico", + "confEmail": "Confirmar correo electrónico", + "recruiter": "Reclutante (opcional)", + "submit": "Crear cuenta", + "creating": "Creando…", + "success": "La cuenta ''{email}'' ha sido creada.", + "successActivation": "Se ha enviado un enlace de activación al correo {email}.", + "missingFields": "Por favor, complete todos los campos.", + "passwordMismatch": "Las contraseñas no coinciden.", + "passwordTooLong": "La contraseña no debe exceder los 16 caracteres.", + "invalidEmail": "El correo electrónico no es válido.", + "emailExists": "Ya existe una cuenta con ese correo electrónico.", + "recruiterNotFound": "El reclutador ingresado no existe.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "captchaFailed": "Verificación anti-bots fallida. Reintenta.", + "bnetType": "Tu cuenta es de tipo Battle.net: se identifica con tu correo electrónico.", + "passwordRule": "La contraseña debe ser alfanumérica y con una longitud de hasta 16 caracteres.", + "emailRule": "El correo debe ser válido y tener acceso al mismo.", + "activation1": "Una vez que la cuenta se haya creado exitosamente, se enviará un correo con un enlace de activación.", + "activation2": "De no usar el enlace de activación, la cuenta no podrá usarse para conectar al servidor.", + "loginHint": "Al iniciar sesión, ingresa con tu CORREO electrónico.", + "recruiterOptional": "Opcional: solo si te ha reclutado un amigo.", + "notUs": "Confirmo que no estoy accediendo a este servicio desde los Estados Unidos.", + "termsRich": "Acepto los Términos y Condiciones y la Política de Privacidad.", + "showPassword": "Mostrar/ocultar contraseña", + "emailMismatch": "Los correos electrónicos no coinciden." + }, + "Activate": { + "activating": "Activando tu cuenta…", + "welcome": "¡Bienvenido a {realm}!", + "activated": "La cuenta {email} ha sido activada exitosamente.", + "canPlay": "Ya puedes conectar a la página web o empezar a disfrutar del servidor.", + "invalidLink": "El enlace de activación es inválido", + "expiredLink": "El enlace de activación ha caducado", + "emailExists": "Ya existe una cuenta con ese correo", + "needHelp": "Si necesitas ayuda para crear una cuenta, puedes contactar con el equipo de {realm}.", + "title": "Activación de cuenta" + }, + "Recover": { + "title": "Recuperar información de cuenta", + "infoTitle": "Información", + "reqTitle": "Solicitud de información", + "prompt": "Escoge la opción acorde a la información que quieres recuperar", + "type": "¿Qué quieres recuperar?", + "typePassword": "Contraseña", + "typeAccountName": "Nombre de cuenta", + "typeSecurityToken": "Token de seguridad", + "typeActivation": "Enlace de activación", + "email": "Correo electrónico", + "submit": "Solicitar", + "sending": "Solicitando datos", + "sent": "Datos enviados", + "success": "Si existe una cuenta con esos datos, te hemos enviado la información.", + "invalidEmail": "Introduce un correo electrónico válido.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "captchaFailed": "Verificación anti-bots fallida. Reintenta.", + "infoSections": [ + { + "h": "Si has olvidado la contraseña de la cuenta:", + "lines": [ + "- Selecciona la opción 'Contraseña'.", + "- Escribe Nombre de usuario.", + "- Un correo será enviado con un enlace para generar una contraseña nueva." + ] + }, + { + "h": "Si has olvidado el nombre de la cuenta:", + "lines": [ + "- Selecciona la opción 'Nombre de cuenta'.", + "- Escribe el correo electrónico.", + "- Un correo será enviado con todas las cuentas ligadas al correo." + ] + }, + { + "h": "Si has olvidado el Token de seguridad:", + "lines": [ + "- Selecciona la opción 'Token de seguridad'.", + "- Escribe el correo electrónico.", + "- Un correo será enviado con el Token de seguridad." + ] + }, + { + "h": "Si no has recibido el enlace de activación:", + "lines": [ + "- Selecciona la opción 'Enlace de activación'.", + "- Escribe el correo electrónico.", + "- Un correo será enviado con el enlace de activación." + ] + } + ] + }, + "Reset": { + "title": "Restablecer contraseña", + "password": "Nueva contraseña", + "confPassword": "Confirmar contraseña", + "submit": "Restablecer", + "saving": "Guardando…", + "success": "Contraseña restablecida. Ya puedes iniciar sesión.", + "goLogin": "Ir a iniciar sesión", + "invalidLink": "El enlace de restablecer la contraseña es inválido", + "expiredLink": "El enlace de restablecer la contraseña ha caducado", + "needHelp": "Si necesitas ayuda para crear una cuenta, puedes contactar con el equipo de {realm}.", + "passwordMismatch": "Las contraseñas no coinciden.", + "passwordTooLong": "La contraseña no debe exceder los 16 caracteres.", + "accountNotFound": "No se ha encontrado la cuenta.", + "genericError": "Algo ha salido mal. Inténtalo más tarde." + }, + "Services": { + "reviveTitle": "Revivir personaje", + "unstuckTitle": "Desbloquear personaje", + "reviveAction": "Revivir", + "unstuckAction": "Desbloquear", + "selectCharacter": "Selecciona un personaje", + "noCharactersYet": "No tienes personajes disponibles.", + "processing": "Procesando…", + "success": "Acción realizada con éxito.", + "noCharacter": "Selecciona un personaje.", + "notOfflineOrOwned": "El personaje debe estar desconectado y ser tuyo.", + "cooldown": "Solo puedes hacerlo una vez cada 12 horas.", + "soapError": "Error de comunicación con el servidor. Inténtalo más tarde.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "info": "Información", + "back": "Regresar a mi cuenta", + "backShort": "Regresar", + "choose": "Escoge el personaje:", + "unstuckInfo1": "La herramienta Desbloquear personaje te permite desbloquear un personaje que esté atascado y lo mueve a la ubicación de su Piedra Hogar.", + "unstuckInfo2": "Usa esta opción cuando tu personaje se encuentre atrapado y ninguna otra opción te sirva.", + "unstuckNote1": "Se requiere que el personaje esté desconectado.", + "unstuckNote2": "Se puede repetir la acción en un mismo personaje cada 12 horas.", + "unstuckChoose": "Escoge el personaje que quieres desbloquear", + "unstuckProcessing": "Desbloqueando", + "unstuckDone": "Desbloqueado", + "reviveChoose": "Escoge el personaje que quieres revivir", + "reviveProcessing": "Reviviendo", + "reviveDone": "Revivido", + "reviveInfo1": "La herramienta Revivir personaje te permite revivir un personaje muerto.", + "reviveInfo2": "Usa esta opción cuando tu personaje esté muerto y ninguna otra opción te sirva.", + "reviveNote1": "Se requiere que el personaje esté desconectado.", + "reviveNote2": "Se puede repetir la acción en un mismo personaje cada 12 horas." + }, + "Paid": { + "rename": { + "title": "Renombrar personaje", + "pay": "Renombrar por {price} €", + "success": "El personaje {name} ha sido marcado para renombrar (se aplica al próximo inicio de sesión)." + }, + "customize": { + "title": "Personalizar personaje", + "pay": "Personalizar por {price} €", + "success": "El personaje {name} ha sido marcado para personalización." + }, + "change-race": { + "title": "Cambiar de raza", + "pay": "Cambiar raza por {price} €", + "success": "El personaje {name} ha sido marcado para cambio de raza." + }, + "change-faction": { + "title": "Cambiar de facción", + "pay": "Cambiar facción por {price} €", + "success": "El personaje {name} ha cambiado de facción con éxito." + }, + "level-up": { + "title": "Subir a nivel 80", + "pay": "Subir a nivel 80 por {price} €", + "success": "El personaje {name} ha sido subido al nivel 80." + }, + "error": "No se pudo completar la operación. Si se te ha cobrado, contacta con soporte.", + "gold": { + "title": "Adquirir oro", + "buy": "Comprar oro", + "selectAmount": "Selecciona la cantidad", + "option": "{amount} oro — {price} €", + "success": "El oro ha sido añadido al personaje {name}.", + "send": "ENVIAR ORO" + }, + "transfer": { + "title": "Transferir personaje", + "pay": "Transferir por {price} €", + "destination": "Cuenta de destino", + "success": "El personaje {name} ha sido transferido a la cuenta de destino." + }, + "alreadyProcessed": "Tu pago se ha confirmado y la recompensa ya fue entregada.", + "send-gift": { + "title": "Enviar regalo", + "success": "El regalo ha sido enviado por correo al personaje {name}." + }, + "restore-item": { + "title": "Recuperar ítem", + "pay": "Recuperar por {price} €", + "success": "El ítem ha sido devuelto al personaje {name}." + }, + "rename-guild": { + "title": "Renombrar hermandad", + "pay": "Renombrar por {price} €", + "success": "La hermandad ha sido renombrada a \"{name}\". Puede que los miembros conectados deban reconectar para verlo." + }, + "store": { + "title": "Tienda", + "pay": "Comprar por {price} €", + "success": "¡Objetos enviados al personaje {name}! Revisa el correo dentro del juego." + } + }, + "SecurityToken": { + "title": "Token de seguridad", + "info1": "El Token de seguridad es un código de 6 dígitos (sensible a mayúsculas y minúsculas), que añade seguridad a ciertas opciones en tu panel de cuenta en la página web.", + "info2": "El mismo será solicitado para acciones importantes de la cuenta.", + "info3": "Para obtenerlo, es necesario solicitarlo haciendo click en el botón debajo.", + "info4": "Al hacer click, un mensaje será enviado al correo de la cuenta conteniendo el Token de Seguridad.", + "warning": "Es importante que conserves el Token de seguridad en un lugar seguro y no lo compartas con otros usuarios.", + "note": "Puedes solicitar un nuevo Token de seguridad una vez cada 7 días.", + "requestDateLabel": "Fecha de solicitud de Token de seguridad:", + "never": "Sin solicitar", + "request": "Solicitar token", + "requesting": "Solicitando token", + "forgot": "He olvidado el Token de seguridad", + "success": "Se ha enviado el Token de seguridad al correo de la cuenta.", + "cooldown": "Sólo puedes solicitar un nuevo Token de seguridad cada 7 días.", + "noEmail": "Añade un correo a tu cuenta antes de solicitar un token.", + "genericError": "Algo ha salido mal. Inténtalo más tarde." + }, + "ChangePassword": { + "title": "Cambiar contraseña", + "info": "La nueva contraseña debe ser alfanumérica y de hasta 16 caracteres. Necesitas un token de seguridad.", + "currentPassword": "Contraseña actual", + "newPassword": "Contraseña nueva", + "confPassword": "Confirmar contraseña nueva", + "token": "Token de seguridad", + "submit": "Cambiar contraseña", + "changing": "Cambiando…", + "success": "Contraseña cambiada. Has sido desconectado por seguridad.", + "missingFields": "Por favor, complete todos los campos.", + "passwordMismatch": "Las contraseñas no coinciden.", + "passwordTooLong": "La contraseña no debe exceder los 16 caracteres.", + "invalidToken": "El token de seguridad es incorrecto.", + "wrongCurrentPassword": "La contraseña actual es incorrecta.", + "accountNotFound": "No se ha encontrado la cuenta.", + "genericError": "Algo ha salido mal. Inténtalo más tarde." + }, + "ChangeEmail": { + "title": "Cambiar correo", + "info": "El correo actual debe escribirse tal cual, respetando mayúsculas/minúsculas. Necesitas un token de seguridad.", + "currentPassword": "Contraseña actual", + "currentEmail": "Correo actual", + "newEmail": "Nuevo correo", + "confEmail": "Confirmar nuevo correo", + "token": "Token de seguridad", + "submit": "Cambiar correo", + "sending": "Enviando…", + "success": "Se ha enviado un correo de confirmación a tu correo actual.", + "missingFields": "Por favor, complete todos los campos.", + "wrongCurrentEmail": "El correo actual no es correcto.", + "invalidEmail": "El nuevo correo no es válido.", + "invalidToken": "El token de seguridad es incorrecto.", + "wrongCurrentPassword": "La contraseña actual es incorrecta.", + "genericError": "Algo ha salido mal. Inténtalo más tarde." + }, + "ConfirmOldEmail": { + "title": "Confirmar cambio de correo", + "activating": "Confirmando…", + "success": "Correo actual confirmado. Revisa tu NUEVO correo para completar el segundo paso.", + "error": "El enlace no es válido o ya se ha usado." + }, + "ConfirmNewEmail": { + "title": "Confirmar nuevo correo", + "activating": "Aplicando el cambio…", + "success": "¡Correo cambiado con éxito! Ya puedes iniciar sesión con el nuevo correo.", + "error": "El enlace no es válido, ha caducado o no se ha encontrado la cuenta.", + "goLogin": "Ir a iniciar sesión" + }, + "Forum": { + "title": "Foros", + "noForums": "No hay foros disponibles todavía.", + "topics": "Temas", + "posts": "Mensajes", + "lastTopic": "Último tema", + "by": "por", + "views": "Visitas", + "noTopics": "No hay temas en este foro todavía.", + "locked": "Cerrado", + "sticky": "Fijado", + "backToForum": "Volver a los foros", + "backToTopics": "Volver al foro", + "notFound": "No encontrado", + "newTopic": "Nuevo tema", + "reply": "Responder", + "newTopicName": "Título del tema", + "newTopicText": "Escribe tu mensaje…", + "publish": "Publicar tema", + "publishing": "Publicando…", + "replyText": "Escribe tu respuesta…", + "sendReply": "Responder", + "sending": "Enviando…", + "loginToPost": "Inicia sesión para participar.", + "emptyError": "Completa todos los campos.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "moderation": "Moderación", + "lock": "Bloquear", + "unlock": "Desbloquear", + "pin": "Fijar", + "unpin": "No fijar", + "pinned": "Fijado", + "deleteTopic": "Borrar tema", + "confirmDeleteTopic": "¿Seguro que quieres borrar este tema?", + "edit": "Editar", + "delete": "Borrar", + "save": "Guardar", + "cancel": "Cancelar", + "confirmDeletePost": "¿Seguro que quieres borrar este mensaje?", + "tooShort": "El mensaje es demasiado corto (mínimo 5 caracteres).", + "topicLocked": "El tema está bloqueado.", + "editedMark": "editado", + "search": "Buscar", + "searchPlaceholder": "Buscar en el foro…", + "searchHint": "Escribe al menos 2 caracteres para buscar.", + "noResults": "No hay resultados para «{query}».", + "resultsCount": "{count} resultado(s) para «{query}».", + "in": "en", + "replyOnLastPage": "Ir a la última página para responder", + "moveTopic": "Mover a", + "restore": "Restaurar", + "restoreTopic": "Restaurar tema", + "deletedMark": "Borrado", + "memberSince": "Miembro desde", + "recentTopics": "Temas recientes", + "roleAdmin": "Administrador", + "roleGm": "GM", + "topic": "tema", + "createdBy": "Creado por", + "deleted": "Borrado", + "createTopic": "Crear tema", + "topicTitle": "Título del tema", + "postTopic": "Publicar tema", + "errTitle": "El título debe tener entre 3 y 45 caracteres.", + "post": "Publicar", + "staff": "Staff", + "member": "Miembro", + "editPost": "Editar mensaje", + "undelete": "Restaurar" + }, + "Admin": { + "title": "Panel de administración", + "dashboard": "Panel", + "news": "Noticias", + "manageNews": "Gestionar noticias", + "newsTitle": "Título", + "newsContent": "Contenido (HTML)", + "newsLink": "Enlace (opcional)", + "create": "Crear noticia", + "creating": "Creando…", + "delete": "Borrar", + "confirmDelete": "¿Borrar esta noticia?", + "noNews": "No hay noticias.", + "forbidden": "No tienes permiso para acceder aquí.", + "emptyError": "Completa el título y el contenido.", + "genericError": "Algo ha salido mal.", + "managePrices": "Gestionar precios", + "prices": "Precios de servicios", + "price": "Precio (€)", + "save": "Guardar", + "saved": "Guardado", + "svc_rename": "Renombrar personaje", + "svc_customize": "Personalizar", + "svc_change-race": "Cambiar raza", + "svc_change-faction": "Cambiar facción", + "svc_level-up": "Subir a nivel 80", + "svc_transfer": "Transferir personaje", + "manageVotes": "Gestionar sitios de voto", + "votes": "Sitios de voto", + "voteName": "Nombre", + "voteUrl": "URL", + "voteImage": "URL de la imagen", + "votePoints": "PV por voto", + "noVotes": "No hay sitios de voto.", + "manageGold": "Gestionar opciones de oro", + "gold": "Opciones de oro", + "goldAmount": "Cantidad de oro", + "goldPrice": "Precio (€)", + "goldUnit": "oro", + "noGold": "No hay opciones de oro.", + "manageUsers": "Gestionar usuarios", + "users": "Usuarios", + "searching": "Buscando…", + "userSearchPlaceholder": "Buscar cuenta por usuario o email…", + "noUsers": "No hay cuentas que coincidan.", + "online": "En línea", + "banned": "Baneado", + "lastLogin": "Último acceso", + "ban": "Banear", + "unban": "Desbanear", + "banReasonPrompt": "Motivo del baneo:", + "banDaysPrompt": "Días de baneo (0 = permanente):", + "confirmUnban": "¿Desbanear a {name}?", + "manageRecruit": "Gestionar recompensas de reclutamiento", + "recruit": "Recompensas de reclutamiento", + "requiredFriends": "Amigos requeridos", + "rewardName": "Nombre de la recompensa", + "itemId": "ID del objeto", + "itemQuantity": "Cantidad", + "itemLink": "Enlace del objeto", + "iconClass": "Clase del icono", + "noRewards": "No hay recompensas.", + "requiredFriendsShort": "{n} amigo(s)", + "manageForum": "Gestionar foros", + "newCategory": "Nueva categoría", + "categoryName": "Nombre de la categoría", + "order": "Orden", + "noCategories": "No hay categorías.", + "noForums": "Sin foros en esta categoría.", + "forumName": "Nombre del foro", + "forumDescription": "Descripción", + "addForum": "Añadir foro", + "hidden": "oculto", + "show": "Mostrar", + "hide": "Ocultar", + "categoryNotEmpty": "La categoría tiene foros; bórralos primero.", + "backToPanel": "← Volver al panel", + "managePromo": "Gestionar códigos de promoción", + "promo": "Códigos de promoción", + "createPromo": "Crear código", + "promoCode": "Código", + "promoPd": "PD", + "promoPv": "PV", + "promoMaxUses": "Usos máx.", + "promoExpires": "Caduca (opcional)", + "promoActive": "Activo", + "promoUses": "Usos", + "promoRedemptions": "Canjes", + "noPromo": "No hay códigos de promoción.", + "promoDuplicate": "Ya existe un código con ese texto.", + "promoEmptyError": "Escribe el código y al menos PD o PV (con usos máx. ≥ 1).", + "forum": "Foros", + "search": "Buscar", + "promoConfirmDelete": "¿Borrar este código de promoción?", + "newsTitleEn": "Título (inglés, opcional)", + "newsContentEn": "Contenido (inglés, opcional)", + "edit": "Editar", + "saving": "Guardando…", + "cancel": "Cancelar", + "newsEnHint": "Deja el inglés vacío para usar el español en la web en inglés.", + "categoryNameEn": "Nombre (inglés, opcional)", + "forumNameEn": "Nombre del foro (inglés, opcional)", + "forumDescriptionEn": "Descripción (inglés, opcional)", + "forumEnHint": "Deja el inglés vacío para usar el español en la web en inglés.", + "forumType": "Tipo", + "forumTypeNormal": "Normal", + "forumTypeClass": "Clase", + "forumTypeFlag": "Idioma (bandera)", + "forumIcon": "Icono (nombre o ruta)", + "forumColor": "Color del título (#hex)", + "forumNotEmpty": "No se puede borrar un foro con temas." + }, + "Vote": { + "title": "Votar por nosotros", + "info": "Vota por {server} en las siguientes páginas y recibe PV. Puedes votar en cada sitio cada 12 horas.", + "sitesTitle": "Sitios de votación", + "noteLabel": "Nota:", + "note": "algunos sitios pueden demorar unos minutos en acreditar el voto.", + "refresh": "Refrescar", + "vote": "Votar", + "voting": "Votando", + "voted": "Votado", + "pv": "PV", + "lastVote": "Último voto: {date}", + "neverVoted": "Aún no has votado aquí.", + "success": "¡Gracias por votar en {site}! Se han acreditado {points} PV.", + "cooldown": "Debes esperar {hours}h {minutes}m para volver a votar en este sitio.", + "siteNotFound": "Sitio de votación no encontrado.", + "genericError": "Algo ha salido mal. Inténtalo más tarde.", + "noSites": "No hay sitios de votación configurados todavía.", + "loginToVote": "Inicia sesión para votar.", + "infoSections": [ + { + "h": "¿Qué son las votaciones?", + "lines": [ + "Una votación es la acción de darle un voto al servidor en una página web que ofrezca listas de tops.", + "Como recompensa a realizar una votación por {server}, se otorgan PV." + ] + }, + { + "h": "¿Qué son los PV?", + "lines": [ + "Brindamos a nuestros usuarios la oportunidad de obtener niveles con beneficios exclusivos en nuestra comunidad en línea. Estos beneficios incluyen acceso a herramientas especiales, contenido exclusivo y mejoras significativas en la experiencia de nuestro sitio web. Al realizar una votación, los usuarios reciben PV, una unidad de reconocimiento interna que refleja su compromiso y progreso en nuestra plataforma. Los PV permiten alcanzar nuevos niveles y desbloquear recompensas exclusivas. Destacamos que los PV son una forma única de valorar y premiar la participación activa de nuestros usuarios en la comunidad." + ] + }, + { + "h": "¿Cómo se puede votar?", + "lines": [ + "Para votar por {server}, se debe hacer click en los botones que aparecen debajo, y cada uno de ellos redirigirá a la página web del top correspondiente.", + "Una vez allí, deberás darle un voto al servidor y así recibirás tus PV." + ] + }, + { + "h": "¿Cuántos PV se reciben por cada voto?", + "lines": [ + "En la lista inferior, cada sitio indica cuántos PV otorgará si se realiza una votación exitosa." + ] + }, + { + "h": "¿Cada cuánto se puede votar?", + "lines": [ + "Sólo se puede votar por cada sitio cada 12 horas.", + "El recuadro informa sobre la última vez que has votado en cada sitio." + ] + }, + { + "h": "¿Por qué el voto no cuenta en la web?", + "lines": [ + "Usamos el sistema de postback por lo que cada sitio web de votos nos envía una respuesta cada vez que un usuario vota por nuestro servidor.", + "Una vez que la respuesta es analizada en nuestra web, se sumarán los PV correspondientes siempre que el usuario haya votado correctamente.", + "Cada sitio de votación tiene, además, sus propias restricciones como sólo permitir un voto por IP por lo cual puede suceder que el voto no cuente si se usan varias cuentas para votar en el mismo día." + ] + }, + { + "h": "¿Tienes dudas o problemas para votar?", + "lines": [ + "Si a pesar de leer este instructivo aún tienes dudas, el equipo de {server} podrá asesorarte en cualquier momento. Puedes colocar un ticket solicitando ayuda para votar." + ] + } + ] + }, + "Common": { + "prev": "Anterior", + "next": "Siguiente", + "page": "Página", + "note": "NOTA" + }, + "RecruitClaim": { + "title": "Recluta a un amigo", + "intro": "Invita a tus amigos: cuando alcancen el nivel 80, reclama recompensas.", + "loginToClaim": "Inicia sesión para reclamar recompensas", + "level80Friends": "Amigos reclutados a nivel 80", + "deliverTo": "Entregar a", + "noCharacters": "No tienes personajes.", + "noRewards": "No hay recompensas disponibles.", + "requires": "Requiere {n} amigo(s)", + "claimed": "Reclamada", + "claiming": "Reclamando…", + "claim": "Reclamar", + "locked": "Bloqueada", + "notEnoughFriends": "No tienes suficientes amigos a nivel 80.", + "notAuthenticated": "Debes iniciar sesión.", + "invalidRequest": "Solicitud no válida.", + "selectRewardAndCharacter": "Selecciona una recompensa y un personaje.", + "rewardNotFound": "Recompensa no encontrada.", + "invalidCharacter": "Ese personaje no es tuyo.", + "alreadyClaimed": "Ya has reclamado esta recompensa.", + "requirementsNotMet": "No cumples los requisitos (o los amigos comparten tu IP).", + "deliveryError": "Error al entregar la recompensa.", + "claimSuccess": "Recompensa «{reward}» entregada a {character}." + }, + "Editor": { + "bold": "Negrita", + "italic": "Cursiva", + "underline": "Subrayado", + "strike": "Tachado", + "link": "Enlace", + "quote": "Cita", + "list": "Lista", + "code": "Código", + "linkPrompt": "URL del enlace:", + "linkText": "texto del enlace", + "quoteText": "cita", + "listItem": "elemento" + }, + "Battlepay": { + "title": "Tienda (Battlepay)", + "intro": "Paga aquí tus compras pendientes de la tienda del juego. Se entregan en el juego automáticamente.", + "noOrders": "No tienes compras pendientes.", + "reference": "Referencia", + "pay": "Pagar", + "redirecting": "Redirigiendo…", + "paidOk": "¡Pago confirmado! Tu compra se entregará en el juego.", + "alreadyPaid": "Esta compra ya estaba pagada.", + "backToStore": "Volver a la tienda", + "orderNotFound": "Orden no encontrada o ya procesada.", + "genericError": "Ha ocurrido un error. Inténtalo de nuevo." + }, + "NotFound": { + "title": "Página no encontrada", + "message": "Parece que la página que estás buscando no existe o no se encuentra disponible." + }, + "CharService": { + "transfer": { + "pageTitle": "Transferir personaje", + "intro": "La herramienta Transferir personaje te permite mover un personaje a otra cuenta.", + "dkHeading": "Para personajes Caballeros de la Muerte:", + "dkCond1": "- La cuenta destino debe tener aunque sea un personaje con nivel 55 o superior.", + "dkCond2": "- La cuenta destino no puede tener un personaje Caballero de la Muerte.", + "securityLock": "Tu cuenta será bloqueada por 5s como medida de seguridad si el trámite es exitoso.", + "buttonExplain": "Al usar el botón TRANSFERIR PERSONAJE del personaje que hayas escogido, se transferirá desde tu cuenta a la cuenta que hayas indicado.", + "afterTransfer": "Cuando ingreses a la lista de personajes de la cuenta destino, verás al personaje transferido.", + "securityTokenHint": "Si aún no tienes Token de seguridad, puedes solicitarlo aquí.", + "twoFaHint": "Si aún no tienes 2FA, puedes solicitarlo aquí.", + "noteOffline": "Se requiere que el personaje esté desconectado.", + "noteIrreversible": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "noCharacters": "No tienes personajes disponibles.", + "selectPlaceholder": "Selecciona un personaje", + "destinationPlaceholder": "Cuenta de destino", + "passwordPlaceholder": "Contraseña de tu cuenta", + "tokenPlaceholder": "Token de seguridad", + "submit": "TRANSFERIR PERSONAJE", + "submitting": "Transfiriendo personaje", + "confirm": "¿Estás seguro de transferir el personaje \"{character}\" a la cuenta {destination} por {price} € (SumUp)?", + "errorGeneric": "No se pudo iniciar la transferencia. Inténtalo de nuevo.", + "errorUnexpected": "Algo ha salido mal. Inténtalo más tarde." + }, + "sendGift": { + "pageTitle": "Enviar regalo", + "intro": "La herramienta Enviar regalo te permite enviar regalos a tus amigos.", + "explain1": "Al elegir desde qué personaje se enviará el regalo y el personaje que lo recibirá, podrás ver la lista de objetos disponibles para enviar como regalo.", + "explain2": "Los objetos disponibles son los mismos de la tienda y puedes enviar varios objetos a la vez.", + "explain3": "Al usar el botón ENVIAR REGALO se enviará un correo al personaje destino con los ítems seleccionados, indicando quién lo ha regalado.", + "securityTokenHint": "Si aún no tienes Token de seguridad, puedes solicitarlo aquí.", + "noteIrreversible": "Por favor, asegúrate de haber escrito el nombre del personaje correcto ya que esta acción no es reversible una vez realizada.", + "noCharacters": "No tienes personajes disponibles.", + "noItems": "No hay objetos disponibles para regalar por ahora.", + "errMissingFields": "Completa el personaje de origen, el de destino y el token de seguridad.", + "errEmptyCart": "Añade al menos un objeto al carrito.", + "confirm": "¿Enviar el regalo a \"{destination}\" por {total} {currency} (SumUp)? Esta acción no es reversible.", + "errPayment": "No se pudo iniciar el pago. Inténtalo de nuevo.", + "errUnexpected": "Algo ha salido mal. Inténtalo más tarde.", + "sourcePrompt": "Escoge desde qué personaje se envía el regalo:", + "sourcePlaceholder": "Personaje de origen", + "destPrompt": "Nombre del personaje que recibirá el regalo:", + "destPlaceholder": "Personaje de destino", + "tokenPrompt": "Token de seguridad:", + "tokenPlaceholder": "Token de seguridad", + "availableItems": "Objetos disponibles", + "add": "Añadir", + "back": "Atrás", + "next": "Siguiente", + "cart": "Carrito", + "cartEmpty": "Aún no has añadido objetos.", + "total": "Total: {total} {currency} (SumUp)", + "submit": "ENVIAR REGALO", + "submitting": "Enviando regalo" + }, + "quest": { + "pageTitle": "Rastreador de misiones", + "intro": "La herramienta Rastreador de misiones te permite ver el estado de misiones o cadenas de misiones importantes en tus personajes.", + "optionsAvailable": "Opciones disponibles:", + "className": { + "warlock": "Brujo", + "hunter": "Cazador", + "shaman": "Chamán", + "druid": "Druida", + "warrior": "Guerrero", + "paladin": "Paladín" + }, + "fromLevel": "a partir del nivel {level}", + "byReputation": "Por reputación", + "hodir": "Los Hijos de Hodir: Cadena de misiones principal hasta interactuar con el intendente Lillehoff", + "bySpecific": "Por misión específica", + "fromLevel10": "A partir del nivel 10", + "howToSearch": "Cómo buscar por misión específica:", + "step1": "1) Visita nuestra base de datos.", + "step2": "2) Busca allí el nombre de la misión.", + "step3": "3) Una vez que la hayas encontrado, su enlace se verá cómo \"{url}/?quest=12843\"", + "step4": "4) Usa el número final del enlace en el campo ID de misión (Ejemplo del enlace anterior: 12843).", + "searchButtonExplain": "Al usar el botón BUSCAR MISIONES, podrás ver el estado de las misiones del personaje.", + "noteOffline": "Se requiere que el personaje esté desconectado y cumpla con el mínimo de nivel de cada opción.", + "noteChain1h": "Se puede repetir búsqueda de cadenas de misiones en un mismo personaje cada 1 hora.", + "noteClass30": "Se puede repetir búsqueda de cadenas de misiones de clase en un mismo personaje cada 30 minutos.", + "noteSpecific10": "Se puede repetir búsqueda de misión específica en un mismo personaje cada 10 minutos.", + "specificLabel": "Por misión específica", + "selectPlaceholder": "Selecciona un personaje", + "selectOption": "Selecciona una opción", + "questIdPlaceholder": "ID de misión", + "submit": "BUSCAR MISIONES", + "submitting": "Buscando misiones", + "noCharacters": "No hay personajes disponibles para esta herramienta", + "stateCompleted": "Completada", + "stateInProgress": "En curso", + "stateNotStarted": "Sin empezar", + "questNumber": "Misión #{quest}", + "errors": { + "missingFields": "Selecciona un personaje y una opción.", + "characterNotOwned": "El personaje seleccionado no es válido.", + "characterOnline": "El personaje debe estar desconectado.", + "wrongClass": "Esa opción no corresponde a la clase del personaje.", + "levelTooLow": "El personaje no cumple el nivel mínimo de esa opción.", + "invalidQuestId": "Introduce un ID de misión válido.", + "noData": "Esa opción no está disponible todavía.", + "cooldown": "Debes esperar {minutes} min para repetir esta búsqueda en este personaje.", + "captcha": "Verifica que no eres un robot.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "default": "No se pudo completar la búsqueda. Inténtalo de nuevo." + } + }, + "restoreChar": { + "pageTitle": "Recuperar personaje", + "intro": "La herramienta Recuperar personaje te permite restaurar un personaje que haya sido borrado.", + "conditions": "Sólo disponible para personajes que cumplan las siguientes dos condiciones:", + "cond1": "- Nivel superior a 60.", + "cond2": "- Borrado en un período menor a 30 días.", + "dkHeading": "Para personajes Caballeros de la Muerte:", + "dkCond": "- No es posible recuperar un personaje Caballero de la Muerte si ya hay otro activo en la cuenta.", + "afterRestore": "Cuando ingreses a la lista de personajes de tu cuenta, verás al personaje recuperado.", + "noteConditions": "Personajes borrados que no cumplan dichas condiciones ya no son recuperables.", + "noteCooldown": "Se puede repetir la acción en un mismo personaje cada 12 horas.", + "noCharacters": "No hay personajes", + "selectPlaceholder": "Selecciona un personaje", + "optionLabel": "{name} (nivel {level})", + "restored": "RECUPERADO", + "recovering": "Recuperando", + "recover": "RECUPERAR", + "successMsg": "¡Personaje \"{name}\" recuperado! Lo verás al entrar al reino.", + "errors": { + "notFound": "Ese personaje borrado no es de tu cuenta.", + "notDeleted": "Ese personaje no está borrado.", + "levelTooLow": "Solo se pueden recuperar personajes de nivel superior a 60.", + "tooOld": "El personaje se borró hace más de 30 días y ya no es recuperable.", + "dkExists": "No puedes recuperar un Caballero de la Muerte: ya tienes uno activo en la cuenta.", + "nameTaken": "El nombre original ya está en uso por otro personaje.", + "cooldown": "Solo puedes intentar recuperar el mismo personaje una vez cada 12 horas.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "default": "No se pudo recuperar el personaje. Inténtalo de nuevo." + } + }, + "restoreItems": { + "pageTitle": "Recuperar ítems", + "intro": "La herramienta Recuperar ítems te permite recuperar ítems que hayan sido borrados.", + "conditions": "Sólo disponible para ítems que cumplan las siguientes condiciones:", + "quality": "- De calidad: Raro | Épico | Legendaria | Artefacto | Reliquia.", + "condEquip": "- Equipable.", + "condBound": "- Se liga al recogerlo.", + "condDeleted": "- Borrado en un período menor a 7 días.", + "noteConditions": "Ítems borrados que no cumplan dichas condiciones ya no son recuperables.", + "noteCooldown": "Se pueden consultar ítems borrados en un mismo personaje cada 8 horas.", + "requires": "Cada ítem requiere {price} (SumUp)", + "selectPlaceholder": "Selecciona un personaje", + "search": "BUSCAR ÍTEMS", + "searching": "Buscando", + "deletedItemsOf": "Ítems borrados de {character}", + "noDeletedItems": "No hay ítems borrados recuperables.", + "noDeletedItemsMsg": "Este personaje no tiene ítems borrados recuperables.", + "restoreItem": "Recuperar ({price} €)", + "confirm": "¿Recuperar \"{name}\" por {price} € (SumUp)?", + "queryOther": "Consultar otro personaje", + "errors": { + "characterNotOwned": "El personaje seleccionado no es válido.", + "cooldown": "Solo puedes consultar los ítems de este personaje cada 8 horas (faltan {minutes} min).", + "soapError": "No se pudo conectar con el servidor de juego. Inténtalo más tarde.", + "insufficientPoints": "No tienes suficientes PD (se requieren 100 por ítem).", + "captcha": "Verifica que no eres un robot.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "default": "Algo ha salido mal. Inténtalo de nuevo." + } + } + }, + "CharServiceB": { + "changeFaction": { + "intro": "La herramienta Cambiar facción del personaje te permite cambiar de la Alianza a la Horda y viceversa.", + "alsoRename": "Si también deseas cambiar el nombre del personaje, debes usar la herramienta Renombrar personaje.", + "onChange": "Al hacer un cambio de Facción:", + "change1": "- Los items, hechizos, títulos, reputaciones, monturas y logros se cambiarán a la nueva facción", + "change2": "- Las misiones activas en el Registro de misiones serán abandonadas", + "change3": "- Los teams de arena serán borrados", + "change4": "- Los amigos en la Lista de amigos se borrarán", + "restrictionsTitle": "Restricciones del personaje:", + "restriction1": "- No debe tener subastas activas", + "restriction2": "- No debe tener correos en el buzón", + "restriction3": "- No debe ser capitán de un team de arenas", + "restriction4": "- No debe ser miembro de una hermandad", + "restriction5": "- No debe tener demasiado oro", + "tableLevel": "Nivel", + "tableMaxGold": "Max. Oro", + "instructions": "Al usar el botón CAMBIAR FACCIÓN del personaje que hayas escogido, se enviará una petición de cambio de facción de dicho personaje.", + "iconInfo": "Cuando ingreses a la lista de personajes de tu cuenta, verás un ícono a la izquierda de tu personaje escogido.", + "iconClick": "Al darle click a dicho ícono ingresarás al menú de edición de personaje que te permitirá pasar a la facción contraria.", + "noteLegend": "NOTA", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "payLabel": "CAMBIAR FACCIÓN", + "confirm": "¿Estás seguro de cambiar de facción al personaje seleccionado por {price} € (SumUp)?", + "title": "Cambiar facción del personaje" + }, + "changeRace": { + "warning": "ESTE CAMBIO NO PERMITE CAMBIAR A LA FACCIÓN CONTRARIA", + "intro": "La herramienta Cambiar raza del personaje te permite cambiar la raza del personaje entre otras de la MISMA facción.", + "alsoRename": "Si también deseas cambiar el nombre del personaje, debes usar la herramienta Renombrar personaje.", + "instructions": "Al usar el botón CAMBIAR RAZA del personaje que hayas escogido, se enviará una petición de cambio de raza de dicho personaje.", + "iconInfo": "Cuando ingreses a la lista de personajes de tu cuenta, verás un ícono a la izquierda de tu personaje escogido.", + "iconClick": "Al darle click a dicho ícono ingresarás al menú de edición de personaje que te permitirá escoger entre las razas de la misma facción.", + "noteLegend": "NOTA", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "payLabel": "CAMBIAR RAZA", + "confirm": "¿Estás seguro de cambiar de raza al personaje seleccionado por {price} € (SumUp)?", + "title": "Cambiar raza del personaje" + }, + "customize": { + "intro": "La herramienta Personalizar personaje te permite cambiar los siguientes aspectos un personaje:", + "aspect1": "- Color de la piel", + "aspect2": "- Rostro", + "aspect3": "- Pelo", + "aspect4": "- Sexo", + "aspect5": "- Características correspondientes a cada raza como cuernos, pendientes, marcas, vello facial", + "alsoRename": "Si también deseas cambiar el nombre del personaje, debes usar la herramienta Renombrar personaje.", + "instructions": "Al usar el botón PERSONALIZAR del personaje que hayas escogido, se enviará una petición de personalización de dicho personaje.", + "iconInfo": "Cuando ingreses a la lista de personajes de tu cuenta, verás un ícono a la izquierda de tu personaje escogido.", + "iconClick": "Al darle click a dicho ícono ingresarás al menú de edición de personaje que te permitirá escoger diferentes características.", + "noteLegend": "NOTA", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "payLabel": "PERSONALIZAR", + "confirm": "¿Estás seguro de personalizar al personaje seleccionado por {price} € (SumUp)?", + "title": "Personalizar personaje" + }, + "levelUp": { + "intro": "La herramienta Subir a nivel 80 te permite subir cualquier personaje al nivel 80.", + "onlyLevel": "Sólo subirá de nivel al personaje. Esta opción no incluye ítems/oro/etc.", + "instructions": "Al usar el botón SUBIR A NIVEL 80 del personaje que hayas escogido, se enviará el nivel 80 al personaje.", + "levelInfo": "Cuando ingreses a la lista de personajes de tu cuenta, verás que tu personaje escogido ya es nivel 80.", + "noteLegend": "NOTA", + "noteOffline": "Se requiere que el personaje esté desconectado.", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "payLabel": "SUBIR A NIVEL 80", + "confirm": "¿Estás seguro de subir a nivel 80 al personaje seleccionado por {price} € (SumUp)?", + "title": "Subir a nivel 80" + }, + "gold": { + "intro": "La herramienta Adquirir oro te permite enviar oro a un personaje.", + "instructions": "Al usar el botón ENVIAR ORO del personaje que hayas escogido, se enviará un correo con la cantidad de oro elegida al personaje.", + "mailInfo": "Cuando entres al reino con dicho personaje, tendrás el mensaje con la cantidad de oro seleccionada en tu buzón.", + "noteLegend": "NOTA", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requiresLabel": "Requiere", + "title": "Adquirir oro" + }, + "rename": { + "intro": "La herramienta Renombrar personaje te permite cambiar de nombre a un personaje.", + "instructions": "Al usar el botón RENOMBRAR del personaje que hayas escogido, se enviará una petición de cambio de nombre de dicho personaje.", + "newNameInfo": "Cuando intentes entrar al reino con ese personaje, te pedirá que escojas un nuevo nombre.", + "noteLegend": "NOTA", + "noteConfirm": "Por favor, asegúrate de haber escogido al personaje correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Requiere {price} (SumUp)", + "payLabel": "RENOMBRAR", + "confirm": "¿Estás seguro de renombrar al personaje seleccionado por {price} € (SumUp)?", + "title": "Renombrar personaje" + } + }, + "History": { + "points": { + "pageTitle": "Historial de PD y PV", + "intro1": "Aquí verás los consumos de PD y PV más recientes que ha tenido la cuenta.", + "intro2": "Con esta información podrás tener control de todo lo que has adquirido así como también chequear que toda la actividad sea normal.", + "intro3": "Si observas algún movimiento sospechoso, puedes contactar con el equipo de NightSpire.", + "boxTitle": "Historial de PD y PV", + "currentBalance": "Saldo actual:", + "noMovements": "No hay movimientos", + "thDate": "Fecha", + "thConcept": "Concepto", + "thMethod": "Método", + "thAmount": "Importe", + "thStatus": "Estado", + "concept": { + "pd": "{n} PD", + "vote": "Voto en {detail}", + "promo": "Código {detail}", + "rename": "Renombrar personaje: {detail}", + "customize": "Personalizar personaje: {detail}", + "changeRace": "Cambiar raza: {detail}", + "changeFaction": "Cambiar facción: {detail}", + "levelUp": "Subir a nivel 80: {detail}", + "gold": "Adquirir oro: {detail}", + "transfer": "Transferir personaje: {detail}", + "restoreItem": "Recuperar ítem: {detail}", + "sendGift": "Regalo para {detail}" + }, + "method": { + "vote": "Voto", + "promo": "Promoción" + }, + "status": { + "delivered": "Entregado", + "pending": "Pendiente", + "credited": "Acreditado" + } + }, + "trans": { + "pageTitle": "Historial de transacciones", + "intro1": "Aquí verás la información que recibimos de nuestras diferentes plataformas de pago automáticas.", + "intro2": "¿Has tenido algún problema con alguna transacción?", + "intro3": "Si has tenido un problema con una de las transacciones o no has recibido tus PD, puedes contactarnos en nuestro Discord o a través del correo consultas@nightspire.gg.", + "noteStripe": "Los pagos con tarjeta se aprueban normalmente en unos segundos.", + "noteSumup": "SumUp puede tardar unos minutos en confirmar el pago tras completar el checkout.", + "paidNote": "Recibirás los PD correspondientes a cada transacción sólo cuando esté aprobada y el estado sea PAID (Pagado).", + "important": "Importante:", + "noMovements": "No hay movimientos", + "thTxId": "ID de transacción", + "thStatus": "Estado", + "thConcept": "Concepto", + "thCreatedAt": "Fecha creación", + "thAmount": "Cantidad" + }, + "ban": { + "pageTitle": "Historial de sanciones", + "intro1": "Aquí podrás ver todas las sanciones que ha tenido la cuenta.", + "intro2": "Si tienes una sanción vigente, verás que su estado indica Activo.", + "intro3": "Para evitar que tu cuenta sea sancionada, recuerda respetar las normas de nuestro servidor.", + "important": "Importante:", + "autoBlock1": "Si tu cuenta aparece como sancionada o cerrada al intentar ingresar al reino, pero tu historial no tiene ninguna sanción activa, significa que has tenido un bloqueo automático temporal por demasiados intentos de inicio de sesión fallidos.", + "autoBlock2": "Espera al menos 10 minutos para volver a intentar y asegúrate de usar nombre de cuenta y contraseña correctas.", + "claim": "Para realizar un reclamo de sanción, por favor ingresa en nuestro foro y visita la sección Reclamaciones.", + "bansTitle": "Historial de baneos", + "noBans": "No hay baneos", + "mutesTitle": "Historial de muteos", + "noMutes": "No hay muteos", + "thScope": "Alcance", + "thReason": "Motivo", + "thBy": "Sancionado por", + "thDate": "Fecha", + "thExpires": "Expira", + "thStatus": "Estado", + "permanent": "Permanente", + "scope": { + "account": "Cuenta", + "battlenet": "Battle.net", + "character": "Personaje: {name}" + }, + "status": { + "active": "Activo", + "activePermanent": "Activo (permanente)", + "expired": "Expirado" + } + }, + "security": { + "pageTitle": "Historial de seguridad", + "intro1": "Aquí verás información de actividad y conexiones de tu cuenta.", + "intro2": "Cada tabla tiene una explicación detallada de la información provista.", + "intro3": "Si desconoces algún tipo de actividad te recomendamos cambiar la contraseña de tu cuenta y del correo ligado a la misma.", + "activityTitle": "Historial de actividad", + "activityDesc": "Muestra actividad de seguridad de la cuenta, como por ejemplo cambios de contraseña.", + "realmTitle": "Historial de conexiones (Reino)", + "realmDesc": "Muestra un historial de conexiones al reino sólo cuando la IP ha cambiado. No es un historial de cada conexión.", + "webTitle": "Historial de conexiones (Web)", + "webDesc": "Muestra un historial de cada conexión al sitio web.", + "noActivity": "No hay actividad", + "noConnections": "No hay conexiones", + "thUser": "Usuario", + "thAction": "Acción", + "thStatus": "Estado", + "thDate": "Fecha", + "action": { + "tokenRequested": "Token de seguridad solicitado" + }, + "webStatus": { + "success": "Conexión exitosa", + "wrongPassword": "Contraseña incorrecta" + } + } + }, + "Legal": { + "cookies": { + "title": "Declaración de Cookies", + "p1": "Esta página web usa cookies. Las cookies de este sitio web se usan para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar el tráfico. Además, compartimos información sobre el uso que haga del sitio web con nuestros partners de redes sociales, publicidad y análisis web, quienes pueden combinarla con otra información que les haya proporcionado o que hayan recopilado a partir del uso que haya hecho de sus servicios.", + "p2": "Las cookies son pequeños archivos de texto que las páginas web pueden utilizar para hacer más eficiente la experiencia del usuario.", + "p3": "La ley afirma que podemos almacenar cookies en tu dispositivo si son estrictamente necesarias para el funcionamiento de esta página. Para todos los demás tipos de cookies necesitamos tu permiso.", + "p4": "Esta página utiliza tipos diferentes de cookies. Algunas cookies son colocadas por servicios de terceros que aparecen en nuestras páginas.", + "p5": "En cualquier momento puedes cambiar o retirar tu consentimiento desde esta Declaración de cookies en nuestro sitio web.", + "p6": "Obten más información sobre quiénes somos, cómo puedes contactarnos y cómo procesamos los datos personales en nuestra Política de Privacidad.", + "h1cat": "Tipos de cookies que utilizamos", + "necessaryTitle": "Cookies Necesarias", + "necessaryDesc": "Las cookies necesarias ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no puede funcionar adecuadamente sin estas cookies.", + "thCookie": "Cookie", + "thProvider": "Proveedor", + "thPurpose": "Propósito", + "thDuration": "Duración", + "thContentType": "Tipo de contenido", + "thMoreInfo": "Más información", + "durSession": "Sesión", + "dur1Year": "1 año", + "nPurpose1": "Recuerda el idioma que has elegido (español o inglés).", + "nPurpose2": "Guarda tus preferencias de cookies para no volver a preguntarte.", + "nPurpose3": "Mantiene tu sesión iniciada. Va cifrada y el navegador no puede leerla desde JavaScript.", + "cfNote": "Nuestro servidor no está detrás de un proxy de Cloudflare, así que este sitio no coloca cookies de Cloudflare. La única excepción es el widget Turnstile de los formularios, que se carga desde el dominio de Cloudflare y se rige por su propia política.", + "embeddedTitle": "Cookies de Contenido Embebido", + "embeddedDesc": "Algunas páginas cargan contenido o recursos de terceros. Estos servicios pueden recibir tu dirección IP y, en el caso de los vídeos, colocar sus propias cookies en sus dominios (nunca en el nuestro).", + "embType1": "Verificación anti-bots en los formularios (registro, acceso, recuperación). No coloca cookies en nuestro dominio.", + "embType2": "Iconos e información de objetos del juego.", + "embType3": "Librerías de la web (tipografías e iconos).", + "embType4": "Vídeos incrustados en la sección de Creadores de contenido.", + "privacyPolicyLink": "Política de Privacidad", + "embeddedNote": "Los vídeos de YouTube se incrustan solo si un creador de contenido tiene uno configurado. Estos terceros se rigen por sus propias políticas de privacidad.", + "h2cat": "Cómo eliminar cookies de tu navegador", + "deleteP": "Además de utilizar nuestro panel de configuración, puedes eliminar las cookies directamente desde tu navegador:", + "deleteLi1": "Chrome: Configuración → Privacidad y seguridad → Cookies y otros datos de sitios", + "deleteLi2": "Firefox: Opciones → Privacidad & Seguridad → Cookies y datos del sitio", + "deleteLi3": "Safari: Preferencias → Privacidad → Gestionar datos de sitios web", + "deleteLi4": "Edge: Configuración → Cookies y permisos del sitio → Cookies", + "h3cat": "Tu estado de consentimiento", + "consentP": "Puedes cambiar o retirar tu consentimiento en cualquier momento. Al contactarnos respecto a su consentimiento, por favor, indique la fecha de su consentimiento.", + "h4cat": "Más información", + "moreInfoP": "Si tienes alguna pregunta sobre nuestra política de cookies, puedes contactarnos a través de nuestra página de Contacto.", + "updated": "Última actualización: Marzo 2026", + "noneTitle": "Cookies que NO utilizamos", + "noneDesc": "Este sitio no usa cookies de analítica, de marketing ni de publicidad. No hay Google Analytics, ni píxeles de redes sociales, ni rastreo entre sitios. Tampoco usamos cookies de preferencias más allá del idioma." + }, + "privacy": { + "title": "Política de privacidad", + "p1": "Esta Política de Privacidad describe cómo recopilamos, utilizamos, almacenamos y protegemos la información personal de los usuarios (\"usted\" o \"usuario\") de nuestro sitio web. Al utilizar nuestro sitio web, usted acepta las prácticas descritas en esta política.", + "h1": "Recopilación de Información Personal", + "p2": "Recopilamos la siguiente información personal cuando usted utiliza nuestro sitio web:", + "p3": "1. Cookies: Utilizamos cookies para recopilar información sobre su actividad en nuestro sitio web. Las cookies son pequeños archivos de texto que se almacenan en su dispositivo y nos permiten reconocer su navegador o dispositivo y recordar cierta información. Estas cookies pueden ser cookies de sesión o cookies persistentes. Puede ajustar la configuración de su navegador para rechazar todas las cookies o para indicar cuándo se envía una cookie. Sin embargo, si desactiva las cookies, es posible que algunas funciones de nuestro sitio web no funcionen correctamente.", + "p4": "2. Direcciones IP: Recopilamos direcciones IP de los usuarios que visitan nuestro sitio web. Las direcciones IP se utilizan para analizar tendencias, administrar el sitio web, rastrear el movimiento del usuario y recopilar información demográfica. No vinculamos las direcciones IP con ninguna información de identificación personal.", + "p5": "3. Direcciones de correo electrónico: Recopilamos las direcciones de correo electrónico que usted proporciona al registrarse en nuestro sitio web o al actualizar su información de registro. Utilizamos estas direcciones de correo electrónico para enviarle información relacionada con su cuenta, como confirmaciones de registro, notificaciones de cambios en los términos o políticas, y actualizaciones de seguridad.", + "p6": "4. Nombres de usuario y contraseñas: Recopilamos los nombres de usuario y las contraseñas que usted elige al registrar una cuenta en nuestro sitio web. Estas credenciales se utilizan para autenticar su acceso a su cuenta y para proteger su información personal.", + "h2": "Uso de la Información Personal", + "p7": "Utilizamos la información personal que recopilamos para los siguientes fines:", + "p8": "1. Brindar y mejorar nuestros servicios: Utilizamos su información personal para brindarle los servicios solicitados y mejorar su experiencia en nuestro sitio web. Esto incluye personalizar el contenido y las recomendaciones, proporcionar soporte técnico, y analizar el rendimiento y la eficacia de nuestro sitio web.", + "p9": "2. Comunicaciones: Podemos utilizar su dirección de correo electrónico para enviarle comunicaciones relacionadas con su cuenta, como confirmaciones de registro, notificaciones de cambios en los términos o políticas, actualizaciones de seguridad y otras actualizaciones importantes.", + "h3": "Protección de la Información Personal", + "p10": "Tomamos medidas razonables para proteger la información personal que recopilamos y almacenamos. Utilizamos medidas de seguridad técnicas, administrativas y físicas para proteger su información contra el acceso no autorizado, la divulgación, la alteración o la destrucción.", + "h4": "Divulgación de la Información Personal a Terceros", + "p11": "No vendemos, intercambiamos ni transferimos su información personal a terceros sin su consentimiento, excepto en los siguientes casos:", + "p12": "- Proveedores de servicios: Podemos compartir su información personal con proveedores de servicios que realizan funciones en nuestro nombre, como el alojamiento del sitio web, el procesamiento de pagos y el análisis de datos. Estos proveedores de servicios tienen acceso a su información personal solo en la medida necesaria para realizar sus funciones y están obligados a no divulgar ni utilizar la información con ningún otro fin.", + "p13": "- Cumplimiento legal: Podemos divulgar su información personal si creemos de buena fe que dicha divulgación es necesaria para cumplir con una obligación legal, proteger sus derechos o seguridad, investigar fraudes o responder a una solicitud legal.", + "h5": "Sus Derechos y Opciones", + "p14": "Usted tiene ciertos derechos y opciones con respecto a su información personal:", + "p15": "- Acceso y actualización: Usted puede acceder y actualizar cierta información personal proporcionada a través de su cuenta en nuestro sitio web.", + "p16": "- Eliminación de datos: Usted puede solicitar la eliminación de su información personal de nuestros registros, sujeto a cualquier requisito legal o contractual que podamos tener.", + "p17": "- Cookies: Puede ajustar la configuración de su navegador para rechazar cookies o para indicar cuándo se envía una cookie. Sin embargo, tenga en cuenta que deshabilitar las cookies puede afectar el funcionamiento de nuestro sitio web.", + "h6": "Uso incorrecto de plataformas de terceros con el fin de violar nuestra política de devolución", + "p18": "Este tipo de acciones conllevará a la expulsión del usuario de nuestro sitio sin ningún tipo de devolución.", + "h7": "Cambios a esta Política de Privacidad", + "p19": "Nos reservamos el derecho de actualizar esta Política de Privacidad en cualquier momento. Le recomendamos que revise periódicamente esta página para conocer los cambios. La fecha de entrada en vigencia de la política se indicará en la parte superior de la página.", + "h8": "Contáctanos", + "p20": "Si tiene alguna pregunta o inquietud sobre esta Política de Privacidad, puede contactarnos a través de la siguiente información de contacto:", + "updated": "Fecha de actualización: 23-05-2023" + }, + "terms": { + "title": "Términos y condiciones", + "h1": "IMPORTANTE", + "p1": "Por favor, tómese un momento para leer los términos y condiciones detallados debajo. Si está de acuerdo con ellos, entonces podrá ingresar en nuestro sitio.", + "h2": "ACEPTACIÓN DE LOS TÉRMINOS DE USO Y CONDICIONES", + "p2": "NightSpire es un proyecto sin ánimo de lucro desarrollado con la finalidad de simular versiones desactualizadas del servidor con fines únicamente educativos. Los Servicios ofrecidos por NightSpire no apoyan ni proveerán modificación de ningún tipo para con el servidor o sus ficheros, dicho esto, el usuario al hacer uso de este sitio o cualquier servicio perteneciente o derivado de la Administración, acepta hacerse responsable de seguir y cumplir con el contrato de licencia para usuarios finales (EULA) del servidor.", + "p3": "NightSpire no provee ni se responsabiliza por la distribución de ningún cliente del servidor o fuente externa que lo contenga. Los enlaces de descarga para el cliente ofrecidos por este sitio o cualquier medio bajo su responsabilidad, apuntarán siempre a dichas fuentes externas, las cuales, a la fecha no pertenecen ni poseen relación alguna con esta administración. No haciéndose NightSpire de esta manera, y bajo ningún concepto, responsable sobre aspecto alguno sobre dicha fuente, dígase: calidad, rendimiento, garantías o cualquiera fuese o no, característica determinante a su fin.", + "p4": "Al acceder, navegar o usar este sitio de Internet y en adelante (el “Sitio”), propiedad de la administración NightSpire en adelante (la “Administración”), el usuario admite haber leído y entendido los presentes términos y condiciones de uso, en adelante (“Términos y Condiciones”) y está de acuerdo en acatar los mismos y cumplir con todas las normas, leyes y reglamentos aplicables que hagan parte de la legislación vigente en su lugar de residencia, o a las que se sujete indistintamente. Además, cuando el usuario utilice cualquier servicio suministrado o referenciado en el Sitio, (siempre y cuando éste resida bajo responsabilidad o propiedad de la Administración) estará sujeto a las reglas, guías, políticas, términos y condiciones aplicables a dichos servicios.", + "p5": "Este Sitio es controlado y desarrollado por la Administración, localizable a través de sus plataformas de Discord.", + "p6": "La Administración no es responsable de que el material en este Sitio sea apropiado o esté disponible para su uso en otros lugares, estando prohibido su acceso desde territorios donde su contenido sea ilegal. Aquellos que decidan acceder a este Sitio desde otros lugares lo harán bajo su propia iniciativa, y es su responsabilidad el sujetarse a las leyes locales que sean aplicables.", + "p7": "Estos Términos y Condiciones están sujetos a cambios a discreción, sin previo aviso y en cualquier momento, bajo la sola voluntad de NightSpire, y partiendo de la fecha de publicación de la modificación de los mismos en este Sitio, todas las operaciones celebradas entre la Administración y el usuario se regirán por el documento modificado.", + "h3": "NUESTRO SERVICIO: USO, DISTRIBUCIÓN Y DESCARGO DE RESPONSABILIDADES", + "p8": "De conformidad con las legislaciones bajo las cuales la Administración se acate, el material contenido en este Sitio o cualquier otro que se encontrase bajo su responsabilidad o tutela y en adelante, (los “Servicios” o el “Servicio”), incluyendo sin limitación, toda imagen, links, logotipo, diseño, insignia, marca, fotografía, sonido, texto, mensaje, herramienta, software, tecnología, producto, archivo, información, dato, demostración, muestra, material promocional, obra audiovisual u obra multimedia, y cualquiera sea otro elemento o forma de expresión (de forma colectiva y en adelante, (los \"Materiales\"), son suministrados según nuestro leal saber y entender, sin embargo, no es posible descartar errores de contenido o del material, razón por la cual la Administración no asume responsabilidad por la calidad, veracidad o exactitud, de la información publicada ni por las omisiones, errores o discrepancias que pudiesen encontrarse en la información publicada o servicio brindado. ", + "p9": "Respecto a la información publicada en los Servicios, la Administración no confiere garantías de ningún tipo, expresas ni implícitas, excluyendo, más no limitado a:", + "p10": "- Garantías de comerciabilidad o adecuación para un propósito particular.", + "p11": "- Estabilidad ininterrumpida del Servicio.", + "p12": "- Existencia de errores o virus, así como sobre su seguridad.", + "p13": "- Exactitud, confiabilidad, calificación o certificación para su descarga.", + "p14": "La Administración no se hace responsable sobre el uso que el usuario haga de los contenidos incluidos en los Servicios, ni de las decisiones que tome respecto a éstos. La información respecto a los productos y servicios de NightSpire, incluida en sus Servicios es brindada con fines edcuativos no comerciales y no constituye oferta de venta para sus usuarios.", + "p15": "NightSpire se reserva el derecho de a discreción:", + "p16": "- Corregir cualquier error, omisión o inexactitud en los datos brindados.", + "p17": "- Cambiar o actualizar, descontinuar o eliminar la información contenida en los Servicios en cualquier momento y sin previo aviso.", + "p18": "- Así como también se exime de responsabilidad sobre lo que refiere a la puntualidad, falta de almacenamiento, inexactitud o entrega incorrecta de cualquier información o dato de los que “normalmente” proporcione, ya sea temporal o permanentemente.", + "h4": "RESPONSABILIDADES Y OBLIGACIONES DE REGISTRO Y CONTRASEÑAS", + "p19": "El usufructo de las principales funciones fundamentales y objetivas del Servicio estará siempre determinado y sujeto a la existencia de un registro personal e intransferible (dígase cuenta de usuario). La Administración le exhorta a proporcionar información veraz y comprobable según fuese la misma solicitada. Más allá de un carácter intrusivo, dicha información se haría utilizar estricta y discretamente en aras de posibilitar a futuro, una resolución por parte de la Administración, de alguna situación extraordinaria que surgiese por descuidos de parte del usuario, intentando así dictar la misma en la forma menos perjudicial posible para con este. ", + "p20": "Pertenece completa y estrictamente, y recae sobre el usuario la responsabilidad de mantener confidenciales y de forma segura las contraseñas establecidas para con el Servicio. Así como de las acciones a través del uso de su registro que pudiesen estar estas bajo autorización o no indistintamente por parte del usuario. Queda así también bajo responsabilidad del usuario, la notificación inmediata a la Administración si éste notase alguna actividad sospechosa, uso no autorizado o registro no concebido en el que figurase su propia cuenta como objeto de manipulación, o violación.", + "p21": "Queda terminantemente prohibido el intercambio, comercio, compra-venta y cualquier actividad similar de cualquier forma y bajo cualquier concepto donde figurase e involucrase el conocimiento por parte de cualquiera persona ajena al usuario; de sus credenciales de acceso al Servicio. Violar dichas prohibiciones podría hacer incurrir al usuario en una falta grave, la cual podría sancionarse con penalizaciones de magnitud determinada por la Administración a su juicio y a discreción, la cual en ningún caso quedaría exenta de dicha penalización mediante alegato de uso por parte de terceros y en general bajo ninguna justificación.", + "p22": "Los personajes del reino que hubiesen sido borrados y alcanzados estos, el límite máximo de tiempo (on-hold) para recuperación, establecido por la Administración, desaparecerán permanentemente, claudicando con ellos la posibilidad de restauración o asistencia por parte de la Administración en estos casos, independientemente y descartando por completo la voluntad del usuario para con tal acción en dicho momento.", + "h5": "HACER TRAMPA", + "p23": "Se entiende como trampa cualquier acto fuera y dentro del servidor, que intente alterar o de hecho altere e interfiera con las reglas o con el comportamiento normal del servidor. Así como intentar o de hecho aventajarse sobre otros jugadores. Entre ello, a título meramente enunciativo y sin ánimo limitativo, cualquiera de los siguientes comportamientos, ya sea en su propio nombre o por cuenta de terceros será considerado como tal:", + "p24": "- Acceder a los Servicios de manera no autorizada (incluyendo el uso de software modificado o malicioso).", + "p25": "- Utilizar varias cuentas a la vez en un mismo reino de una forma en la que controlar varios personajes al unísono y sobre el mismo reino, suponga una desventaja de cualquier índole para otros usuarios con respecto infractor.", + "p26": "- Utilizar cualquier técnica o software para alterar o manipular las variables preestablecidas por el servidor y la Administración.", + "p27": "Se prohíbe terminantemente hacer trampas y la Administración se reserva el derecho de denegar a cualquier usuario el acceso al Servicio, siempre y cuando hubiere incurrido o fuese objeto de una falta de este tipo ya fuese directa e indirectamente.", + "h6": "COMPRAS, RECLAMACIONES, REEMBOLSOS Y GARANTÍAS", + "p28": "NightSpire no representa ni constituye entidad remesadora ni de servicios financieros de ninguna índole y en consecuencia no posee control o responsabilidad alguna sobre el origen de aquellos fondos utilizados para realizar compras hacia su comunidad. Así como tampoco se responsabiliza por los riesgos que el usuario tomase bajo su propia voluntad, a la hora de ejecutar operaciones financieras de cualquier tipo.", + "p29": "Las compras: serán consideradas siempre de fe voluntaria y en ningún caso, obligación de ningún tipo para ningún usuario. Nótese además que quedan terminantemente prohibidos las compras por parte de personas naturales menores de 18 años o dígase en cualquier caso aquellas personas que no alcanzaran aún al amparo de las entidades legales locales y pertinentes que le competan, su mayoría de edad.", + "p30": "El Servicio: en cualquier caso, no requiere ningún tipo de compra para un uso y disfrute total y a plenitud. Dicho esto, el usuario contará con un canal de comunicación oficial vía email consultas@nightspire.gg con el objetivo de notificar a la Administración de cualquier error cometido por cualquiera de las partes, en aras de emitir y hacer efectiva justa resolución", + "p31": "La Administración: garantiza y se compromete en brindar al comprador toda información que requiriese sobre las formas o métodos de compra vigentes para con la comunidad. Así como aclarar cualquier duda que pudiese surgir sobre los pasos o procesos establecidos de las mismas, siempre y cuando dicha información resida dentro de los límites que competan al comprador y posea un propósito únicamente informativo.", + "p32": "Tomado en cuenta lo anterior, el comprador cuenta con garantías de reembolso monetario y de servicios, atendiendo a aspectos y condiciones expuestos a continuación.", + "h7": "Monetarios:", + "p33": "Tomando en cuenta el carácter que posee cualquier transacción monetaria hacia las arcas de la comunidad, la Administración se compromete a reembolsar (libre de costos por transacción, a consideración de la misma), de forma total o parcial, en definitiva, colegiada conjuntamente entre ambas partes, aquellas compras donde no intencionalmente, el usuario quedase bajo la inconveniencia a la hora de realizar la misma, de errores por su parte en la cuantía del monto total a transferir. Siendo dicho error en todos los casos veraz y de comprobable naturaleza a consideración de la administración.", + "p34": "Tomando en cuenta que los servicios adquiridos se reciben de forma inmediata y no constituyen, determinan, pactan ni modifican plazo alguno para su uso. Así como tampoco para el usufructo del servicio y sus funcionalidades los cuales, recalcado sea de paso, se consideran completamente gratuitos, de carácter educativo y carecen de plazos de admisión y vencimiento.", + "p35": "La Administración no garantiza ni proporcionará en ningún caso ni bajo ningún concepto o circunstancia, reembolso alguno sobre compras o cualquier bien en general transferido a la comunidad. Nótense y háganse aclaratorios lo siguientes casos:", + "p36": "- A usuarios cuyas cuentas hayan sido sancionadas temporal o permanentemente por incurrir en alguna falta expuesta en cualquiera de sus Términos y Condiciones.", + "p37": "- A usuarios que hubiesen tomado la decisión de no continuar (parcial o temporalmente) haciendo uso de cualquiera de los servicios prestados por La Administración.", + "p38": "En ninguno de estos casos la Administración presentará completa ni parcialmente traza alguna de ninguno de sus registros monetarios o de cualquier tipo para fines resolutorios.", + "p39": "Igualmente, el usuario dispone de las respectivas vías y canales, dígase dentro de los foros del Servicio, o servidor de Discord para presentar una apelación formal ante un administrador y ser así evaluado el caso para posterior resolución. La Administración se reserva el derecho de evaluar más no garantizar y a discreción, reembolsos en aquellos casos donde después de estudiado y conciliado, fuese considerado por la misma, justo y extraordinario.", + "h8": "De servicios:", + "p40": "La Administración le garantiza la integridad y funcionalidad de todos los artículos comprados en su tienda. En todo caso, ésta le proveerá un término de 48 horas posterior a su compra para solicitar reemplazos por artículos o servicios de igual valor, o también y a solicitud, la devolución íntegra de los servicios utilizados en aquellos casos donde se encontrarse dicho artículo o servicio roto o inutilizable, o hubiere sido comprado o elegido por error, todo esto siempre y después de efectuado un análisis pertinente por parte de un administrador, y de demostradas pruebas auténticas y concluyentes por parte del usuario a fines con el caso.", + "p41": "Así como también la Administración garantizará la restauración del servicio por problemas técnicos y puntuales, entre el Servicio y las plataformas de pago siempre ajenos al comprador, no fuesen entregados dichos servicios de forma automática e inmediata a nombre del mismo. ", + "h9": "POLÍTICA DE PRIVACIDAD", + "p42": "El Servicio y la Administración recopilan información referente al usuario tales como dirección de correo electrónico, nombre, contraseña, idioma y zona horaria, con el fin de brindarle una mejor optimización cada vez a sus servicios, utilizando esta información para acomodar las funcionalidades a un mejor rendimiento a fin con el usuario y sus requerimientos. Dicha información también podrá ser usada para mantener al usuario mediante canales de comunicaciones independientes y no referentes al Servicio, informando sobre noticias importantes, actualizaciones, problemas técnicos o cualquier otra información de tal índole que considerase la Administración relevante a los intereses del usuario. ", + "p43": "La Administración y el Servicio se comprometen a salvaguardar la confidencialidad sobre tales datos, así como a garantizar la NO divulgación de estos, exceptuando los casos donde las leyes vigentes que rigiesen sobre la Administración lo consideraran necesario y mandatorio por motivos no referentes a NightSpire. " + }, + "refund": { + "title": "Política de reembolso", + "h1": "NUESTRO SERVICIO", + "p1": "Todos nuestros servicios son de entrega inmediata y se reciben tal cual se encuentran descritos.", + "h2": "NUESTRA RESPONSABILIDAD", + "p2": "Garantizamos el funcionamiento, tiempo de entrega y descripción de los servicios brindados por nuestro sitio.", + "p3": "Es importante que el usuario comprenda que lo que adquiere en el sitio son servicios que se reciben de forma inmediata.", + "p4": "No adquiere tiempo de uso de los servicios, ni beneficio alguno, ni inmunidad.", + "p5": "Todo caso avalado por nuestra política de devolución será tratado con el reinicio o corrección del servicio y posterior revisión garantizando el funcionamiento correcto del servicio reiniciado o corregido.", + "h3": "TIEMPO DE NOTIFICACIÓN", + "p6": "Cualquier error o problema de nuestros servicios debe ser notificado a la administración en un período máximo de 48 horas desde la entrega del servicio.", + "p7": "Pasado este período de tiempo, el usuario ya no puede solicitar ningún tipo de devolución.", + "p8": "Contacto: consultas@nightspire.gg.", + "h4": "COBERTURA", + "p9": "Esta política de devolución cubre:", + "p10": "- Adquisición del servicio incorrecto por una mala selección del usuario.", + "p11": "- Errores ocasionados por el sitio web que hayan impedido la entrega del servicio.", + "p12": "- Errores ocasionados por plataformas de terceros que hayan impedido la entrega del servicio.", + "p13": "Esta política de devolución NO cubre, bajo ninguna circunstancia:", + "p14": "- Arrepentimientos.", + "p15": "- Errores en el uso del servicio realizados por el usuario.", + "p16": "- Desconocimiento de nuestra política de devolución.", + "p17": "- Uso incorrecto de plataformas de terceros con el fin de violar nuestra política de devolución.", + "p18": "- Expulsión de nuestro sitio por incumplimiento de nuestros términos y normas.", + "h5": "Solicitud de reembolso hecha a través de la plataforma de pago.", + "p19": "Pedir un reembolso por razones avaladas en esta política de devolución procederá a un reembolso de nuestra parte con la correspondiente cancelación del servicio adquirido.", + "p20": "Pedir un reembolso por razones no avaladas en esta política de devolución como:", + "p21": "- La cuenta ha sido sancionada.", + "p22": "- La persona ya no usa el servicio e intenta solicitar un reembolso posterior a las 48 hs del momento de la adquisición.", + "p23": "- Abuso de herramientas disponibles alegando razones que falten a la verdad respecto del servicio entregado.", + "p24": "No aplican para devolución y puede conllevar a la expulsión permanente del sitio por falta a nuestros términos y un uso inadecuado de las plataformas de pago disponibles.", + "h6": "Arrepentimientos", + "p25": "Ningún tipo de arrepentimiento posterior a la entrega de un servicio aplica para devolución.", + "h7": "Errores en el uso del servicio realizados por el usuario", + "p26": "Errores en el uso de los servicios, ocasionados por el usuario, que no tienen relación con ningún tipo de falla en el servicio entregado no aplica para devolución.", + "p27": "Cualquier error de usuario ocasionado por no leer la descripción de un servicio no aplica para devolución.", + "p28": "Una vez que el servicio se encuentra entregado, el uso del mismo queda a responsabilidad del usuario.", + "h8": "Desconocimiento de nuestra política de devolución", + "p29": "El desconocimiento por parte del usuario de nuestra política de devolución no exime al usuario de su cumplimiento.", + "h9": "Uso incorrecto de plataformas de terceros con el fin de violar nuestra política de devolución", + "p30": "Este tipo de acciones conllevará a la expulsión del usuario de nuestro sitio sin ningún tipo de devolución.", + "h10": "Expulsión de nuestro sitio por incumplimiento de nuestros términos y normas", + "p31": "Ninguna adquisición de nuestros servicios otorga ningún tipo de inmunidad.", + "p32": "La expulsión de un usuario de nuestro sitio no aplica a ningún tipo de devolución.", + "p33": "El cumplimiento de nuestros términos y normas queda a exclusiva responsabilidad del usuario y cualquier expulsión que resulte del incumplimiento de los mismos no califica a solicitar devolución de los servicios ya entregados y disfrutados.", + "h11": "Cambios a esta Política de Reembolso", + "p34": "Nos reservamos el derecho de actualizar esta Política de Reembolso en cualquier momento. Le recomendamos que revise periódicamente esta página para conocer los cambios.", + "h12": "Contáctanos", + "p35": "Si tiene alguna pregunta o inquietud sobre esta Política de Reembolso, puede contactarnos a través de la siguiente información de contacto:", + "updated": "Fecha de actualización: 25-05-2023" + }, + "legalNotice": { + "title": "Aviso legal", + "p1": "El sitio web \"NightSpire.com\" y sus subdominios (en adelante, \"el sitio web\") se ofrecen únicamente con fines informativos y de entretenimiento. NightSpire no se hace responsable del uso que los usuarios hagan del sitio web. Aunque se procura que se dé un uso correcto, NightSpire no asume responsabilidad por las acciones, decisiones o consecuencias derivadas del uso del sitio web. Los usuarios son responsables de verificar la precisión, integridad y utilidad de la información proporcionada, así como de cumplir con las leyes y regulaciones aplicables al utilizar el contenido del sitio web.", + "p2": "Enlaces a terceros: El sitio web puede contener enlaces a sitios web de terceros. Estos enlaces se proporcionan únicamente para tu conveniencia y no implican el respaldo o afiliación de NightSpire con dichos sitios web. NightSpire no se hace responsable del contenido o las prácticas de privacidad de estos sitios web de terceros.", + "p3": "Privacidad y Cookies: La recopilación y uso de tus datos personales se rigen por nuestra Política de Privacidad y el uso de cookies se rige por nuestra Declaración de Cookies. Al utilizar el sitio web, aceptas nuestras prácticas descritas en dichas políticas.", + "p4": "Derechos de autor: Los usuarios del sitio web deben respetar los derechos de autor y no publicar contenido que infrinja los derechos de propiedad intelectual de terceros. NightSpire se compromete a proteger los derechos de autor y cumplir con las leyes aplicables. Si encuentras contenido infractor, contáctanos utilizando el mecanismo de reclamación de infracción descrito a continuación.", + "p5": "Mecanismo de reclamación de infracción: Si crees que tu trabajo ha sido utilizado de manera no autorizada en el sitio web, puedes presentar una reclamación por infracción de derechos de autor proporcionando la información requerida. Contáctanos utilizando los datos de contacto a continuación.", + "contactTitle": "Contacto" + }, + "contact": { + "title": "Contáctanos", + "p1": "¡Gracias por tu interés en contactar con nosotros!", + "p2": "Si tienes alguna pregunta, consulta o comentario, estaremos encantados de ayudarte. Por favor, envía un correo electrónico a la siguiente dirección:", + "p3": "NightSpire es el servicio al que se refieren estos términos.", + "p4": "Nos esforzamos por responder a todos los mensajes en un plazo de 48 horas hábiles.", + "p5": "Asegúrate de incluir la información relevante en tu correo para que podamos brindarte una respuesta precisa y oportuna.", + "p6": "En NightSpire, valoramos tus comentarios y opiniones. Tu satisfacción es nuestra prioridad y nos esforzamos por brindarte la mejor experiencia posible en NightSpire.", + "p7": "¡Esperamos tener noticias tuyas pronto!", + "p8": "Atentamente, el equipo de NightSpire." + } + }, + "Misc": { + "home": { + "recruitFriend": "¡RECLUTA A UN AMIGO!", + "labelTime": "Hora", + "introP1": "{realm} es una comunidad enfocada en usuarios de habla hispana, especialmente dirigida al público español y latino.", + "introP2": "Atraemos a usuarios apasionados tanto por el PvE como por el PvP, y ofrecemos una amplia variedad de contenido.", + "introP3": "Nuestro objetivo principal es mantener una comunidad de alto nivel, brindando un ambiente agradable para que todos los miembros, nuevos y veteranos, encuentren aquí un lugar donde puedan vivir momentos inigualables.", + "introP4": "¡Únete y disfruta de una experiencia única con miles de usuarios!", + "newsHeading": "NOTICIAS", + "noNews": "No hay noticias disponibles en este momento.", + "newsLinkLabel": "Enlace:", + "here": "aquí", + "showingLatest": "* Mostrando las últimas 50 noticias" + }, + "realm": { + "charactersHeading": "Personajes", + "realmHeading": "Reino" + }, + "creators": { + "pageTitle": "Creadores de contenido", + "empty": "No hay información disponible en este momento.", + "contentType": "Tipo de contenido", + "media": "Medios" + }, + "expiredLink": { + "pageTitle": "Enlace Expirado", + "message": "Lo sentimos, el enlace que ha utilizado ha expirado o no es válido.", + "requestNew": "Solicitar nuevo cambio de correo" + }, + "maintenance": { + "pageTitle": "Mantenimiento", + "line1": "Nuestro sitio web está actualmente en mantenimiento para mejorar la experiencia de nuestros usuarios.", + "line2": "Agradecemos su paciencia y comprensión.", + "discord": "Para mantenerse informados sobre el estado del mantenimiento y recibir actualizaciones en tiempo real, únanse a nuestro servidor de Discord." + }, + "downloadAddons": { + "title": "Descarga de addons", + "recommended": "Addons recomendados", + "intro1": "Los addons son complementos opcionales que mejoran y personalizan tu experiencia de juego.", + "intro2": "Descarga los que quieras desde su página oficial (elige la versión compatible con WotLK 3.4.3).", + "howToInstall": "Cómo instalarlos", + "step1": "1) Descarga el addon y descomprime el archivo .zip.", + "step2": "2) Copia la carpeta resultante dentro de Interface/AddOns (en la carpeta de tu cliente).", + "step3": "3) Inicia el juego y, en la pantalla de selección de personaje, pulsa Complementos para activarlos.", + "download": "Descargar", + "descDbm": "Avisos y temporizadores de habilidades de jefes en mazmorras y bandas.", + "descDetails": "Medidor de daño, curación y amenaza con gráficas detalladas.", + "descAtlasLoot": "Consulta el botín de jefes de mazmorras y bandas dentro del juego.", + "descQuestie": "Muestra objetivos y ubicaciones de misiones en el mapa y el minimapa.", + "descBagnon": "Unifica todas tus bolsas y el banco en una sola ventana con búsqueda.", + "descBartender4": "Personaliza por completo tus barras de acción.", + "descAuctioneer": "Herramientas avanzadas para la casa de subastas.", + "descPawn": "Compara equipo y te indica qué objeto es una mejora para tu personaje." + }, + "twofaLogin": { + "pageTitle": "Verificación en 2 pasos", + "info": "Información", + "backToAccount": "Regresar a mi cuenta", + "back": "Regresar", + "previewAlt": "Vista previa autenticador", + "p1": "2FA son las siglas de \"Two Factor Authentication\", o verificación en dos pasos.", + "p2": "Es un método que añade una capa adicional de seguridad al proceso de inicio de sesión.", + "p3": "En lugar de simplemente ingresar tu nombre de usuario y contraseña, 2FA requiere un segundo paso de verificación, aumentando así la protección de tu cuenta.", + "p4": "Una vez activado, luego de ingresar usuario y contraseña, aparecerá una ventana (Imagen derecha) que te pedirá el código de autenticación generado por la aplicación.", + "backupCodes": "Códigos de respaldo", + "p5": "Al activar 2FA, se te proporcionarán códigos de respaldo únicos.", + "p6": "Estos códigos son útiles en caso de que pierdas acceso a tu aplicación de autenticación.", + "p7": "Cada código de respaldo puede usarse una sola vez.", + "p8": "Guárdalos en un lugar seguro, ya que te permitirán acceder a tu cuenta en el sitio web si no puedes usar la aplicación de autenticación.", + "requestToken": "Si aún no tienes Token de seguridad, puedes solicitarlo aquí.", + "note": "NOTA", + "noteText": "Utiliza una aplicación de autenticación para iniciar sesión en el juego una vez que lo tengas activado." + }, + "help": { + "title": "Ayuda", + "subtitle": "Guía de asistencia", + "intro1": "En esta guía podrás saber qué pasos seguir para obtener asistencia adecuada dependiendo del tipo de problema que hayas encontrado en nuestro servidor.", + "intro2": "Ofrecemos un conjunto de problemas comunes, qué medios utilizar para cada caso y una explicación de cada medio de contacto.", + "intro3": "Los diferentes medios para cada problema se listan desde el más ideal hasta la última opción.", + "clientTitle": "Con el cliente", + "clientText": "Problemas que impiden arrancar el cliente, conectar al servidor o errores que provocan el cierre abrupto del cliente.", + "mediaAre": "Los medios son:", + "mediaForos": "- Foros", + "mediaDiscord": "- Discord", + "mediaTicket": "- Ticket", + "serverErrorsTitle": "Con errores del servidor", + "serverErrorsText": "Problemas relacionados a errores que deben ser reparados por nuestro equipo de reparación para mejorar el servidor.", + "characterTitle": "Con el personaje", + "characterText": "Problemas relacionados a errores que puedan afectar al personaje, habilidades, hechizos, misiones, etc.", + "otherPlayerTitle": "Con otro jugador", + "otherPlayerText1": "Problemas relacionados a otros usuarios cometiendo faltas a las normas del servidor.", + "otherPlayerText2": "Este tipo de problemas requieren de una denuncia con las pruebas correspondientes de lo que haya sucedido.", + "accountBlocksTitle": "Con bloqueos de cuenta", + "accountBlocksText": "Problemas relacionados a bloqueos de cuenta realizados por el equipo de {realm}.", + "websiteTitle": "Con la página web", + "websiteText": "Problemas relacionados a errores, fallas o sugerencias respecto de este sitio web.", + "mailTo": "- Correo a", + "pdTitle": "Con PD", + "pdText": "Problemas relacionados a PD o PV.", + "contactMeans": "Medios de contacto", + "ticketTitle": "Ticket", + "ticket1": "Para colocar un ticket, debes hacer click al signo de interrogación rojo en la parte inferior derecha de la interfaz del cliente (a la izquierda del llavero del personaje).", + "ticket2": "Al hacerle click, aparecerá una ventana en el medio de la pantalla.", + "ticket3": "En dicha ventana, hacer click al primer botón en la esquina inferior izquierda llamado 'Hablar con un MJ'", + "ticket4": "Aparecerá una ventana con un texto informativo y debajo en medio, un botón llamado 'Abrir una consulta'.", + "ticket5": "Al darle click al botón, aparecerá un campo de texto en el que puedes describir tu problema", + "ticket6": "Cuando hayas finalizado haz click en el botón en el primer botón en la esquina inferior derecha llamado 'Enviar'.", + "ticket7": "El ticket ya ha sido creado y está pendiente de respuesta de un miembro del equipo.", + "discordTitle": "Discord", + "discord1": "Discord es una plataforma de chat y comunicación por voz que puede descargarse aquí.", + "discord2": "Para entrar en el servidor de Discord de nuestro servidor, haz click aquí.", + "discord3": "Una vez que seas miembro de nuestro Discord podrás pedir ayuda en el canal 'Asistencia' o enviar un mensaje directo a cualquier miembro del equipo solicitando ayuda.", + "forosTitle": "Foros", + "foros1": "Los foros son una gran herramienta en donde no sólo puede ayudarte el equipo de {realm} sino que además otros jugadores pueden asistirte si conocen cómo resolver el problema que tengas.", + "foros2": "Para solicitar ayuda por este medio, debes tener un usuario con el cual poder conectar y abrir un nuevo tema en el foro adecuado.", + "foros3": "Puedes visitar nuestros foros aquí.", + "emailTitle": "Correo electrónico", + "email1": "El servidor tiene diferentes direcciones de correo dedicados a diferentes temas del servidor.", + "email2": "Depende cual sea tu problema, usa el adecuado para enviarnos un mensaje de correo." + }, + "changelogs": { + "title": "Changelogs", + "loadError": "No se pudieron cargar los cambios en este momento." + } + }, + "Points": { + "dpoints": { + "title": "Adquirir PD" + }, + "dpointsSuccess": { + "title": "Adquirir PD", + "paidOk": "¡Pago completado! Tus PD ya fueron acreditados a tu cuenta.", + "alreadyPaid": "Este pago ya había sido procesado. Tus PD están acreditados.", + "error": "No pudimos confirmar tu pago. Si se realizó el cargo, contacta con soporte.", + "backToAccount": "← Regresar a mi cuenta" + }, + "transferDp": { + "title": "Transferir PD", + "intro1": "La herramienta Transferir PD permite transferir PD desde tu cuenta a cualquier otra cuenta.", + "intro2": "Al usar el botón TRANSFERIR PD se transferirá la cantidad que hayas escogido desde tu cuenta a la cuenta del personaje que hayas indicado.", + "tokenHelp": "Si aún no tienes Token de seguridad, puedes solicitarlo aquí.", + "note": "NOTA", + "noteText": "Por favor, asegúrate de haber escrito el nombre del personaje correcto ya que esta acción no es reversible una vez realizada.", + "noPd": "No tienes PD", + "confirm": "Vas a transferir {n} PD al personaje \"{character}\".\nEsta acción no es reversible. ¿Deseas continuar?", + "success": "Has transferido {n} PD al personaje \"{character}\".", + "available": "Tienes {balance} PD disponibles", + "characterPlaceholder": "Nombre del personaje de destino", + "amountPlaceholder": "Cantidad de PD", + "tokenPlaceholder": "Token de seguridad", + "transferring": "Transfiriendo…", + "transferButton": "TRANSFERIR PD", + "errors": { + "missingFields": "Rellena el personaje de destino, la cantidad y el token de seguridad.", + "invalidAmount": "La cantidad debe ser un número entero mayor que 0.", + "invalidToken": "El token de seguridad no es válido.", + "characterNotFound": "No existe ningún personaje con ese nombre.", + "sameAccount": "No puedes transferirte PD a tu propia cuenta.", + "insufficientFunds": "No tienes suficientes PD para realizar esta transferencia.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "generic": "No se pudo completar la transferencia. Inténtalo de nuevo." + } + }, + "trade": { + "title": "Comercio de PD", + "intro1": "La herramienta Comercio de PD permite comprar o vender PD a cambio de oro de una forma segura.", + "intro2": "El sistema permite crear códigos de 1 solo uso que valdrán X cantidad de PD a cambio de X cantidad de oro.", + "intro3": "Los vendedores disponen de la sección VENTA para crear el código y los compradores disponen de la sección COMPRA para canjear dicho código.", + "sellTitle": "Venta", + "sell1": "1) Decide cuánto valdrá el código en PD.", + "sell2": "2) Decide por cuánto oro se podrá canjear.", + "sell3": "3) Escoge a qué personaje de la cuenta se enviará el oro cuando el código sea canjeado.", + "sell4": "4) Completa los datos con la contraseña y Token de Seguridad.", + "sell5": "5) Usa el botón CREAR CÓDIGO.", + "sell6": "6) Un recuadro aparecerá con los datos del Código creado con el ID que se debe usar para enviar a otro jugador.", + "buyTitle": "Compra", + "buy1": "1) Ingresa ID del código que te ha dado otro jugador.", + "buy2": "2) Chequea el valor en PD y costo en oro con el botón CHEQUEAR CÓDIGO.", + "buy3": "3) Escoge de qué personaje de la cuenta se descontará el oro cuando el código sea canjeado.", + "buy4": "4) Completa los datos con la contraseña y Token de Seguridad.", + "buy5": "5) Usa el botón CANJEAR CÓDIGO.", + "buy6": "6) Un recuadro aparecerá con los datos del Código canjeado, PD recibidos y oro retirado del personaje seleccionado.", + "duration": "Cada código tiene una duración de 1 hora.", + "onceRedeemed": "Una vez canjeado el código:", + "redeemed1": "- Los PD serán retirados de la cuenta del creador del código y enviados a quien lo haya canjeado.", + "redeemed2": "- El oro será retirado y enviado por correo al creador.", + "redeemed3": "- La transacción quedará registrada en el Historial de PD y PV.", + "lockNote": "La cuenta de quien canjee el código será bloqueada por 5s como medida de seguridad si el trámite es exitoso.", + "tokenHelp": "Si aún no tienes Token de seguridad, puedes solicitarlo aquí.", + "note": "NOTA", + "noteText": "Por favor, asegúrate de haber escrito todos los datos correctos ya que esta acción no es reversible una vez realizada.", + "sellTab": "VENTA", + "buyTab": "COMPRA", + "noCharacters": "No tienes personajes en esta cuenta.", + "codeCreated": "¡Código creado!", + "sellPointsLabel": "¿Cuánto valdrá el código en PD?", + "sellPointsPlaceholder": "Valor del código en PD", + "sellGoldLabel": "¿Cuánto costará el código en oro?", + "sellGoldPlaceholder": "Valor del código en oro", + "sellCharLabel": "¿A qué personaje se enviará el oro?", + "selectCharacter": "Selecciona un personaje", + "passwordPlaceholder": "Contraseña de tu cuenta", + "tokenPlaceholder": "Token de seguridad", + "creating": "Creando…", + "createButton": "Crear código", + "createdLegend": "Código creado", + "codeIdLabel": "ID del código:", + "createdValue": "Valor: {points} PD por {gold} de oro", + "createdHint": "Envía este ID al comprador. El código caduca en 1 hora.", + "buyCodeLabel": "Ingresa el ID del código de PD", + "buyCodePlaceholder": "Código de PD", + "checkInfo": "Vale {points} PD · Cuesta {gold} de oro", + "buyCharLabel": "¿De qué personaje se cobrará el oro?", + "checkButton": "Chequear código", + "processing": "Procesando…", + "redeemButton": "Canjear código", + "checkResult": "Este código vale {points} PD y cuesta {gold} de oro.", + "redeemConfirm": "Vas a canjear este código. Esta acción no es reversible. ¿Deseas continuar?", + "redeemSuccess": "¡Canje correcto! Recibiste {points} PD y se retiraron {gold} de oro de {character}.", + "errors": { + "missingFields": "Rellena todos los campos.", + "invalidAmount": "Las cantidades deben ser números enteros entre 1 y 99999.", + "characterInvalid": "El personaje seleccionado no es válido.", + "captcha": "Verifica que no eres un robot.", + "wrongPassword": "La contraseña de tu cuenta es incorrecta.", + "invalidToken": "El token de seguridad no es válido.", + "insufficientPoints": "No tienes suficientes PD disponibles para crear este código.", + "codeNotFound": "No existe ningún código con ese ID.", + "codeUnavailable": "El código ya no está disponible (canjeado o expirado).", + "cannotRedeemOwn": "No puedes canjear tu propio código.", + "characterOnline": "El personaje debe estar desconectado para poder cobrar el oro.", + "insufficientGold": "El personaje no tiene suficiente oro.", + "creatorInsufficient": "El creador del código ya no tiene suficientes PD.", + "locked": "Espera unos segundos antes de canjear otro código.", + "deliveryFailed": "No se pudo entregar el oro (servidor de juego no disponible). Inténtalo de nuevo más tarde.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "generic": "No se pudo completar la operación. Inténtalo de nuevo." + } + }, + "promo": { + "title": "Código de promoción", + "intro1": "Los Códigos de promoción son palabras con letras y números que se canjean en el formulario de abajo por PD o PV y tienen usos limitados. Cada uno puede dar diferente cantidad de PD/PV.", + "intro2": "Estos códigos son generados por el Equipo de {realm} y pueden aparecer en la página web, Discord, las redes sociales o el servidor.", + "intro3": "Aconsejamos poner atención a las redes sociales y los anuncios del servidor para saber cuándo hay un código disponible.", + "note": "NOTA", + "noteText": "Los códigos son sensibles a mayúsculas y minúsculas por lo que siempre debes escribirlos igual a como aparecen publicados.", + "placeholder": "Escribe tu código de promoción", + "redeeming": "Canjeando…", + "redeemButton": "CANJEAR CÓDIGO", + "rewardPd": "{pd} PD", + "rewardPv": "{pv} PV", + "and": "y", + "rewardDefault": "la recompensa", + "success": "¡Código canjeado! Has recibido {reward}.", + "errors": { + "missingCode": "Escribe un código de promoción.", + "notFound": "El código no existe o ya no está disponible.", + "expired": "Este código ha caducado.", + "exhausted": "Este código ya ha alcanzado su límite de usos.", + "alreadyUsed": "Ya has canjeado este código.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "generic": "No se pudo canjear el código. Inténtalo de nuevo." + } + }, + "renameGuild": { + "title": "Renombrar hermandad", + "intro1": "La herramienta Renombrar hermandad te permite cambiar de nombre a una hermandad de la cual seas Maestro de Hermandad.", + "rules": "A la hora de escoger un nuevo nombre, ten en cuenta:", + "rule1": "- La longitud máxima es de 24 caracteres.", + "rule2": "- Los caracteres permitidos son A-Za-z y el espacio.", + "intro2": "Al usar el botón RENOMBRAR HERMANDAD de la hermandad que hayas escogido, se cambiará su nombre al nuevo nombre que hayas ingresado.", + "intro3": "El cambio de nombre de hermandad es instantáneo. Puede ser necesario que los miembros de la hermandad conectados deban volver a conectar para finalmente ver el nuevo nombre.", + "note": "NOTA", + "noteText": "Por favor, asegúrate de haber elegido el nombre correcto ya que esta acción no es reversible una vez realizada.", + "requires": "Cuesta {pd} PD o {eur} . Elige la forma de pago (PD, tarjeta con Stripe o SumUp) abajo.", + "noGuilds": "No hay personajes Maestros de hermandad", + "confirm": "¿Estás seguro de renombrar la hermandad seleccionada?", + "success": "¡Hermandad renombrada a \"{newName}\"! Puede que los miembros conectados deban reconectar para verlo.", + "selectGuild": "Selecciona una hermandad", + "newNamePlaceholder": "Nuevo nombre de la hermandad", + "tokenPlaceholder": "Token de seguridad", + "renamed": "HERMANDAD RENOMBRADA", + "renaming": "RENOMBRANDO HERMANDAD", + "renameButton": "RENOMBRAR HERMANDAD", + "errors": { + "missingFields": "Completa todos los campos.", + "invalidName": "El nombre debe tener de 1 a 24 caracteres, solo letras (A-Z, a-z) y espacios.", + "invalidToken": "El token de seguridad no es válido.", + "notGuildMaster": "No eres Maestro de esa hermandad.", + "nameTaken": "Ya existe una hermandad con ese nombre.", + "insufficientPoints": "No tienes suficientes PD (se requieren 1000).", + "soapError": "No se pudo aplicar el cambio (servidor de juego no disponible). Inténtalo más tarde.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "generic": "No se pudo renombrar la hermandad. Inténtalo de nuevo." + } + }, + "tabs": { + "info": "Información", + "backToAccount": "Regresar a mi cuenta", + "back": "Regresar", + "whatArePd": "¿Qué son los PD?", + "whatArePdText": "Ofrecemos a nuestros usuarios la oportunidad de obtener niveles que les brindan beneficios exclusivos dentro de nuestra comunidad en línea. Estos beneficios incluyen acceso a herramientas especiales, contenido exclusivo y mejoras significativas para su experiencia en nuestro sitio web. Al realizar una compra, nuestros usuarios reciben PD, una unidad de reconocimiento interna que refleja su compromiso y progreso en nuestra plataforma. Los PD les permiten alcanzar nuevos niveles y desbloquear recompensas exclusivas. Cabe destacar que estos PD son una forma única de valorar y premiar la participación activa de nuestros usuarios en nuestra comunidad.", + "availableLevels": "¿Cuáles son los niveles disponibles?", + "show": "Mostrar", + "hide": "Ocultar", + "level": "Nivel {n}", + "purchaseMethods": "¿Cuáles son los métodos de compra de PD?", + "purchaseMethodsText": "Los métodos de compra disponibles actualmente son:", + "stripeMethod": "Stripe (tarjeta de crédito/débito, para todos los países).", + "sumupMethod": "SumUp (tarjeta de crédito/débito).", + "howManyPd": "¿Cuántos PD se reciben?", + "howManyPdText": "Por cada {sym}1 recibes 100 PD. La cantidad final se indica antes de confirmar el pago.", + "doubts": "¿Tienes dudas o problemas con una compra?", + "doubtsText1": "No realices una compra hasta estar completamente seguro de que has leído esta información y sabes cómo es el proceso que vayas a escoger.", + "doubtsText2": "Si a pesar de leer este instructivo aún tienes dudas, el equipo de {realm} podrá asesorarte en cualquier momento. Puedes colocar un ticket en el servidor, o contactarnos mediante nuestra plataforma de Discord.", + "mustAccept": "Debes aceptar los Términos y Condiciones y la Política de Reembolso", + "confirmPurchase": "Vas a adquirir {points} PD por {sym}{amount}.\n¿Deseas continuar al pago?", + "rate": "{sym}1 = 100 PD", + "minMax": "Valor mínimo: {sym}1 · Valor máximo por transacción: {sym}200", + "important": "¡Importante!", + "integersOnly": "Introduce sólo valores enteros (sin decimales).", + "example": "Ejemplo: para 200 PD escribe 2.", + "amountLabel": "Cantidad en {currency} a adquirir", + "amountPlaceholder": "Cantidad en {currency}", + "willReceive": "Recibirás {points} PD", + "acceptTerms": " Acepto los Términos y Condiciones y la Política de Reembolso", + "acquireButton": "ADQUIRIR PD", + "redirecting": "Redirigiendo…", + "whatIsStripe": "¿Qué es Stripe?", + "stripeAboutText": "Stripe es una plataforma de pagos en línea segura que procesa tarjetas de crédito y débito de todo el mundo. Tus datos de pago se gestionan directamente en Stripe; {realm} nunca los almacena.

Más información sobre Stripe aquí.", + "howStripe": "¿Cómo adquirir PD a través de Stripe?", + "stripeHowText": "Al ser un sistema auto-gestionado, las adquisiciones son automáticas y en cuestión de minutos tras completar el pago recibirás los PD en tu cuenta.", + "step1": "- Introduce en el campo de más abajo la cantidad que deseas adquirir.", + "stripeStep2": "- Al presionar ADQUIRIR PD, serás redirigido a la pasarela segura de Stripe para completar el pago con tu tarjeta.", + "stripeStep3": "- Una vez que Stripe valide tu pago, tendrás los PD en tu cuenta de forma automática.", + "reminderMin": "Recuerda que la cantidad sólo acepta números enteros y el mínimo posible es {sym}1.", + "wrongExamples": "Ejemplos de valor incorrecto: {sym}5,90 | {sym}22,30 | {sym}53,10", + "rightExamples": "Ejemplos de valor correcto: {sym}6 | {sym}22 | {sym}53", + "whatIsSumup": "¿Qué es SumUp?", + "sumupAboutText": "SumUp es una plataforma de pagos europea que permite pagar de forma rápida y segura con tarjeta de crédito o débito. Tus datos de pago se gestionan directamente en SumUp; {realm} nunca los almacena.

Más información sobre SumUp aquí.", + "howSumup": "¿Cómo adquirir PD a través de SumUp?", + "sumupHowText": "Al ser un sistema auto-gestionado, las adquisiciones son automáticas y tras completar el pago recibirás los PD en tu cuenta.", + "sumupStep2": "- Al presionar ADQUIRIR PD, serás redirigido a la pasarela segura de SumUp para completar el pago con tu tarjeta.", + "sumupStep3": "- Una vez que SumUp valide tu pago, tendrás los PD en tu cuenta de forma automática.", + "checkoutErrors": { + "notConfigured": "Este método de pago aún no está disponible. Por favor, utiliza otro método o inténtalo más tarde.", + "invalidAmount": "La cantidad debe ser un número entero entre 1 y 200.", + "notAuthenticated": "Tu sesión ha expirado. Inicia sesión de nuevo.", + "generic": "No se pudo iniciar el pago. Inténtalo de nuevo." + }, + "rangeFrom": "Desde {pd} PD ({price} {sym})", + "rangeUpTo": "Hasta {pd} PD ({price} {sym})", + "rangeOver": "Más de {pd} PD (más de {price} {sym})" + } + }, + "UI": { + "header": { + "home": "INICIO", + "register": "CREAR CUENTA", + "downloads": "DESCARGAS", + "client": "CLIENTE", + "addons": "ADDONS", + "changelog": "CHANGELOG", + "realm": "REINO", + "players": "JUGADORES", + "community": "COMUNIDAD", + "forums": "FOROS", + "wotlkDb": "WOTLK DB", + "videos": "VIDEOS", + "help": "AYUDA", + "myAccount": "MI CUENTA", + "logout": "DESCONECTAR", + "login": "CONECTAR", + "armory": "ARMERÍA" + }, + "footer": { + "terms": "Términos y Condiciones", + "privacy": "Política de Privacidad", + "refund": "Política de Reembolso", + "cookies": "Declaración de Cookies", + "legal": "Aviso legal", + "contact": "Contáctanos", + "copyright": "© Copyright {realmName}™ {year}. Todos los derechos reservados", + "design": "Diseño: \"{realmName}\" Por Inna Hoover Brown" + }, + "social": { + "followUs": "SÍGUENOS EN" + }, + "realmInfo": { + "ratesTitle": "Rates", + "experience": "Experiencia", + "experienceValue": "x8 modificable con .xp (Con Recluta a un Amigo x16)", + "greenBlueDrop": "Drop de objetos verdes y azules", + "greenBlueDropValue": "x4", + "goldNpc": "Drop de oro en NPCs", + "goldNpcValue": "x2", + "goldQuest": "Drop de oro en misiones", + "goldQuestValue": "x1", + "skills": "Habilidades", + "skillsValue": "x3", + "professions": "Profesiones", + "professionsValue": "x3", + "reputations": "Reputaciones", + "reputationsValue": "x3 (Bonus con Recluta a un amigo)", + "honor": "Honor", + "honorValue": "x3", + "scheduleTitle": "Horarios", + "scheduleNote": "Los siguientes horarios son basados en la hora del reino.", + "dailyQuests": "Misiones diarias", + "dailyQuestsValue": "7 am", + "dailyDungeons": "Reinicio de mazmorras diarias", + "dailyDungeonsValue": "9 am", + "raidReset": "Reinicio de bandas", + "raidResetValue": "9 am (Miércoles)", + "battlegrounds": "Campos de Batalla", + "battlegroundsValue": "10 am", + "arenaPoints": "Reparto de Puntos de Arena", + "arenaPointsValue": "11 am (Viernes)" + }, + "players": { + "updateNotice": "La información de esta página se actualiza 1 vez al día automáticamente", + "charsByClass": "Personajes creados por clase", + "total": "Total:", + "alliances": "Alianzas:", + "hordes": "Hordas:", + "allianceAlt": "Alianza", + "hordeAlt": "Horda", + "totalChars": "Personajes totales:", + "allianceChars": "Personajes alianzas:", + "hordeChars": "Personajes hordas:", + "firstsTitle": "Primeros del Reino - Nivel 80", + "noLevel80": "Aún no hay personajes de nivel 80 registrados.", + "thAchievement": "Logro", + "thCharacter": "Personaje", + "thDate": "Fecha", + "firstOfRealm": "¡Primero del reino!", + "topAchTitle": "Top de logros", + "topAchSub": "Los 10 jugadores con más logros", + "thName": "Nombre", + "thRace": "Raza", + "thClass": "Clase", + "thAchPoints": "Puntos de logros", + "topHonorTitle": "Top de muertes con honor", + "topHonorSub": "Los 10 jugadores con más muertes con honor", + "thTotalKills": "Total de muertes", + "thTodayKills": "Total de muertes hoy" + }, + "recruit": { + "errRequirements": "Aún no cumples los requisitos para esta recompensa.", + "errAlreadyClaimed": "Esta recompensa ya fue reclamada.", + "errInvalidCharacter": "Personaje no válido.", + "errNotFound": "Recompensa no encontrada.", + "errGeneric": "No se pudo reclamar la recompensa. Inténtalo de nuevo.", + "accountRecruited": "Cuenta reclutada:", + "yes": "Sí", + "no": "No", + "friendsRecruited": "Amigos reclutados:", + "friendsAtLevel80": "Amigos reclutados al nivel 80:", + "rewardsClaimed": "Recompensas reclamadas:", + "receiveRewardsOn": "Recibir recompensas en:", + "thFriends": "Amigos reclutados", + "thReward": "Recompensa", + "thStatus": "Estado", + "friendsAtLevel80Row": "{count, plural, one {# amigo al nivel 80} other {# amigos al nivel 80}}", + "claimed": "Reclamado", + "claim": "Reclamar", + "unclaimed": "Sin reclamar", + "availableRewards": "RECOMPENSAS DISPONIBLES", + "recruitToClaim": "Recluta amigos para poder reclamar las recompensas", + "readyToClaim": "Tienes {count, plural, one {# recompensa lista} other {# recompensas listas}} para reclamar" + }, + "clientDownload": { + "torrentTitle": "Descarga por Torrent", + "infoLabel": "Información", + "info1": "- No requiere instalación.", + "info2": "- El realmlist ya está configurado.", + "info3": "- La descarga se gestiona a través de magnet link. Si ya conoces cómo realizar descargas de este tipo, los pasos a seguir son opcionales.", + "requirementsLabel": "Requisitos para la descarga", + "requirementsText": "Se necesitará un programa que gestione descargas por Torrent y un programa que gestione archivos .rar.", + "popupNote": "Adicionalmente, necesitarás que esta página pueda abrir ventanas emergentes.", + "stepByStep": "Paso a paso:", + "stepOptional": "Opcional: Si no tienes Winrar, haz clic en WinRAR e instala el programa.", + "step1": "1) Haz clic en qBittorrent.", + "step2": "2) Descarga la versión adecuada para tu sistema operativo.", + "step3": "3) Ejecuta el archivo descargado y realiza la instalacion del programa.", + "step4": "4) Ejecuta qBitTorrent.", + "step5": "5) Ve a la parte final de esta página y escoge el idioma de tu preferencia.", + "step6": "6) Debajo del idioma, escoge el sistema operativo.", + "step7": "7) Haz clic en Descargar.", + "step8": "8) En la ventana emergente, acepta Abrir qBitTorrent.", + "step9": "9) Espera a que qBitTorrent cargue el archivo correspondiente en la ventana de Enlace magnet.", + "step10": "10) Haz clic en Aceptar.", + "step11": "11) En la ventana de qBitTorrent espera a que la descarga se haya completado.", + "step12": "12) Ingresa en la carpeta de descargas de qBitTorrent (Por defecto Descargas).", + "step13": "13) Haz clic derecho en el archivo .rar y usa la opción Extraer aquí.", + "step14": "14) Ingresa en la carpeta extraída y allí encontrarás el ejecutable para comenzar a jugar.", + "step15": "15) Conecta usando tu cuenta de la web, en el campo email no pongas tu email sino tu nombre de cuenta.", + "languageLabel": "Idioma", + "chooseLanguage": "Elegir idioma", + "clientEses": "Cliente esES", + "clientEsmx": "Cliente esMX", + "clientEnus": "Cliente enUS", + "clientEngb": "Cliente enGB", + "langEses": "Idioma esES: Español de España.", + "langEsmx": "Idioma esMX: Español de Latinoamérica.", + "langEnus": "Idioma enUS: Inglés de EEUU.", + "langEngb": "Idioma enGB: Inglés británico.", + "osLabel": "Sistema operativo", + "chooseOs": "Elegir sistema operativo", + "windows": "Windows", + "macCatalina": "Mac OS Catalina", + "downloadBtn": "DESCARGAR", + "errorChoose": "Debes escoger un cliente y un sistema operativo.", + "macGuideTitle": "Guía para ejecutar el cliente en mac OS Catalina", + "mac1": "macOS Catalina ya no soporta aplicaciones que trabajan en 32bits, y el cliente se ejecuta en 32bits.", + "mac2": "Siguiendo los pasos a continuación podrás disfrutar NightSpire sin problemas en macOS Catalina.", + "macInstructions": "Instrucciones", + "macStep1": "1 - Descarga e instala CrossOver.", + "macStep2": "2 - Una vez que tengas descargado el cliente, ejecuta CrossOver y haz clic en \"Instalar una aplicación para Windows\".", + "macStep3": "3 - En el campo \"Seleccionar una aplicación para instalar\", busca la descarga, selecciónalo y haz clic en continuar. (No hagas clic en instalar aún).", + "macStep4": "4 - Ve a la pestaña donde dice \"Seleccionar instalador\", haz clic en \"Elegir archivo de instalador\", y ahora busca WoW.exe y selecciónalo.", + "macStep5": "5 - En la pestaña Botella, puedes seleccionar Windows 7 64bits.", + "macStep6": "6 - Ve a la pestaña \"Instalar y finalizar\", haz clic en Instalar, se instalarán todas las fuentes, archivos y Visual Redistributables necesarios que WoW usa en un sistema operativo Windows estándar.", + "macStep7": "7 - Te pedirá instalar y aceptar los FONTS, Microsoft Visual C ++, haz clic en Sí para cada solicitud que aparezca.", + "macStep8": "8 - El cliente se iniciará automáticamente.", + "macStep9": "9 - Una vez que termines y salgas del cliente, haz clic en \"Listo\" en la aplicación CrossOver.", + "macStep10": "10 - La próxima vez que desees volver, abre la aplicación CrossOver, mira el panel izquierdo y selecciona en Botella el WoW que se creó anteriormente, y haz clic en RUN COMMAND, selecciona WoW.exe y haz clic en ¨Guardar comando como iniciador¨, luego haz clic en Abrir.", + "macStep11": "11 - Finalmente, verás el ícono de WoW debajo de la pestaña Botella de WoW, ahora puedes arrastrar el lanzador de WoW al Dock, de esta manera, la próxima vez que quieras entrar, simplemente ejecuta WoW desde el Dock.", + "pageTitle": "Descarga del cliente" + }, + "cookie": { + "dialogLabel": "Consentimiento de cookies", + "title": "Utilizamos cookies", + "description": "Este sitio utiliza cookies propias y de terceros para garantizar el funcionamiento del sitio, analizar el tráfico y ofrecerte publicidad personalizada. Consulta nuestra política de cookies para más información.", + "policyLink": "Política de Cookies", + "catNecessary": "Necesarias", + "descNecessary": "Esenciales para el funcionamiento del sitio. No se pueden desactivar.", + "catAnalytics": "Analíticas", + "descAnalytics": "Nos ayudan a entender cómo usas el sitio para mejorarlo.", + "catMarketing": "Marketing", + "descMarketing": "Se utilizan para mostrarte anuncios relevantes.", + "savePrefs": "Guardar preferencias", + "reject": "Rechazar", + "customize": "Personalizar", + "acceptAll": "Aceptar todas", + "changeConsent": "Cambiar consentimiento", + "revokeConsent": "Retirar consentimiento", + "statusZaraz": "Estado actual (Cloudflare Zaraz Consent API):", + "statusSaved": "Estado actual (preferencia guardada):", + "statusUnavailable": "Cloudflare Zaraz no está disponible en este dominio; aún no hay preferencia guardada.", + "accepted": "Aceptada", + "rejected": "Rechazada", + "alwaysOn": "Siempre activas" + }, + "twofa": { + "errGeneric": "Algo ha salido mal. Por favor intente más tarde.", + "eyeHide": "Ocultar", + "eyeShow": "Mostrar", + "passwordPlaceholder": "Contraseña", + "tokenPlaceholder": "Token de seguridad", + "activating": "Activando 2FA", + "activate": "Activar 2FA", + "step1": "Paso 1) Descarga la aplicación de autenticación:", + "step2": "Paso 2) Escanea este código QR con tu aplicación de autenticación:", + "copyKeyNote": "Si no puedes escanear el código QR copia y pega esta clave en tu aplicación de autenticación:", + "copied": "¡Copiado!", + "copyKey": "Copiar clave", + "step3": "Paso 3) Ingresa el código generado por tu aplicación de autenticación:", + "codePlaceholder": "Código de 6 dígitos", + "verified": "Verificado ✔️", + "verifying": "Verificando...", + "verifyCode": "Verificar código", + "enabledNotice": "La verificación en 2 pasos está activada en esta cuenta.", + "disableInstruction": "Para desactivarla, introduce un código actual de tu aplicación de autenticación.", + "disabled": "2FA desactivado ✔️", + "disabling": "Desactivando...", + "disable": "Desactivar 2FA" + } + }, + "Pay": { + "method": "Forma de pago", + "pd": "Saldo PD", + "stripe": "Tarjeta (Stripe)", + "sumup": "Tarjeta (SumUp)", + "pdCost": "{cost} PD", + "eur": "{price} €", + "balance": "Saldo disponible: {balance} PD", + "insufficient": "Saldo insuficiente ({cost} PD)", + "confirm": "¿Confirmas el pago de {amount}?", + "errors": { + "insufficientPd": "No tienes saldo PD suficiente para este servicio.", + "fulfillFailed": "No se pudo completar el servicio. Se te ha devuelto el saldo PD.", + "notConfigured": "Esta forma de pago no está disponible ahora mismo.", + "invalidRequest": "Solicitud no válida.", + "genericError": "Ha ocurrido un error. Inténtalo de nuevo.", + "insufficientVp": "No tienes saldo PV suficiente para este servicio." + }, + "vp": "Saldo PV", + "vpCost": "{cost} PV", + "insufficientVp": "Saldo insuficiente ({cost} PV)", + "balanceVp": "PV: {balance}" + }, + "Store": { + "title": "Tienda", + "infoTooltip": "- Pasa el cursor por el nombre de un objeto para previsualizar su tooltip.", + "infoDb": "- Puedes hacer clic en los nombres de los objetos para visitarlos en nuestra base de datos. ¡Allí podrás ver en 3D armas, armaduras, monturas y mascotas!", + "choosePlayer": "Escoge el personaje al que se enviarán los objetos", + "selectPlaceholder": "Selecciona un personaje", + "noCharacters": "Aún no tienes personajes en esta cuenta.", + "loading": "Cargando la tienda…", + "quantity": "Cantidad", + "add": "Añadir", + "added": "Añadido", + "addedCount": "Añadido ({n})", + "cartTitle": "Carrito", + "selectedCharacter": "Personaje seleccionado", + "colItem": "Item", + "colQty": "Cant", + "colValue": "Valor", + "remove": "Quitar objeto", + "empty": "Vaciar carrito", + "send": "Enviar", + "sending": "Enviando…", + "cartEmpty": "Tu carrito está vacío.", + "confirm": "¿Enviar los objetos a {character} por {pd} PD y {vp} PV?", + "successMsg": "¡Objetos enviados a {character}! Revisa el correo dentro del juego.", + "errors": { + "insufficientPd": "No tienes suficientes PD para esta compra.", + "insufficientVp": "No tienes suficientes PV para esta compra.", + "deliveryFailed": "No se pudieron enviar los objetos (servidor de juego no disponible). Se te ha devuelto el saldo.", + "partialDelivery": "Solo se pudo enviar parte de la compra (el servidor de juego dejó de responder). Los objetos que sí llegaron están en tu correo del juego; se te ha devuelto el saldo del resto.", + "invalidCharacter": "El personaje no es válido.", + "emptyCart": "Tu carrito está vacío.", + "generic": "Ha ocurrido un error. Inténtalo de nuevo.", + "amountTooLow": "El importe mínimo para pagar con tarjeta es {min} €.", + "missingFields": "Completa el personaje de origen, el de destino y el token de seguridad.", + "invalidDestination": "El nombre del personaje de destino no es válido.", + "invalidSource": "El personaje de origen no pertenece a tu cuenta.", + "destinationNotFound": "El personaje de destino no existe.", + "invalidToken": "El token de seguridad no es válido.", + "notAuthenticated": "Tu sesión ha caducado. Vuelve a iniciar sesión para continuar.", + "invalidRequest": "Solicitud no válida." + }, + "newsTitle": "Novedades", + "newsIntro": "Lista de adiciones realizadas en base a las sugerencias de la comunidad en nuestro foro.", + "newsDate": "Noviembre 2024", + "payMethod": "Forma de pago", + "payBalance": "Saldo PD/PV", + "payStripe": "Tarjeta (Stripe)", + "paySumUp": "Tarjeta (SumUp)", + "minCard": "Mínimo {min} €", + "confirmCard": "¿Pagar {eur} € con tarjeta y enviar los objetos a {character}?", + "amountTooLow": "El importe mínimo para pagar con tarjeta es {min} €.", + "gift": { + "choosePlayer": "Escoge el personaje que enviará el regalo", + "destPlaceholder": "Nombre del personaje destino", + "confirmPlaceholder": "Confirmar nombre del personaje destino", + "tokenPlaceholder": "Token de seguridad", + "show": "Mostrar Regalos", + "showing": "Mostrando regalos", + "errMissing": "Completa el personaje de origen, el de destino y el token de seguridad.", + "errConfirm": "El nombre del personaje destino no coincide con la confirmación.", + "successMsg": "¡Regalo enviado a {character}! Lo recibirá en su correo del juego." + } + }, + "header": { + "armory": "Armería" + }, + "Armory": { + "title": "Armería", + "searchPlaceholder": "Buscar personaje, ítem o hermandad…", + "search": "Buscar", + "tabCharacters": "Personajes", + "tabItems": "Ítems", + "tabGuilds": "Hermandades", + "noResults": "Sin resultados.", + "searchHint": "Escribe al menos 3 caracteres.", + "level": "Nivel", + "itemLevel": "Nivel de objeto", + "members": "Miembros", + "equipment": "Equipo", + "guild": "Hermandad", + "race": "Raza", + "class": "Clase", + "faction": "Facción", + "alliance": "Alianza", + "horde": "Horda", + "online": "Conectado", + "offline": "Desconectado", + "viewProfile": "Ver ficha", + "model3d": "Modelo 3D", + "modelLoading": "Cargando modelo…", + "modelUnavailable": "El modelo 3D no está disponible.", + "rank": "Rango", + "leader": "Líder", + "noEquipment": "Sin equipo visible.", + "backToArmory": "Volver a la armería" + } +} diff --git a/web-next/.bak-armory/middleware.ts b/web-next/.bak-armory/middleware.ts new file mode 100644 index 0000000..3a81c69 --- /dev/null +++ b/web-next/.bak-armory/middleware.ts @@ -0,0 +1,33 @@ +import createMiddleware from 'next-intl/middleware' +import { NextResponse, type NextRequest } from 'next/server' +import { routing } from './i18n/routing' + +const intlMiddleware = createMiddleware(routing) + +// Raíces de idioma: «/es», «/en». Estas SÍ llevan barra final; el resto NO. +const LOCALE_ROOTS = new Set(routing.locales.map((l) => `/${l}`)) + +export default function middleware(request: NextRequest) { + const { pathname } = request.nextUrl + + // 1) Raíz de idioma sin barra → con barra: /es → /es/ + if (LOCALE_ROOTS.has(pathname)) { + const url = new URL(request.url) + url.pathname = `${pathname}/` + return NextResponse.redirect(url) + } + + // 2) Sub-ruta con barra final → sin barra (la raíz /es/ se conserva): /es/x/ → /es/x + if (pathname.length > 1 && pathname.endsWith('/') && !LOCALE_ROOTS.has(pathname.slice(0, -1))) { + const url = new URL(request.url) + url.pathname = pathname.replace(/\/+$/, '') + return NextResponse.redirect(url) + } + + return intlMiddleware(request) +} + +export const config = { + // Aplica a todo salvo /api, estáticos de Next e ipas con extensión. + matcher: ['/((?!api|_next|_vercel|.*\\..*).*)'], +} diff --git a/web-next/.bak-armory/next.config.ts b/web-next/.bak-armory/next.config.ts new file mode 100644 index 0000000..d8b7f6e --- /dev/null +++ b/web-next/.bak-armory/next.config.ts @@ -0,0 +1,21 @@ +import type { NextConfig } from 'next' +import createNextIntlPlugin from 'next-intl/plugin' + +const withNextIntl = createNextIntlPlugin('./i18n/request.ts') + +const nextConfig: NextConfig = { + // Barra final SOLO en la raíz de idioma (/es/, /en/); el resto de rutas SIN + // barra (/es/content-creators). Desactivamos el auto-redirect de Next: la + // normalización la hace el middleware con lógica estricta de pathname. + skipTrailingSlashRedirect: true, + + // Proxy same-origin del visor de modelos de wowhead. El contenido de + // wow.zamimg.com/modelviewer no envía cabeceras CORS, así que el navegador + // bloquea el visor 3D si se pide cross-origin. Sirviéndolo bajo nuestro dominio + // (/modelviewer/*) es same-origin y no hay bloqueo. Ver components/ArmoryModel3D. + async rewrites() { + return [{ source: '/modelviewer/:path*', destination: 'https://wow.zamimg.com/modelviewer/:path*' }] + }, +} + +export default withNextIntl(nextConfig) diff --git a/web-next/.bak-armory/page.tsx b/web-next/.bak-armory/page.tsx new file mode 100644 index 0000000..72621b8 --- /dev/null +++ b/web-next/.bak-armory/page.tsx @@ -0,0 +1,133 @@ +import { notFound } from 'next/navigation' +import { getTranslations, setRequestLocale } from 'next-intl/server' +import { Link } from '@/i18n/navigation' +import { getCharacter, getCharacterEquipment, getCharacterCustomizations } from '@/lib/armory' +import { raceName, className, classColor, factionOf, EQUIP_SLOTS } from '@/lib/wow-data' +import { wowheadUrl, wowheadData } from '@/lib/wowhead' +import { PageShell } from '@/components/PageShell' +import { WowheadRefresh } from '@/components/WowheadRefresh' +import { ArmoryModel3D } from '@/components/ArmoryModel3D' + +export const dynamic = 'force-dynamic' + +export default async function CharacterPage({ + params, +}: { + params: Promise<{ locale: string; guid: string }> +}) { + const { locale, guid } = await params + setRequestLocale(locale) + const t = await getTranslations('Armory') + + const id = Number(guid) + const character = await getCharacter(id) + if (!character) notFound() + const equipment = await getCharacterEquipment(id, locale) + const customizations = await getCharacterCustomizations(id) + const bySlot = new Map(equipment.map((e) => [e.slot, e])) + + const faction = factionOf(character.race) + const factionLabel = faction === 'alliance' ? t('alliance') : faction === 'horde' ? t('horde') : '' + + // Modelo 3D: raza, género y equipo (entry + display; transmog si lo hay). + // Slots de equipo que NO se dibujan en el modelo (cuello, anillos, abalorios): + // se omiten para no pedir metadatos inexistentes (evita 404 en consola). + const HIDDEN_SLOTS = new Set([1, 10, 11, 12, 13]) + // Slot del visor: armadura usa inventory_type; armas por slot de equipo (mano + // principal=21, secundaria=22/23). A distancia solo se ven arco/arma de fuego + // (invType 15/26); las arrojadizas (25) y reliquias (28) no se dibujan → se omiten. + const viewerSlot = (equipSlot: number, invType: number): number => { + if (equipSlot === 15) return 21 + if (equipSlot === 16) return invType === 23 ? 23 : 22 + if (equipSlot === 17) return invType === 15 || invType === 26 ? invType : 0 + return invType + } + const modelEquip = equipment + .filter((e) => !HIDDEN_SLOTS.has(e.slot)) + .map((e) => ({ + slot: viewerSlot(e.slot, e.inventoryType), + display: e.transmogDisplayId ?? e.displayId ?? 0, + })) + .filter((e) => e.slot > 0 && e.display > 0) + + return ( + +
+ +

+ ← {t('backToArmory')} +

+ +
+ {/* Columna izquierda: identidad + modelo 3D */} +
+

+ {character.name} +

+
+ {t('level')} {character.level} · {raceName(character.race, locale)} ·{' '} + {className(character.class, locale)} +
+
+ {factionLabel && {factionLabel}} + + {character.online ? t('online') : t('offline')} + + {character.guildName && character.guildId && ( + + <{character.guildName}> + + )} +
+ +
+ + {/* Columna derecha: equipo */} +
+

{t('equipment')}

+ {equipment.length === 0 ? ( +

{t('noEquipment')}

+ ) : ( +
+ {EQUIP_SLOTS.map(({ slot, es, en }) => { + const item = bySlot.get(slot) + const slotName = locale === 'en' ? en : es + if (!item) { + return ( +
+ {slotName} +
+ ) + } + return ( +
+ + {item.name} + + + {slotName} + {item.itemLevel ? ` · ${item.itemLevel}` : ''} + +
+ ) + })} +
+ )} +
+
+
+
+ ) +} diff --git a/web-next/.bak-armory/wow-data.ts b/web-next/.bak-armory/wow-data.ts new file mode 100644 index 0000000..fa64886 --- /dev/null +++ b/web-next/.bak-armory/wow-data.ts @@ -0,0 +1,67 @@ +// Mapas de datos estáticos de WoW (WotLK 3.4.3): razas, clases, slots de equipo. +// Nombres en ES/EN; el color de clase para la interfaz de la armería. + +export const RACES: Record = { + 1: { es: 'Humano', en: 'Human', faction: 'alliance' }, + 2: { es: 'Orco', en: 'Orc', faction: 'horde' }, + 3: { es: 'Enano', en: 'Dwarf', faction: 'alliance' }, + 4: { es: 'Elfo de la noche', en: 'Night Elf', faction: 'alliance' }, + 5: { es: 'No-muerto', en: 'Undead', faction: 'horde' }, + 6: { es: 'Tauren', en: 'Tauren', faction: 'horde' }, + 7: { es: 'Gnomo', en: 'Gnome', faction: 'alliance' }, + 8: { es: 'Trol', en: 'Troll', faction: 'horde' }, + 10: { es: 'Elfo de sangre', en: 'Blood Elf', faction: 'horde' }, + 11: { es: 'Draenei', en: 'Draenei', faction: 'alliance' }, +} + +export const CLASSES: Record = { + 1: { es: 'Guerrero', en: 'Warrior', color: '#C79C6E' }, + 2: { es: 'Paladín', en: 'Paladin', color: '#F58CBA' }, + 3: { es: 'Cazador', en: 'Hunter', color: '#ABD473' }, + 4: { es: 'Pícaro', en: 'Rogue', color: '#FFF569' }, + 5: { es: 'Sacerdote', en: 'Priest', color: '#FFFFFF' }, + 6: { es: 'Caballero de la Muerte', en: 'Death Knight', color: '#C41F3B' }, + 7: { es: 'Chamán', en: 'Shaman', color: '#0070DE' }, + 8: { es: 'Mago', en: 'Mage', color: '#69CCF0' }, + 9: { es: 'Brujo', en: 'Warlock', color: '#9482C9' }, + 11: { es: 'Druida', en: 'Druid', color: '#FF7D0A' }, +} + +// Slots de equipo 0-18 (EQUIPMENT_SLOT_*). Los que no se muestran (camisa 3, tabardo 18) +// se dejan igual por completitud del modelo 3D. +export const EQUIP_SLOTS: { slot: number; es: string; en: string }[] = [ + { slot: 0, es: 'Cabeza', en: 'Head' }, + { slot: 1, es: 'Cuello', en: 'Neck' }, + { slot: 2, es: 'Hombros', en: 'Shoulders' }, + { slot: 14, es: 'Espalda', en: 'Back' }, + { slot: 4, es: 'Pecho', en: 'Chest' }, + { slot: 3, es: 'Camisa', en: 'Shirt' }, + { slot: 18, es: 'Tabardo', en: 'Tabard' }, + { slot: 8, es: 'Muñecas', en: 'Wrists' }, + { slot: 9, es: 'Manos', en: 'Hands' }, + { slot: 5, es: 'Cintura', en: 'Waist' }, + { slot: 6, es: 'Piernas', en: 'Legs' }, + { slot: 7, es: 'Pies', en: 'Feet' }, + { slot: 10, es: 'Anillo', en: 'Ring' }, + { slot: 11, es: 'Anillo', en: 'Ring' }, + { slot: 12, es: 'Abalorio', en: 'Trinket' }, + { slot: 13, es: 'Abalorio', en: 'Trinket' }, + { slot: 15, es: 'Mano derecha', en: 'Main Hand' }, + { slot: 16, es: 'Mano izquierda', en: 'Off Hand' }, + { slot: 17, es: 'A distancia', en: 'Ranged' }, +] + +export function raceName(id: number, locale: string): string { + const r = RACES[id] + return r ? (locale === 'en' ? r.en : r.es) : `#${id}` +} +export function className(id: number, locale: string): string { + const c = CLASSES[id] + return c ? (locale === 'en' ? c.en : c.es) : `#${id}` +} +export function classColor(id: number): string { + return CLASSES[id]?.color ?? '#ffffff' +} +export function factionOf(race: number): 'alliance' | 'horde' | null { + return RACES[race]?.faction ?? null +} diff --git a/web-next/.bak-armory/wowhead.ts b/web-next/.bak-armory/wowhead.ts new file mode 100644 index 0000000..36fdd36 --- /dev/null +++ b/web-next/.bak-armory/wowhead.ts @@ -0,0 +1,64 @@ +/** + * Enlaces, iconos y tooltips de wowhead (rama WotLK Classic) con el locale de la + * web. Sustituye a la antigua base de datos de ítems (AoWoW en wotlk.ultimowow / + * wotlk.novawow) y a los iconos de otros mirrors: todo pasa por wowhead / zamimg. + * + * El tooltip lo pinta el script global (ver el layout raíz); el idioma del + * tooltip lo determina el SUBDOMINIO del enlace, por eso construimos las URLs + * con el subdominio del locale actual. + * + * Es un módulo puro (sin acceso a BD), así que lo pueden importar tanto los + * Server Components como los Client Components. + */ + +export type WowheadType = 'item' | 'spell' | 'quest' | 'npc' | 'achievement' | 'object' | 'faction' +export type IconSize = 'tiny' | 'small' | 'medium' | 'large' + +// Subdominio de wowhead por locale de la web (www = inglés, por defecto). +// Añadir aquí si se soportan más idiomas (de, fr, ru, pt, it, ko...). +const LOCALE_SUBDOMAIN: Record = { es: 'es', en: 'www' } + +function subdomain(locale: string): string { + return LOCALE_SUBDOMAIN[locale] ?? 'www' +} + +/** URL de wowhead (rama WotLK) para una entidad, en el locale de la web. */ +export function wowheadUrl(type: WowheadType, id: number | string, locale: string): string { + return `https://${subdomain(locale)}.wowhead.com/wotlk/${type}=${id}` +} + +/** Enlace a un ítem en wowhead (WotLK) en el locale de la web. */ +export function wowheadItemUrl(id: number | string, locale: string): string { + return wowheadUrl('item', id, locale) +} + +/** Home de la base de datos WotLK en wowhead (enlace "WOTLK DB"). */ +export function wowheadWotlkHome(locale: string): string { + return `https://${subdomain(locale)}.wowhead.com/wotlk` +} + +/** Icono (de ítem/hechizo/misión) servido por el CDN de wowhead (zamimg). */ +export function wowheadIcon(name: string, size: IconSize = 'large'): string { + const ext = size === 'tiny' ? 'gif' : 'jpg' + return `https://wow.zamimg.com/images/wow/icons/${size}/${name}.${ext}` +} + +// Código de idioma de wowhead para el parámetro `domain` del tooltip. El inglés +// es la base (sin prefijo). El script mapea el 1.er segmento a locale +// ({es:6,fr:2,de:3,...}) y el resto a la versión del juego (wotlk = WRATH). +const LOCALE_WH_CODE: Record = { es: 'es' } + +function wowheadDomain(locale: string): string { + const code = LOCALE_WH_CODE[locale] + return code ? `${code}.wotlk` : 'wotlk' +} + +/** + * Valor del atributo `data-wowhead`, para que el tooltip salga en la rama WotLK + * y EN EL IDIOMA de la web. El `domain` lleva el idioma (p.ej. `es.wotlk`) porque + * el script prioriza este atributo sobre el subdominio del href; sin el idioma + * aquí, el tooltip saldría en inglés aunque el enlace sea es.wowhead.com. + */ +export function wowheadData(type: WowheadType, id: number | string, locale: string): string { + return `${type}=${id}&domain=${wowheadDomain(locale)}` +}