- Register shop_district_ (handleDistrictBack) + shop_subcategory_ (handleSubcategorySelection) in routes.js — Back button in empty categories now works - state.location pipe-delimited with encodeURIComponent — multi-word names (Saint Petersburg) no longer break nav - answerCallbackQuery moved to start of callback handling — no stuck spinner - Empty city fallback (district_unknown) in Select district - Guard against stale underscore-format state.location - 48 tests pass; bump v1.2.4
234 lines
13 KiB
JSON
234 lines
13 KiB
JSON
{
|
||
"bot": {
|
||
"welcome": "¡Bienvenido a la tienda! Elige una opción:",
|
||
"language_select": "🌍 Por favor, selecciona tu idioma:",
|
||
"language_changed": "✅ ¡Idioma cambiado a {{language}}!",
|
||
"error_generic": "Error al procesar la solicitud. Inténtalo de nuevo.",
|
||
"account_blocked": "⚠️ Tu cuenta ha sido bloqueada por el administrador",
|
||
"account_deleted": "⚠️ Tu cuenta ha sido eliminada por el administrador",
|
||
"contact_support": "Contactar soporte"
|
||
},
|
||
"profile": {
|
||
"title": "👤 *Tu Perfil*",
|
||
"not_found": "Perfil no encontrado. Usa /start para crear uno.",
|
||
"telegram_id": "📱 Telegram ID",
|
||
"location": "📍 Ubicación",
|
||
"location_not_set": "No establecida",
|
||
"stats": "📊 Estadísticas:",
|
||
"total_purchases": "Compras totales",
|
||
"total_spent": "Total gastado",
|
||
"active_wallets": "Billeteras activas",
|
||
"archived_wallets": "Billeteras archivadas",
|
||
"bonus_balance": "Saldo de bonificación",
|
||
"available_balance": "Saldo disponible",
|
||
"member_since": "📅 Miembro desde",
|
||
"set_location": "📍 Establecer ubicación",
|
||
"change_language": "🌐 Cambiar idioma",
|
||
"delete_account": "❌ Eliminar cuenta",
|
||
"error_loading": "Error al cargar perfil. Inténtalo de nuevo."
|
||
},
|
||
"products": {
|
||
"select_country": "🌍 Selecciona tu país:",
|
||
"select_city": "🏙 Selecciona ciudad en {{country}}:",
|
||
"select_district": "📍 Selecciona distrito en {{city}}:",
|
||
"select_category": "📦 Selecciona categoría:",
|
||
"select_product": "Selecciona un producto:",
|
||
"no_products": "No hay productos disponibles en este momento.",
|
||
"no_products_category": "No hay productos disponibles en esta categoría.",
|
||
"no_products_subcategory": "No hay productos disponibles en esta subcategoría.",
|
||
"no_categories": "No hay productos disponibles en este distrito.",
|
||
"back_to_countries": "« Volver a países",
|
||
"back_to_cities": "« Volver a ciudades",
|
||
"back_to_subcategories": "« Volver a subcategorías",
|
||
"back": "« Volver",
|
||
"product_price": "💰 Precio",
|
||
"product_description": "📝 Descripción",
|
||
"product_available": "📦 Disponibles",
|
||
"product_category": "Categoría",
|
||
"buy_now": "🛒 Comprar ahora",
|
||
"increase": "➕",
|
||
"decrease": "➖",
|
||
"products_in": "📦 Productos en {{name}}:",
|
||
"error_loading": "Error al cargar productos. Inténtalo de nuevo.",
|
||
"error_loading_cities": "Error al cargar ciudades. Inténtalo de nuevo.",
|
||
"error_loading_districts": "Error al cargar distritos. Inténtalo de nuevo.",
|
||
"error_loading_categories": "Error al cargar categorías. Inténtalo de nuevo.",
|
||
"error_loading_product": "Error al cargar detalles del producto. Inténtalo de nuevo.",
|
||
"not_found": "Ubicación no encontrada. Volviendo al menú anterior.",
|
||
"location_disabled": "Esta ubicación ya no está disponible.",
|
||
"back_to_main": "🏠 Menú Principal",
|
||
"mono_product": "📦 Producto Digital",
|
||
"infinite_stock": "∞ Siempre disponible",
|
||
"no_description": "Sin descripción",
|
||
"no_photo": "Sin foto disponible",
|
||
"district_unknown": "Desconocido"
|
||
},
|
||
"purchase": {
|
||
"summary": "🛒 Resumen de compra:",
|
||
"product": "Producto",
|
||
"quantity": "Cantidad",
|
||
"total": "Total",
|
||
"pay": "Pagar",
|
||
"cancel": "« Cancelar",
|
||
"insufficient_balance": "❌ Saldo insuficiente. Tu saldo actual es ${{balance}}. Necesitas ${{total}} para completar esta compra.",
|
||
"need_wallet": "Necesitas agregar una billetera cripto primero para hacer compras.",
|
||
"add_wallet": "➕ Agregar billetera",
|
||
"top_up_balance": "💰 Recargar saldo",
|
||
"not_enough_stock": "❌ No hay suficientes unidades en stock. Solo {{count}} disponibles.",
|
||
"not_enough_money": "Dinero insuficiente",
|
||
"details": "📦 Detalles de la compra:",
|
||
"location": "Ubicación",
|
||
"category": "Categoría",
|
||
"private_info": "🔒 Información privada:",
|
||
"hidden_location": "Ubicación oculta",
|
||
"coordinates": "Coordenadas",
|
||
"view_purchase": "Ver nueva compra",
|
||
"confirm_received": "¡Lo recibí!",
|
||
"back_to_list": "« Volver a la lista de compras",
|
||
"history_empty": "Tu historial de compras está vacío.",
|
||
"browse_products": "🛍 Ver productos",
|
||
"select_purchase": "📦 Selecciona una compra para ver detalles (Página {{page}} de {{total}}):",
|
||
"page_back": "« Anterior (Pág. {{page}})",
|
||
"page_next": "Siguiente » (Pág. {{page}})",
|
||
"page_info": "Pág. {{current}} de {{total}}",
|
||
"no_such_purchase": "No existe esa compra",
|
||
"no_such_product": "No existe ese producto",
|
||
"purchase_received": "¡Gracias! Tu compra ha sido marcada como recibida.",
|
||
"admin_notification": "El usuario {{username}} ha confirmado recibir la compra #{{purchaseId}}.",
|
||
"error_loading": "Error al cargar historial de compras. Inténtalo de nuevo.",
|
||
"error_loading_details": "Error al cargar detalles de la compra. Inténtalo de nuevo.",
|
||
"error_confirming": "Error al confirmar recepción. Inténtalo de nuevo.",
|
||
"error_processing": "Error al procesar la compra. Inténtalo de nuevo.",
|
||
"invalid_wallet": "Tipo de billetera inválido.",
|
||
"invalid_product": "Producto inválido.",
|
||
"invalid_quantity": "Cantidad inválida."
|
||
},
|
||
"wallet": {
|
||
"your_wallets": "💰 *Tus billeteras*",
|
||
"your_active_wallets": "💰 *Tus billeteras activas:*",
|
||
"balance": "Saldo",
|
||
"value": "Valor",
|
||
"address": "Dirección",
|
||
"network": "Red",
|
||
"deposit": "💳 Depositar {{type}}",
|
||
"deposit_via_crypto": "💳 Depositar vía Cripto",
|
||
"select_crypto": "🔐 Selecciona criptomoneda para generar billetera:",
|
||
"wallet_generated": "✅ ¡Nueva billetera generada exitosamente!",
|
||
"wallet_type": "Tipo",
|
||
"previous_archived": "ℹ️ Tu billetera anterior ha sido archivada.",
|
||
"recovery_stored": "⚠️ Importante: Tu frase de recuperación ha sido almacenada de forma segura.",
|
||
"error_generating": "❌ Error al generar billetera. Inténtalo de nuevo.",
|
||
"no_wallets": "Aún no tienes billeteras. Crea una primero.",
|
||
"no_wallets_prefix": "❌ Aún no tienes billeteras. Crea una primero.",
|
||
"no_active_wallets": "Aún no tienes billeteras activas.",
|
||
"back_to_balance": "« Volver al saldo",
|
||
"back": "« Volver",
|
||
"invalid_wallet_type": "Tipo de billetera inválido.",
|
||
"user_not_found": "Usuario no encontrado.",
|
||
"profile_not_found": "Perfil no encontrado. Usa /start para crear uno.",
|
||
"profile_not_found_short": "Perfil no encontrado.",
|
||
"error_loading": "Error al cargar billeteras. Inténtalo de nuevo.",
|
||
"error_loading_balance": "Error al cargar saldo. Inténtalo de nuevo.",
|
||
"error_loading_archived": "Error al cargar billeteras archivadas. Inténtalo de nuevo.",
|
||
"error_loading_history": "Error al cargar historial de transacciones. Inténtalo de nuevo.",
|
||
"error_refreshing_balances": "❌ Error al actualizar saldos.",
|
||
"error_refreshing_balances_retry": "❌ Error al actualizar saldos. Inténtalo de nuevo.",
|
||
"error_deposit_instructions": "Error al crear instrucciones de depósito. Inténtalo de nuevo.",
|
||
"error_copying_address": "Error al copiar dirección.",
|
||
"add_crypto_wallet": "➕ Agregar billetera cripto",
|
||
"top_up": "💸 Recargar",
|
||
"refresh_balance": "🔄 Actualizar saldo",
|
||
"refreshing_balances": "🔄 Actualizando saldos...",
|
||
"archived_wallets_count": "📁 Billeteras archivadas ({{count}})",
|
||
"archived_wallets_title": "📁 *Billeteras archivadas:*",
|
||
"no_archived_wallets": "No se encontraron billeteras archivadas.",
|
||
"archived_date": "Archivada",
|
||
"total_crypto_balance": "📊 *Saldo total cripto:*",
|
||
"bonus_balance_label": "🎁 *Saldo de bonificación:*",
|
||
"available_balance_label": "💰 *Saldo disponible:*",
|
||
"total_type": "📊 *Total {{type}}:*",
|
||
"amount": "Cantidad",
|
||
"total_archived_value": "💰 *Valor total de billeteras archivadas:*",
|
||
"transaction_history": "📊 Historial de transacciones",
|
||
"transaction_history_title": "📊 *Historial de transacciones:*",
|
||
"recent_transactions": "📊 *Transacciones recientes:*",
|
||
"no_transactions": "No se encontraron transacciones.",
|
||
"tx_amount": "💰 Cantidad",
|
||
"tx_hash": "🔗 TX Hash",
|
||
"tx_date": "🕒 Fecha",
|
||
"tx_wallet_type": "💼 Tipo de billetera",
|
||
"previous_page": "⬅️ Anterior",
|
||
"next_page": "➡️ Siguiente",
|
||
"wallet_not_found": "Billetera no encontrada. Inténtalo de nuevo.",
|
||
"wallet_not_found_short": "Billetera no encontrada.",
|
||
"deposit_select_gateway": "💳 *Depositar vía Cripto*\n\nSelecciona la billetera que quieres recargar:",
|
||
"deposit_title": "💳 *Depositar {{type}}*",
|
||
"deposit_instructions_title": "📋 *Instrucciones paso a paso:*",
|
||
"deposit_step1": "1️⃣ Toca *Copiar dirección* abajo para copiar tu dirección de billetera",
|
||
"deposit_step2": "2️⃣ Abre Mercuryo con el botón de abajo e ingresa la cantidad deseada",
|
||
"deposit_step3": "3️⃣ Pega la dirección copiada como billetera receptora",
|
||
"deposit_step4": "4️⃣ Selecciona la moneda correcta: *{{type}}* e ingresa la cantidad deseada",
|
||
"deposit_step5": "5️⃣ Paga con tu tarjeta bancaria",
|
||
"deposit_step6": "6️⃣ Las criptomonedas llegarán a tu billetera en 5\\-30 minutos",
|
||
"deposit_your_address": "🔐 *Tu dirección de billetera {{type}}:*",
|
||
"deposit_important_title": "⚠️ *Importante:*",
|
||
"deposit_important1": "• Verifica dos veces la dirección de la billetera antes de confirmar",
|
||
"deposit_important2": "• Asegúrate de seleccionar la moneda correcta en Mercuryo",
|
||
"deposit_important3": "• Correo \\+ teléfono pueden ser requeridos por Mercuryo para verificación",
|
||
"deposit_important4": "• Si las criptomonedas no llegan en 30 min \\— contacta al soporte de Mercuryo",
|
||
"deposit_important5": "• Sin autorización, Mercuryo permite solo 1 pago. Luego Mercuryo pedirá autorización y verificación de identidad. Recarga tu saldo con reserva de una sola vez.",
|
||
"deposit_open_mercuryo": "💳 Pagar con Tarjeta (VISA / Mastercard)",
|
||
"deposit_pay_crypto": "💰 Pagar con Cripto",
|
||
"deposit_crypto_title": "💳 *Depositar {{type}} vía Cripto*",
|
||
"deposit_crypto_address": "🔐 *Tu dirección de billetera {{type}}:*",
|
||
"deposit_crypto_instruction": "Envía la cantidad deseada en USD en {{type}} a la dirección de arriba. El código QR contiene la dirección de pago.",
|
||
"deposit_crypto_scan_qr": "📱 Escanea el código QR de abajo para obtener la dirección de la billetera",
|
||
"deposit_copy_address": "📋 Copiar dirección",
|
||
"deposit_choose_different": "💸 Elegir otra billetera",
|
||
"deposit_wallet_address": "Dirección de billetera {{type}}:",
|
||
"back_to_deposit": "« Volver al depósito",
|
||
"deposit_address_sent": "📋 ¡Dirección {{type}} enviada! Cópiala del mensaje de abajo.",
|
||
"network_erc20": "Red Ethereum (ERC-20)",
|
||
"network_btc": "Red Bitcoin",
|
||
"network_ltc": "Red Litecoin",
|
||
"network_eth": "Red Ethereum",
|
||
"network_unknown": "Red desconocida"
|
||
},
|
||
"location": {
|
||
"select_country": "🌍 Selecciona tu país:",
|
||
"select_city": "🏙 Selecciona ciudad en {{country}}:",
|
||
"select_district": "📍 Selecciona distrito en {{city}}:",
|
||
"no_locations": "No hay ubicaciones disponibles aún.",
|
||
"back_to_profile": "« Volver al perfil",
|
||
"back_to_countries": "« Volver a países",
|
||
"location_updated": "✅ ¡Ubicación actualizada exitosamente!",
|
||
"country": "País",
|
||
"city": "Ciudad",
|
||
"district": "Distrito",
|
||
"error_loading_countries": "Error al cargar países. Inténtalo de nuevo.",
|
||
"error_loading_cities": "Error al cargar ciudades. Inténtalo de nuevo.",
|
||
"error_loading_districts": "Error al cargar distritos. Inténtalo de nuevo.",
|
||
"error_updating": "Error al actualizar ubicación. Inténtalo de nuevo."
|
||
},
|
||
"deletion": {
|
||
"confirm_title": "⚠️ ¿Estás seguro de que quieres eliminar tu cuenta?",
|
||
"confirm_body": "Esta acción:\n- Eliminará todos los datos de usuario\n- Eliminará todas las billeteras\n- Borrará el historial de compras\n\n¡Esta acción no se puede deshacer!",
|
||
"confirm_button": "✅ Confirmar eliminación",
|
||
"cancel_button": "❌ Cancelar",
|
||
"deleted": "⚠️ Tu cuenta ha sido eliminada exitosamente",
|
||
"error_processing": "Error al procesar la solicitud de eliminación. Inténtalo de nuevo.",
|
||
"error_deleting": "Error al eliminar usuario. Inténtalo de nuevo."
|
||
},
|
||
"keyboard": {
|
||
"products": "📦 Productos",
|
||
"profile": "👤 Perfil",
|
||
"purchases": "🛍 Compras",
|
||
"wallets": "💰 Billeteras",
|
||
"manage_products": "📦 Gestionar productos",
|
||
"manage_users": "👥 Gestionar usuarios",
|
||
"manage_locations": "📍 Gestionar ubicaciones",
|
||
"database_backup": "💾 Respaldo de base de datos",
|
||
"manage_wallets": "💰 Gestionar billeteras"
|
||
}
|
||
}
|