i18n: traducir toda la app (ES + EN) — páginas y componentes con texto hardcodeado
Se externaliza el texto español hardcodeado de ~55 archivos a next-intl y se añaden traducciones al inglés, con paridad de claves es/en. Nuevos namespaces: History, CharService, CharServiceB, Points, Legal, UI, Misc (+ altas en Common/Admin). - Historiales (PD/PV, transacciones, sanciones, seguridad), servicios de personaje (transfer, send-gift, quest, restore-*, change-*, customize, level-up, gold, rename), PD/pagos (d-points, trade, promo, transfer-dp, rename-guild, DPointsTabs), páginas legales (cookies, privacidad, términos, reembolsos, aviso legal, contacto), layout (cabecera, footer, cookies, 2FA, descargas, jugadores, recluta) y páginas varias (home, reino, ayuda, addons, 2falogin). - Textos con markup inline via t.rich; interpolación con ICU. - Componente <NoteLegend/> para la leyenda NOTA/NOTE compartida. - payLabel/confirmText de los servicios de pago traducidos. - Verificado: tsc OK, next build OK, todas las claves t() resuelven en es y en, todos los t.rich casan etiquetas, páginas 200 en /es/ y /en/ sin claves crudas. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
'use client'
|
||||
|
||||
import { useRef, useState } from 'react'
|
||||
import { useTranslations } from 'next-intl'
|
||||
|
||||
// Lista de trackers común a todos los magnet (idéntica en el original).
|
||||
const TRACKERS =
|
||||
@@ -17,14 +18,15 @@ function magnetFor(lang: string): string {
|
||||
return `magnet:?xt=urn:btih:${BTIH[lang]}${TRACKERS}`
|
||||
}
|
||||
|
||||
const LANG_INFO: Record<string, string> = {
|
||||
wotlkeses: 'Idioma esES: Español de España.',
|
||||
wotlkesmx: 'Idioma esMX: Español de Latinoamérica.',
|
||||
wotlkenus: 'Idioma enUS: Inglés de EEUU.',
|
||||
wotlkengb: 'Idioma enGB: Inglés británico.',
|
||||
const LANG_INFO_KEY: Record<string, string> = {
|
||||
wotlkeses: 'clientDownload.langEses',
|
||||
wotlkesmx: 'clientDownload.langEsmx',
|
||||
wotlkenus: 'clientDownload.langEnus',
|
||||
wotlkengb: 'clientDownload.langEngb',
|
||||
}
|
||||
|
||||
export function ClientDownload() {
|
||||
const t = useTranslations('UI')
|
||||
const [lang, setLang] = useState('')
|
||||
const [os, setOs] = useState('')
|
||||
const [error, setError] = useState(false)
|
||||
@@ -45,45 +47,45 @@ export function ClientDownload() {
|
||||
<>
|
||||
<div className="box-content">
|
||||
<div className="title-box-content" id="torrent">
|
||||
<h2>Descarga por Torrent</h2>
|
||||
<h2>{t('clientDownload.torrentTitle')}</h2>
|
||||
</div>
|
||||
<div className="body-box-content justified">
|
||||
<p><span>Información</span></p>
|
||||
<p>- No requiere instalación.</p>
|
||||
<p>- El realmlist ya está configurado.</p>
|
||||
<p>- 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.</p>
|
||||
<p><span>{t('clientDownload.infoLabel')}</span></p>
|
||||
<p>{t('clientDownload.info1')}</p>
|
||||
<p>{t('clientDownload.info2')}</p>
|
||||
<p>{t('clientDownload.info3')}</p>
|
||||
<br />
|
||||
<p><span>Requisitos para la descarga</span></p>
|
||||
<p>Se necesitará un programa que gestione descargas por Torrent y un programa que gestione archivos .rar.</p>
|
||||
<p><span>{t('clientDownload.requirementsLabel')}</span></p>
|
||||
<p>{t('clientDownload.requirementsText')}</p>
|
||||
<ul>
|
||||
<li><a href="https://www.qbittorrent.org/download.php" target="_blank" rel="noopener noreferrer">qBittorrent</a></li>
|
||||
<li><a href="https://www.winrar.es/descargas" target="_blank" rel="noopener noreferrer">WinRAR</a></li>
|
||||
</ul>
|
||||
<p>Adicionalmente, necesitarás que esta página pueda abrir ventanas emergentes.</p>
|
||||
<p>{t('clientDownload.popupNote')}</p>
|
||||
<br />
|
||||
<p><span>Paso a paso:</span></p>
|
||||
<p>Opcional: Si no tienes Winrar, haz clic en <a href="https://www.winrar.es/descargas" target="_blank" rel="noopener noreferrer">WinRAR</a> e instala el programa.</p>
|
||||
<p>1) Haz clic en <a href="https://www.qbittorrent.org/download.php" target="_blank" rel="noopener noreferrer">qBittorrent</a>.</p>
|
||||
<p>2) Descarga la versión adecuada para tu sistema operativo.</p>
|
||||
<p>3) Ejecuta el archivo descargado y realiza la instalacion del programa.</p>
|
||||
<p>4) Ejecuta qBitTorrent.</p>
|
||||
<p>5) Ve a la parte final de esta página y escoge el idioma de tu preferencia.</p>
|
||||
<p>6) Debajo del idioma, escoge el sistema operativo.</p>
|
||||
<p>7) Haz clic en Descargar.</p>
|
||||
<p>8) En la ventana emergente, acepta Abrir qBitTorrent.</p>
|
||||
<p>9) Espera a que qBitTorrent cargue el archivo correspondiente en la ventana de Enlace magnet.</p>
|
||||
<p>10) Haz clic en Aceptar.</p>
|
||||
<p>11) En la ventana de qBitTorrent espera a que la descarga se haya completado.</p>
|
||||
<p>12) Ingresa en la carpeta de descargas de qBitTorrent (Por defecto Descargas).</p>
|
||||
<p>13) Haz clic derecho en el archivo .rar y usa la opción Extraer aquí.</p>
|
||||
<p>14) Ingresa en la carpeta extraída y allí encontrarás el ejecutable para comenzar a jugar.</p>
|
||||
<p>15) Conecta usando tu cuenta de la web, en el campo email no pongas tu email sino tu nombre de cuenta.</p>
|
||||
<p><span>{t('clientDownload.stepByStep')}</span></p>
|
||||
<p>{t.rich('clientDownload.stepOptional', { winrar: (c) => <a href="https://www.winrar.es/descargas" target="_blank" rel="noopener noreferrer">{c}</a> })}</p>
|
||||
<p>{t.rich('clientDownload.step1', { qbit: (c) => <a href="https://www.qbittorrent.org/download.php" target="_blank" rel="noopener noreferrer">{c}</a> })}</p>
|
||||
<p>{t('clientDownload.step2')}</p>
|
||||
<p>{t('clientDownload.step3')}</p>
|
||||
<p>{t('clientDownload.step4')}</p>
|
||||
<p>{t('clientDownload.step5')}</p>
|
||||
<p>{t('clientDownload.step6')}</p>
|
||||
<p>{t('clientDownload.step7')}</p>
|
||||
<p>{t('clientDownload.step8')}</p>
|
||||
<p>{t('clientDownload.step9')}</p>
|
||||
<p>{t('clientDownload.step10')}</p>
|
||||
<p>{t('clientDownload.step11')}</p>
|
||||
<p>{t('clientDownload.step12')}</p>
|
||||
<p>{t('clientDownload.step13')}</p>
|
||||
<p>{t('clientDownload.step14')}</p>
|
||||
<p>{t('clientDownload.step15')}</p>
|
||||
<br />
|
||||
<hr />
|
||||
<br />
|
||||
<div className="centered">
|
||||
<form name="uw-client-dowload" id="uw-client-download" autoComplete="off" onSubmit={handleSubmit}>
|
||||
<p><span>Idioma</span></p>
|
||||
<p><span>{t('clientDownload.languageLabel')}</span></p>
|
||||
<br />
|
||||
<select
|
||||
name="game-language"
|
||||
@@ -92,19 +94,19 @@ export function ClientDownload() {
|
||||
value={lang}
|
||||
onChange={(e) => { setLang(e.target.value); setOs(''); }}
|
||||
>
|
||||
<option value="" disabled>Elegir idioma</option>
|
||||
<option value="wotlkeses">Cliente esES</option>
|
||||
<option value="wotlkesmx">Cliente esMX</option>
|
||||
<option value="wotlkenus">Cliente enUS</option>
|
||||
<option value="wotlkengb">Cliente enGB</option>
|
||||
<option value="" disabled>{t('clientDownload.chooseLanguage')}</option>
|
||||
<option value="wotlkeses">{t('clientDownload.clientEses')}</option>
|
||||
<option value="wotlkesmx">{t('clientDownload.clientEsmx')}</option>
|
||||
<option value="wotlkenus">{t('clientDownload.clientEnus')}</option>
|
||||
<option value="wotlkengb">{t('clientDownload.clientEngb')}</option>
|
||||
</select>
|
||||
|
||||
{lang && (
|
||||
<div id="select-op">
|
||||
<br />
|
||||
<p id="game-info">{LANG_INFO[lang] ?? ' '}</p>
|
||||
<p id="game-info">{lang ? t(LANG_INFO_KEY[lang]) :' '}</p>
|
||||
<br />
|
||||
<p><span>Sistema operativo</span></p>
|
||||
<p><span>{t('clientDownload.osLabel')}</span></p>
|
||||
<br />
|
||||
<select
|
||||
name="operating-system"
|
||||
@@ -113,19 +115,19 @@ export function ClientDownload() {
|
||||
value={os}
|
||||
onChange={(e) => setOs(e.target.value)}
|
||||
>
|
||||
<option value="" disabled>Elegir sistema operativo</option>
|
||||
<option value="windows">Windows</option>
|
||||
<option value="macosc">Mac OS Catalina</option>
|
||||
<option value="" disabled>{t('clientDownload.chooseOs')}</option>
|
||||
<option value="windows">{t('clientDownload.windows')}</option>
|
||||
<option value="macosc">{t('clientDownload.macCatalina')}</option>
|
||||
</select>
|
||||
<br />
|
||||
<button type="submit" className="g-download-button" id="download-c-button">DESCARGAR</button>
|
||||
<button type="submit" className="g-download-button" id="download-c-button">{t('clientDownload.downloadBtn')}</button>
|
||||
</div>
|
||||
)}
|
||||
</form>
|
||||
<br />
|
||||
<hr />
|
||||
<div id="error-message" className="red-form-response">
|
||||
{error ? 'Debes escoger un cliente y un sistema operativo.' : ''}
|
||||
{error ? t('clientDownload.errorChoose') : ''}
|
||||
</div>
|
||||
<br />
|
||||
</div>
|
||||
@@ -134,24 +136,24 @@ export function ClientDownload() {
|
||||
{os === 'macosc' && (
|
||||
<div id="op-info" className="box-content">
|
||||
<div className="title-box-content">
|
||||
<h2>Guía para ejecutar el cliente en mac OS Catalina</h2>
|
||||
<h2>{t('clientDownload.macGuideTitle')}</h2>
|
||||
</div>
|
||||
<div className="body-box-content">
|
||||
<p>macOS Catalina ya no soporta aplicaciones que trabajan en 32bits, y el cliente se ejecuta en 32bits.</p>
|
||||
<p>Siguiendo los pasos a continuación podrás disfrutar UltimoWoW sin problemas en macOS Catalina.</p>
|
||||
<p>{t('clientDownload.mac1')}</p>
|
||||
<p>{t('clientDownload.mac2')}</p>
|
||||
<br />
|
||||
<span>Instrucciones</span>
|
||||
<p>1 - Descarga e instala <a href="https://insmac.org/macosx/3728-crossover-19.html" target="_blank" rel="noopener noreferrer">CrossOver</a>.</p>
|
||||
<p>2 - Una vez que tengas descargado el cliente, ejecuta CrossOver y haz clic en "Instalar una aplicación para Windows".</p>
|
||||
<p>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).</p>
|
||||
<p>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.</p>
|
||||
<p>5 - En la pestaña Botella, puedes seleccionar Windows 7 64bits.</p>
|
||||
<p>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.</p>
|
||||
<p>7 - Te pedirá instalar y aceptar los FONTS, Microsoft Visual C ++, haz clic en Sí para cada solicitud que aparezca.</p>
|
||||
<p>8 - El cliente se iniciará automáticamente.</p>
|
||||
<p>9 - Una vez que termines y salgas del cliente, haz clic en "Listo" en la aplicación CrossOver.</p>
|
||||
<p>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.</p>
|
||||
<p>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.</p>
|
||||
<span>{t('clientDownload.macInstructions')}</span>
|
||||
<p>{t.rich('clientDownload.macStep1', { crossover: (c) => <a href="https://insmac.org/macosx/3728-crossover-19.html" target="_blank" rel="noopener noreferrer">{c}</a> })}</p>
|
||||
<p>{t('clientDownload.macStep2')}</p>
|
||||
<p>{t('clientDownload.macStep3')}</p>
|
||||
<p>{t('clientDownload.macStep4')}</p>
|
||||
<p>{t('clientDownload.macStep5')}</p>
|
||||
<p>{t('clientDownload.macStep6')}</p>
|
||||
<p>{t('clientDownload.macStep7')}</p>
|
||||
<p>{t('clientDownload.macStep8')}</p>
|
||||
<p>{t('clientDownload.macStep9')}</p>
|
||||
<p>{t('clientDownload.macStep10')}</p>
|
||||
<p>{t('clientDownload.macStep11')}</p>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Reference in New Issue
Block a user