Phase 6: Translate User Pages - exchange, trades, invites, profile
- Expand exchange.json with all exchange page strings (page, steps, detailsStep, bookingStep, confirmationStep, priceDisplay) - Create trades.json translation files for es, en, ca - Create invites.json translation files for es, en, ca - Create profile.json translation files for es, en, ca - Translate exchange page and all components (ExchangeDetailsStep, BookingStep, ConfirmationStep, StepIndicator, PriceDisplay) - Translate trades page (titles, sections, buttons, status labels) - Translate invites page (titles, sections, status badges, copy button) - Translate profile page (form labels, hints, placeholders, messages) - Update IntlProvider to load all new namespaces - All frontend tests passing
This commit is contained in:
parent
7dd13292a0
commit
246553c402
22 changed files with 559 additions and 115 deletions
|
|
@ -8,10 +8,70 @@
|
|||
},
|
||||
"direction": {
|
||||
"buy": "COMPRAR BTC",
|
||||
"sell": "VENDRE BTC"
|
||||
"sell": "VENDRE BTC",
|
||||
"buyShort": "Comprar BTC",
|
||||
"sellShort": "Vendre BTC"
|
||||
},
|
||||
"transferMethod": {
|
||||
"onchain": "Onchain",
|
||||
"lightning": "Lightning"
|
||||
},
|
||||
"page": {
|
||||
"title": "Intercanviar Bitcoin",
|
||||
"subtitle": "Compra o ven Bitcoin amb una prima del 5%",
|
||||
"viewExistingTrade": "Veure la teva operació existent →"
|
||||
},
|
||||
"steps": {
|
||||
"details": "Detalls de l'Intercanvi",
|
||||
"booking": "Reservar Cita",
|
||||
"confirm": "Confirmar"
|
||||
},
|
||||
"detailsStep": {
|
||||
"paymentMethod": "Mètode de Pagament",
|
||||
"required": "*",
|
||||
"lightningThreshold": "Els pagaments Lightning només estan disponibles per importants fins a €{max}",
|
||||
"amount": "Quantitat (EUR)",
|
||||
"summaryBuy": "Compres {sats}, vens {eur}",
|
||||
"summarySell": "Compres {eur}, vens {sats}",
|
||||
"continueToBooking": "Continuar a Reserva"
|
||||
},
|
||||
"bookingStep": {
|
||||
"yourExchange": "El Teu Intercanvi",
|
||||
"edit": "Editar",
|
||||
"buy": "Comprar",
|
||||
"sell": "Vendre",
|
||||
"receiveVia": "Rebre via",
|
||||
"sendVia": "Enviar via",
|
||||
"selectDate": "Seleccionar una Data",
|
||||
"existingTradeWarning": "Ja tens una operació reservada en aquest dia. Només pots reservar una operació per dia.",
|
||||
"viewExistingTrade": "Veure la teva operació existent →",
|
||||
"availableSlots": "Espais Disponibles per a",
|
||||
"loadingSlots": "Carregant espais...",
|
||||
"noSlots": "No hi ha espais disponibles per a aquesta data"
|
||||
},
|
||||
"confirmationStep": {
|
||||
"appointment": "Cita",
|
||||
"edit": "Editar",
|
||||
"confirmTrade": "Confirmar Operació",
|
||||
"time": "Hora:",
|
||||
"direction": "Direcció:",
|
||||
"eur": "EUR:",
|
||||
"btc": "BTC:",
|
||||
"rate": "Taxa:",
|
||||
"payment": "Pagament:",
|
||||
"receiveVia": "Rebre via",
|
||||
"sendVia": "Enviar via",
|
||||
"booking": "Reservant...",
|
||||
"priceStale": "Preu Desactualitzat",
|
||||
"confirmBuy": "Confirmar Compra",
|
||||
"confirmSell": "Confirmar Venda",
|
||||
"back": "Enrere"
|
||||
},
|
||||
"priceDisplay": {
|
||||
"loading": "Carregant preu...",
|
||||
"market": "Mercat:",
|
||||
"ourPrice": "El nostre preu:",
|
||||
"updated": "Actualitzat",
|
||||
"stale": "(desactualitzat)"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
17
frontend/locales/ca/invites.json
Normal file
17
frontend/locales/ca/invites.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "Les Meves Invitacions",
|
||||
"subtitle": "Comparteix els teus codis d'invitació amb amics perquè s'uneixin",
|
||||
"noInvites": "Encara no tens invitacions.",
|
||||
"noInvitesHint": "Contacta amb un administrador si necessites codis d'invitació per compartir.",
|
||||
"available": "Disponibles ({count})",
|
||||
"availableHint": "Comparteix aquests enllaços amb les persones que vulguis convidar",
|
||||
"used": "Usades ({count})",
|
||||
"revoked": "Revocades ({count})",
|
||||
"copyLink": "Copiar Enllaç",
|
||||
"copied": "Copiat!",
|
||||
"usedBy": "per {email}",
|
||||
"usedStatus": "Usada",
|
||||
"revokedStatus": "Revocada"
|
||||
}
|
||||
}
|
||||
33
frontend/locales/ca/profile.json
Normal file
33
frontend/locales/ca/profile.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "El Meu Perfil",
|
||||
"subtitle": "Gestiona la teva informació de contacte"
|
||||
},
|
||||
"form": {
|
||||
"email": "Correu Electrònic",
|
||||
"emailHint": "Aquest és el teu correu d'inici de sessió i no es pot canviar aquí.",
|
||||
"invitedBy": "Convidat Per",
|
||||
"invitedByHint": "L'usuari que et va convidar a unir-te.",
|
||||
"readOnly": "Només lectura",
|
||||
"contactDetails": "Detalls de Contacte",
|
||||
"contactDetailsHint": "Aquests són només per a fins de comunicació — no afectaran el teu inici de sessió.",
|
||||
"contactEmail": "Correu de Contacte",
|
||||
"telegram": "Telegram",
|
||||
"signal": "Signal",
|
||||
"nostrNpub": "Nostr (npub)",
|
||||
"saving": "Desant...",
|
||||
"saveChanges": "Desar Canvis"
|
||||
},
|
||||
"messages": {
|
||||
"loadError": "Error en carregar el perfil",
|
||||
"saveSuccess": "Perfil desat amb èxit!",
|
||||
"fixErrors": "Si us plau, corregeix els errors a continuació",
|
||||
"networkError": "Error de xarxa. Si us plau, intenta-ho de nou."
|
||||
},
|
||||
"placeholders": {
|
||||
"contactEmail": "alternate@example.com",
|
||||
"telegram": "@username",
|
||||
"signal": "username.01",
|
||||
"nostrNpub": "npub1..."
|
||||
}
|
||||
}
|
||||
16
frontend/locales/ca/trades.json
Normal file
16
frontend/locales/ca/trades.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "Les Meves Operacions",
|
||||
"subtitle": "Veure i gestionar les teves operacions de Bitcoin",
|
||||
"loadingTrades": "Carregant operacions...",
|
||||
"noTrades": "Encara no tens operacions.",
|
||||
"startTrading": "Començar a operar",
|
||||
"upcoming": "Properes ({count})",
|
||||
"history": "Historial ({count})"
|
||||
},
|
||||
"trade": {
|
||||
"rate": "Taxa:",
|
||||
"cancel": "Cancel·lar",
|
||||
"viewDetails": "Veure Detalls"
|
||||
}
|
||||
}
|
||||
|
|
@ -8,10 +8,70 @@
|
|||
},
|
||||
"direction": {
|
||||
"buy": "BUY BTC",
|
||||
"sell": "SELL BTC"
|
||||
"sell": "SELL BTC",
|
||||
"buyShort": "Buy BTC",
|
||||
"sellShort": "Sell BTC"
|
||||
},
|
||||
"transferMethod": {
|
||||
"onchain": "Onchain",
|
||||
"lightning": "Lightning"
|
||||
},
|
||||
"page": {
|
||||
"title": "Exchange Bitcoin",
|
||||
"subtitle": "Buy or sell Bitcoin with a 5% premium",
|
||||
"viewExistingTrade": "View your existing trade →"
|
||||
},
|
||||
"steps": {
|
||||
"details": "Exchange Details",
|
||||
"booking": "Book Appointment",
|
||||
"confirm": "Confirm"
|
||||
},
|
||||
"detailsStep": {
|
||||
"paymentMethod": "Payment Method",
|
||||
"required": "*",
|
||||
"lightningThreshold": "Lightning payments are only available for amounts up to €{max}",
|
||||
"amount": "Amount (EUR)",
|
||||
"summaryBuy": "You buy {sats}, you sell {eur}",
|
||||
"summarySell": "You buy {eur}, you sell {sats}",
|
||||
"continueToBooking": "Continue to Booking"
|
||||
},
|
||||
"bookingStep": {
|
||||
"yourExchange": "Your Exchange",
|
||||
"edit": "Edit",
|
||||
"buy": "Buy",
|
||||
"sell": "Sell",
|
||||
"receiveVia": "Receive via",
|
||||
"sendVia": "Send via",
|
||||
"selectDate": "Select a Date",
|
||||
"existingTradeWarning": "You already have a trade booked on this day. You can only book one trade per day.",
|
||||
"viewExistingTrade": "View your existing trade →",
|
||||
"availableSlots": "Available Slots for",
|
||||
"loadingSlots": "Loading slots...",
|
||||
"noSlots": "No available slots for this date"
|
||||
},
|
||||
"confirmationStep": {
|
||||
"appointment": "Appointment",
|
||||
"edit": "Edit",
|
||||
"confirmTrade": "Confirm Trade",
|
||||
"time": "Time:",
|
||||
"direction": "Direction:",
|
||||
"eur": "EUR:",
|
||||
"btc": "BTC:",
|
||||
"rate": "Rate:",
|
||||
"payment": "Payment:",
|
||||
"receiveVia": "Receive via",
|
||||
"sendVia": "Send via",
|
||||
"booking": "Booking...",
|
||||
"priceStale": "Price Stale",
|
||||
"confirmBuy": "Confirm Buy",
|
||||
"confirmSell": "Confirm Sell",
|
||||
"back": "Back"
|
||||
},
|
||||
"priceDisplay": {
|
||||
"loading": "Loading price...",
|
||||
"market": "Market:",
|
||||
"ourPrice": "Our price:",
|
||||
"updated": "Updated",
|
||||
"stale": "(stale)"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
17
frontend/locales/en/invites.json
Normal file
17
frontend/locales/en/invites.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "My Invites",
|
||||
"subtitle": "Share your invite codes with friends to let them join",
|
||||
"noInvites": "You don't have any invites yet.",
|
||||
"noInvitesHint": "Contact an admin if you need invite codes to share.",
|
||||
"available": "Available ({count})",
|
||||
"availableHint": "Share these links with people you want to invite",
|
||||
"used": "Used ({count})",
|
||||
"revoked": "Revoked ({count})",
|
||||
"copyLink": "Copy Link",
|
||||
"copied": "Copied!",
|
||||
"usedBy": "by {email}",
|
||||
"usedStatus": "Used",
|
||||
"revokedStatus": "Revoked"
|
||||
}
|
||||
}
|
||||
33
frontend/locales/en/profile.json
Normal file
33
frontend/locales/en/profile.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "My Profile",
|
||||
"subtitle": "Manage your contact information"
|
||||
},
|
||||
"form": {
|
||||
"email": "Email",
|
||||
"emailHint": "This is your login email and cannot be changed here.",
|
||||
"invitedBy": "Invited By",
|
||||
"invitedByHint": "The user who invited you to join.",
|
||||
"readOnly": "Read only",
|
||||
"contactDetails": "Contact Details",
|
||||
"contactDetailsHint": "These are for communication purposes only — they won't affect your login.",
|
||||
"contactEmail": "Contact Email",
|
||||
"telegram": "Telegram",
|
||||
"signal": "Signal",
|
||||
"nostrNpub": "Nostr (npub)",
|
||||
"saving": "Saving...",
|
||||
"saveChanges": "Save Changes"
|
||||
},
|
||||
"messages": {
|
||||
"loadError": "Failed to load profile",
|
||||
"saveSuccess": "Profile saved successfully!",
|
||||
"fixErrors": "Please fix the errors below",
|
||||
"networkError": "Network error. Please try again."
|
||||
},
|
||||
"placeholders": {
|
||||
"contactEmail": "alternate@example.com",
|
||||
"telegram": "@username",
|
||||
"signal": "username.01",
|
||||
"nostrNpub": "npub1..."
|
||||
}
|
||||
}
|
||||
16
frontend/locales/en/trades.json
Normal file
16
frontend/locales/en/trades.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "My Trades",
|
||||
"subtitle": "View and manage your Bitcoin trades",
|
||||
"loadingTrades": "Loading trades...",
|
||||
"noTrades": "You don't have any trades yet.",
|
||||
"startTrading": "Start trading",
|
||||
"upcoming": "Upcoming ({count})",
|
||||
"history": "History ({count})"
|
||||
},
|
||||
"trade": {
|
||||
"rate": "Rate:",
|
||||
"cancel": "Cancel",
|
||||
"viewDetails": "View Details"
|
||||
}
|
||||
}
|
||||
|
|
@ -8,10 +8,70 @@
|
|||
},
|
||||
"direction": {
|
||||
"buy": "COMPRAR BTC",
|
||||
"sell": "VENDER BTC"
|
||||
"sell": "VENDER BTC",
|
||||
"buyShort": "Comprar BTC",
|
||||
"sellShort": "Vender BTC"
|
||||
},
|
||||
"transferMethod": {
|
||||
"onchain": "Onchain",
|
||||
"lightning": "Lightning"
|
||||
},
|
||||
"page": {
|
||||
"title": "Intercambiar Bitcoin",
|
||||
"subtitle": "Compra o vende Bitcoin con una prima del 5%",
|
||||
"viewExistingTrade": "Ver tu operación existente →"
|
||||
},
|
||||
"steps": {
|
||||
"details": "Detalles del Intercambio",
|
||||
"booking": "Reservar Cita",
|
||||
"confirm": "Confirmar"
|
||||
},
|
||||
"detailsStep": {
|
||||
"paymentMethod": "Método de Pago",
|
||||
"required": "*",
|
||||
"lightningThreshold": "Los pagos Lightning solo están disponibles para montos de hasta €{max}",
|
||||
"amount": "Cantidad (EUR)",
|
||||
"summaryBuy": "Compras {sats}, vendes {eur}",
|
||||
"summarySell": "Compras {eur}, vendes {sats}",
|
||||
"continueToBooking": "Continuar a Reserva"
|
||||
},
|
||||
"bookingStep": {
|
||||
"yourExchange": "Tu Intercambio",
|
||||
"edit": "Editar",
|
||||
"buy": "Comprar",
|
||||
"sell": "Vender",
|
||||
"receiveVia": "Recibir vía",
|
||||
"sendVia": "Enviar vía",
|
||||
"selectDate": "Seleccionar una Fecha",
|
||||
"existingTradeWarning": "Ya tienes una operación reservada en este día. Solo puedes reservar una operación por día.",
|
||||
"viewExistingTrade": "Ver tu operación existente →",
|
||||
"availableSlots": "Espacios Disponibles para",
|
||||
"loadingSlots": "Cargando espacios...",
|
||||
"noSlots": "No hay espacios disponibles para esta fecha"
|
||||
},
|
||||
"confirmationStep": {
|
||||
"appointment": "Cita",
|
||||
"edit": "Editar",
|
||||
"confirmTrade": "Confirmar Operación",
|
||||
"time": "Hora:",
|
||||
"direction": "Dirección:",
|
||||
"eur": "EUR:",
|
||||
"btc": "BTC:",
|
||||
"rate": "Tasa:",
|
||||
"payment": "Pago:",
|
||||
"receiveVia": "Recibir vía",
|
||||
"sendVia": "Enviar vía",
|
||||
"booking": "Reservando...",
|
||||
"priceStale": "Precio Desactualizado",
|
||||
"confirmBuy": "Confirmar Compra",
|
||||
"confirmSell": "Confirmar Venta",
|
||||
"back": "Atrás"
|
||||
},
|
||||
"priceDisplay": {
|
||||
"loading": "Cargando precio...",
|
||||
"market": "Mercado:",
|
||||
"ourPrice": "Nuestro precio:",
|
||||
"updated": "Actualizado",
|
||||
"stale": "(desactualizado)"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
17
frontend/locales/es/invites.json
Normal file
17
frontend/locales/es/invites.json
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "Mis Invitaciones",
|
||||
"subtitle": "Comparte tus códigos de invitación con amigos para que se unan",
|
||||
"noInvites": "Aún no tienes invitaciones.",
|
||||
"noInvitesHint": "Contacta con un administrador si necesitas códigos de invitación para compartir.",
|
||||
"available": "Disponibles ({count})",
|
||||
"availableHint": "Comparte estos enlaces con las personas que quieras invitar",
|
||||
"used": "Usadas ({count})",
|
||||
"revoked": "Revocadas ({count})",
|
||||
"copyLink": "Copiar Enlace",
|
||||
"copied": "¡Copiado!",
|
||||
"usedBy": "por {email}",
|
||||
"usedStatus": "Usada",
|
||||
"revokedStatus": "Revocada"
|
||||
}
|
||||
}
|
||||
33
frontend/locales/es/profile.json
Normal file
33
frontend/locales/es/profile.json
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "Mi Perfil",
|
||||
"subtitle": "Gestiona tu información de contacto"
|
||||
},
|
||||
"form": {
|
||||
"email": "Correo Electrónico",
|
||||
"emailHint": "Este es tu correo de inicio de sesión y no se puede cambiar aquí.",
|
||||
"invitedBy": "Invitado Por",
|
||||
"invitedByHint": "El usuario que te invitó a unirte.",
|
||||
"readOnly": "Solo lectura",
|
||||
"contactDetails": "Detalles de Contacto",
|
||||
"contactDetailsHint": "Estos son solo para fines de comunicación — no afectarán tu inicio de sesión.",
|
||||
"contactEmail": "Correo de Contacto",
|
||||
"telegram": "Telegram",
|
||||
"signal": "Signal",
|
||||
"nostrNpub": "Nostr (npub)",
|
||||
"saving": "Guardando...",
|
||||
"saveChanges": "Guardar Cambios"
|
||||
},
|
||||
"messages": {
|
||||
"loadError": "Error al cargar el perfil",
|
||||
"saveSuccess": "¡Perfil guardado exitosamente!",
|
||||
"fixErrors": "Por favor corrige los errores a continuación",
|
||||
"networkError": "Error de red. Por favor intenta de nuevo."
|
||||
},
|
||||
"placeholders": {
|
||||
"contactEmail": "alternate@example.com",
|
||||
"telegram": "@username",
|
||||
"signal": "username.01",
|
||||
"nostrNpub": "npub1..."
|
||||
}
|
||||
}
|
||||
16
frontend/locales/es/trades.json
Normal file
16
frontend/locales/es/trades.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"page": {
|
||||
"title": "Mis Operaciones",
|
||||
"subtitle": "Ver y gestionar tus operaciones de Bitcoin",
|
||||
"loadingTrades": "Cargando operaciones...",
|
||||
"noTrades": "Aún no tienes operaciones.",
|
||||
"startTrading": "Empezar a operar",
|
||||
"upcoming": "Próximas ({count})",
|
||||
"history": "Historial ({count})"
|
||||
},
|
||||
"trade": {
|
||||
"rate": "Tasa:",
|
||||
"cancel": "Cancelar",
|
||||
"viewDetails": "Ver Detalles"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue