Files
telegram-shop/src/i18n/locales/en.json
NW 776d0e8552 fix(bot): remove redundant deposit amount step, add Visa/MC label, Mercuryo auth note, enforce product completeness
- Remove deposit amount-selection step; deposit_wallet_<TYPE> now routes directly to instruction
- Add VISA / Mastercard text to Mercuryo card button (i18n en/es/de)
- Add deposit_important5: Mercuryo 1-payment-without-auth + top-up-reserve warning
- Admin validation: description + photo required on product create/update (products.js, catalogProducts.js)
- Cleanup orphan uploaded files on validation failure (catalogProducts.js)
- Bot guards: fallback to products.no_description / products.no_photo for incomplete products
- Add vitest + 7 purchase edge-case tests (src/__tests__/userProductHandler.test.js)
- Bump version to v1.2.1
2026-07-18 14:28:26 +01:00

230 lines
12 KiB
JSON
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"bot": {
"welcome": "Welcome to the shop! Choose an option:",
"language_select": "🌍 Please select your language:",
"language_changed": "✅ Language changed to {{language}}!",
"error_generic": "Error processing request. Please try again.",
"account_blocked": "⚠️ Your account has been blocked by administrator",
"account_deleted": "⚠️ Your account has been deleted by administrator",
"contact_support": "Contact support"
},
"profile": {
"title": "👤 *Your Profile*",
"not_found": "Profile not found. Please use /start to create one.",
"telegram_id": "📱 Telegram ID",
"location": "📍 Location",
"location_not_set": "Not set",
"stats": "📊 Statistics:",
"total_purchases": "Total Purchases",
"total_spent": "Total Spent",
"active_wallets": "Active Wallets",
"archived_wallets": "Archived Wallets",
"bonus_balance": "Bonus Balance",
"available_balance": "Available Balance",
"member_since": "📅 Member since",
"set_location": "📍 Set Location",
"change_language": "🌐 Change Language",
"delete_account": "❌ Delete Account",
"error_loading": "Error loading profile. Please try again."
},
"products": {
"select_country": "🌍 Select your country:",
"select_city": "🏙 Select city in {{country}}:",
"select_district": "📍 Select district in {{city}}:",
"select_category": "📦 Select category:",
"select_product": "Select a product:",
"no_products": "No products available at the moment.",
"no_products_category": "No products available in this category.",
"no_products_subcategory": "No products available in this subcategory.",
"back_to_countries": "« Back to Countries",
"back_to_cities": "« Back to Cities",
"back_to_subcategories": "« Back to Subcategories",
"back": "« Back",
"product_price": "💰 Price",
"product_description": "📝 Description",
"product_available": "📦 Available",
"product_category": "Category",
"buy_now": "🛒 Buy Now",
"increase": "",
"decrease": "",
"products_in": "📦 Products in {{name}}:",
"error_loading": "Error loading products. Please try again.",
"error_loading_cities": "Error loading cities. Please try again.",
"error_loading_districts": "Error loading districts. Please try again.",
"error_loading_categories": "Error loading categories. Please try again.",
"error_loading_product": "Error loading product details. Please try again.",
"not_found": "Location not found. Returning to previous menu.",
"mono_product": "📦 Digital Product",
"infinite_stock": "∞ Always available",
"no_description": "No description provided",
"no_photo": "No photo available"
},
"purchase": {
"summary": "🛒 Purchase Summary:",
"product": "Product",
"quantity": "Quantity",
"total": "Total",
"pay": "Pay",
"cancel": "« Cancel",
"insufficient_balance": "❌ Insufficient balance. Your current balance is ${{balance}}. You need ${{total}} to complete this purchase.",
"need_wallet": "You need to add a crypto wallet first to make purchases.",
"add_wallet": " Add Wallet",
"top_up_balance": "💰 Top Up Balance",
"not_enough_stock": "❌ Not enough items in stock. Only {{count}} available.",
"not_enough_money": "Not enough money",
"details": "📦 Purchase Details:",
"location": "Location",
"category": "Category",
"private_info": "🔒 Private Information:",
"hidden_location": "Hidden Location",
"coordinates": "Coordinates",
"view_purchase": "View new purchase",
"confirm_received": "I've got it!",
"back_to_list": "« Back to Purchase List",
"history_empty": "Your purchase history is empty.",
"browse_products": "🛍 Browse Products",
"select_purchase": "📦 Select purchase to view detailed information (Page {{page}} of {{total}}):",
"page_back": "« Back (Page {{page}})",
"page_next": "Next » (Page {{page}})",
"page_info": "Page {{current}} of {{total}}",
"no_such_purchase": "No such purchase",
"no_such_product": "No such product",
"purchase_received": "Thank you! Your purchase has been marked as received.",
"admin_notification": "User {{username}} has confirmed receiving purchase #{{purchaseId}}.",
"error_loading": "Error loading purchase history. Please try again.",
"error_loading_details": "Error loading purchase details. Please try again.",
"error_confirming": "Error confirming receipt. Please try again.",
"error_processing": "Error processing purchase. Please try again.",
"invalid_wallet": "Invalid wallet type.",
"invalid_product": "Invalid product.",
"invalid_quantity": "Invalid quantity."
},
"wallet": {
"your_wallets": "💰 *Your Wallets*",
"your_active_wallets": "💰 *Your Active Wallets:*",
"balance": "Balance",
"value": "Value",
"address": "Address",
"network": "Network",
"deposit": "💳 Deposit {{type}}",
"deposit_via_crypto": "💳 Deposit via Crypto",
"select_crypto": "🔐 Select cryptocurrency to generate wallet:",
"wallet_generated": "✅ New wallet generated successfully!",
"wallet_type": "Type",
"previous_archived": " Your previous wallet has been archived.",
"recovery_stored": "⚠️ Important: Your recovery phrase has been securely stored.",
"error_generating": "❌ Error generating wallet. Please try again.",
"no_wallets": "You don't have any wallets yet. Create one first.",
"no_wallets_prefix": "❌ You don't have any wallets yet. Create one first.",
"no_active_wallets": "You don't have any active wallets yet.",
"back_to_balance": "« Back to Balance",
"back": "« Back",
"invalid_wallet_type": "Invalid wallet type.",
"user_not_found": "User not found.",
"profile_not_found": "Profile not found. Please use /start to create one.",
"profile_not_found_short": "Profile not found.",
"error_loading": "Error loading wallets. Please try again.",
"error_loading_balance": "Error loading balance. Please try again.",
"error_loading_archived": "Error loading archived wallets. Please try again.",
"error_loading_history": "Error loading transaction history. Please try again.",
"error_refreshing_balances": "❌ Error refreshing balances.",
"error_refreshing_balances_retry": "❌ Error refreshing balances. Please try again.",
"error_deposit_instructions": "Error creating deposit instructions. Please try again.",
"error_copying_address": "Error copying address.",
"add_crypto_wallet": " Add Crypto Wallet",
"top_up": "💸 Top Up",
"refresh_balance": "🔄 Refresh Balance",
"refreshing_balances": "🔄 Refreshing balances...",
"archived_wallets_count": "📁 Archived Wallets ({{count}})",
"archived_wallets_title": "📁 *Archived Wallets:*",
"no_archived_wallets": "No archived wallets found.",
"archived_date": "Archived",
"total_crypto_balance": "📊 *Total Crypto Balance:*",
"bonus_balance_label": "🎁 *Bonus Balance:*",
"available_balance_label": "💰 *Available Balance:*",
"total_type": "📊 *Total {{type}}:*",
"amount": "Amount",
"total_archived_value": "💰 *Total Value of Archived Wallets:*",
"transaction_history": "📊 Transaction History",
"transaction_history_title": "📊 *Transaction History:*",
"recent_transactions": "📊 *Recent Transactions:*",
"no_transactions": "No transactions found.",
"tx_amount": "💰 Amount",
"tx_hash": "🔗 TX Hash",
"tx_date": "🕒 Date",
"tx_wallet_type": "💼 Wallet Type",
"previous_page": "⬅️ Previous",
"next_page": "➡️ Next",
"wallet_not_found": "Wallet not found. Please try again.",
"wallet_not_found_short": "Wallet not found.",
"deposit_select_gateway": "💳 *Deposit via Crypto*\n\nSelect the wallet you want to top up:",
"deposit_title": "💳 *Deposit {{type}}*",
"deposit_instructions_title": "📋 *Step\\-by\\-step instructions:*",
"deposit_step1": "1⃣ Tap *Copy Address* below to copy your wallet address",
"deposit_step2": "2⃣ Open Mercuryo via the button below and enter your desired amount",
"deposit_step3": "3⃣ Paste the copied address as the receiving wallet",
"deposit_step4": "4⃣ Select the correct currency: *{{type}}* and enter your desired amount",
"deposit_step5": "5⃣ Complete the payment with your bank card",
"deposit_step6": "6⃣ Crypto will arrive in your wallet within 5\\-30 minutes",
"deposit_your_address": "🔐 *Your {{type}} wallet address:*",
"deposit_important_title": "⚠️ *Important:*",
"deposit_important1": "• Double\\-check the wallet address before confirming",
"deposit_important2": "• Make sure you select the correct currency in Mercuryo",
"deposit_important3": "• Email \\+ phone may be required by Mercuryo for verification",
"deposit_important4": "• If crypto doesn't arrive within 30 min \\— contact Mercuryo support",
"deposit_important5": "• Without authorization, Mercuryo allows only 1 payment. Then Mercuryo will request authorization & identity verification. Top up your balance with a reserve in one go.",
"deposit_open_mercuryo": "💳 Pay with Card (VISA / Mastercard)",
"deposit_pay_crypto": "💰 Pay with Crypto",
"deposit_crypto_title": "💳 *Deposit {{type}} via Crypto*",
"deposit_crypto_address": "🔐 *Your {{type}} wallet address:*",
"deposit_crypto_instruction": "Send the desired amount in USD in {{type}} to the address above. The QR code contains the payment address.",
"deposit_crypto_scan_qr": "📱 Scan the QR code below to get the wallet address",
"deposit_copy_address": "📋 Copy Address",
"deposit_choose_different": "💸 Choose Different Wallet",
"deposit_wallet_address": "{{type}} wallet address:",
"back_to_deposit": "« Back to Deposit",
"deposit_address_sent": "📋 {{type}} address sent! Copy it from the message below.",
"network_erc20": "Ethereum Network (ERC-20)",
"network_btc": "Bitcoin Network",
"network_ltc": "Litecoin Network",
"network_eth": "Ethereum Network",
"network_unknown": "Unknown Network"
},
"location": {
"select_country": "🌍 Select your country:",
"select_city": "🏙 Select city in {{country}}:",
"select_district": "📍 Select district in {{city}}:",
"no_locations": "No locations available yet.",
"back_to_profile": "« Back to Profile",
"back_to_countries": "« Back to Countries",
"location_updated": "✅ Location updated successfully!",
"country": "Country",
"city": "City",
"district": "District",
"error_loading_countries": "Error loading countries. Please try again.",
"error_loading_cities": "Error loading cities. Please try again.",
"error_loading_districts": "Error loading districts. Please try again.",
"error_updating": "Error updating location. Please try again."
},
"deletion": {
"confirm_title": "⚠️ Are you sure you want to delete your account?",
"confirm_body": "This action will:\n- Delete all user data\n- Remove all wallets\n- Erase purchase history\n\nThis action cannot be undone!",
"confirm_button": "✅ Confirm Delete",
"cancel_button": "❌ Cancel",
"deleted": "⚠️ Your account has been successfully deleted",
"error_processing": "Error processing delete request. Please try again.",
"error_deleting": "Error deleting user. Please try again."
},
"keyboard": {
"products": "📦 Products",
"profile": "👤 Profile",
"purchases": "🛍 Purchases",
"wallets": "💰 Wallets",
"manage_products": "📦 Manage Products",
"manage_users": "👥 Manage Users",
"manage_locations": "📍 Manage Locations",
"database_backup": "💾 Database Backup",
"manage_wallets": "💰 Manage Wallets"
}
}