refactor: complete JS i18n migration for confirm dialogs and toast messages
Migrate 34 hardcoded user-facing strings to use I18n.t() for translation: - CMS: media file operations (5 strings) - Marketplace: Letzshop integration (16 strings) - Messaging: notifications, messages, email templates (5 strings) - Tenancy: platform modules, menu config, theme (5 strings) - Core: menu config, settings, storefront cart (5 strings) - Catalog: product creation (3 strings) - Utils: clipboard operations (2 strings) Added confirmations and messages keys to module locale files. Added I18n.loadModule() calls to JS files that were missing them. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -135,257 +135,6 @@
|
||||
"account": "Account",
|
||||
"wishlist": "Wishlist"
|
||||
},
|
||||
"dashboard": {
|
||||
"title": "Dashboard",
|
||||
"welcome": "Welcome back",
|
||||
"overview": "Overview",
|
||||
"quick_stats": "Quick Stats",
|
||||
"recent_activity": "Recent Activity",
|
||||
"total_products": "Total Products",
|
||||
"total_orders": "Total Orders",
|
||||
"total_customers": "Total Customers",
|
||||
"total_revenue": "Total Revenue",
|
||||
"active_products": "Active Products",
|
||||
"pending_orders": "Pending Orders",
|
||||
"new_customers": "New Customers",
|
||||
"today": "Today",
|
||||
"this_week": "This Week",
|
||||
"this_month": "This Month",
|
||||
"this_year": "This Year",
|
||||
"error_loading": "Error loading dashboard",
|
||||
"no_data": "No data available"
|
||||
},
|
||||
"products": {
|
||||
"title": "Products",
|
||||
"product": "Product",
|
||||
"add_product": "Add Product",
|
||||
"edit_product": "Edit Product",
|
||||
"delete_product": "Delete Product",
|
||||
"product_name": "Product Name",
|
||||
"product_code": "Product Code",
|
||||
"sku": "SKU",
|
||||
"price": "Price",
|
||||
"sale_price": "Sale Price",
|
||||
"cost": "Cost",
|
||||
"stock": "Stock",
|
||||
"in_stock": "In Stock",
|
||||
"out_of_stock": "Out of Stock",
|
||||
"low_stock": "Low Stock",
|
||||
"availability": "Availability",
|
||||
"available": "Available",
|
||||
"unavailable": "Unavailable",
|
||||
"brand": "Brand",
|
||||
"category": "Category",
|
||||
"categories": "Categories",
|
||||
"image": "Image",
|
||||
"images": "Images",
|
||||
"main_image": "Main Image",
|
||||
"gallery": "Gallery",
|
||||
"weight": "Weight",
|
||||
"dimensions": "Dimensions",
|
||||
"color": "Color",
|
||||
"size": "Size",
|
||||
"material": "Material",
|
||||
"condition": "Condition",
|
||||
"new": "New",
|
||||
"used": "Used",
|
||||
"refurbished": "Refurbished",
|
||||
"no_products": "No products found",
|
||||
"search_products": "Search products...",
|
||||
"filter_by_category": "Filter by category",
|
||||
"filter_by_status": "Filter by status",
|
||||
"sort_by": "Sort by",
|
||||
"sort_newest": "Newest",
|
||||
"sort_oldest": "Oldest",
|
||||
"sort_price_low": "Price: Low to High",
|
||||
"sort_price_high": "Price: High to Low",
|
||||
"sort_name_az": "Name: A-Z",
|
||||
"sort_name_za": "Name: Z-A"
|
||||
},
|
||||
"orders": {
|
||||
"title": "Orders",
|
||||
"order": "Order",
|
||||
"order_id": "Order ID",
|
||||
"order_number": "Order Number",
|
||||
"order_date": "Order Date",
|
||||
"order_status": "Order Status",
|
||||
"order_details": "Order Details",
|
||||
"order_items": "Order Items",
|
||||
"order_total": "Order Total",
|
||||
"subtotal": "Subtotal",
|
||||
"shipping": "Shipping",
|
||||
"tax": "Tax",
|
||||
"discount": "Discount",
|
||||
"customer": "Customer",
|
||||
"shipping_address": "Shipping Address",
|
||||
"billing_address": "Billing Address",
|
||||
"payment_method": "Payment Method",
|
||||
"payment_status": "Payment Status",
|
||||
"tracking": "Tracking",
|
||||
"tracking_number": "Tracking Number",
|
||||
"carrier": "Carrier",
|
||||
"no_orders": "No orders found",
|
||||
"search_orders": "Search orders...",
|
||||
"filter_by_status": "Filter by status",
|
||||
"status_pending": "Pending",
|
||||
"status_processing": "Processing",
|
||||
"status_shipped": "Shipped",
|
||||
"status_delivered": "Delivered",
|
||||
"status_cancelled": "Cancelled",
|
||||
"status_refunded": "Refunded",
|
||||
"status_confirmed": "Confirmed",
|
||||
"status_rejected": "Rejected",
|
||||
"confirm_order": "Confirm Order",
|
||||
"reject_order": "Reject Order",
|
||||
"set_tracking": "Set Tracking",
|
||||
"view_details": "View Details"
|
||||
},
|
||||
"customers": {
|
||||
"title": "Customers",
|
||||
"customer": "Customer",
|
||||
"add_customer": "Add Customer",
|
||||
"edit_customer": "Edit Customer",
|
||||
"customer_name": "Customer Name",
|
||||
"customer_email": "Customer Email",
|
||||
"customer_phone": "Customer Phone",
|
||||
"customer_number": "Customer Number",
|
||||
"first_name": "First Name",
|
||||
"last_name": "Last Name",
|
||||
"company": "Company",
|
||||
"total_orders": "Total Orders",
|
||||
"total_spent": "Total Spent",
|
||||
"last_order": "Last Order",
|
||||
"registered": "Registered",
|
||||
"no_customers": "No customers found",
|
||||
"search_customers": "Search customers..."
|
||||
},
|
||||
"inventory": {
|
||||
"title": "Inventory",
|
||||
"stock_level": "Stock Level",
|
||||
"quantity": "Quantity",
|
||||
"reorder_point": "Reorder Point",
|
||||
"adjust_stock": "Adjust Stock",
|
||||
"stock_in": "Stock In",
|
||||
"stock_out": "Stock Out",
|
||||
"transfer": "Transfer",
|
||||
"history": "History",
|
||||
"low_stock_alert": "Low Stock Alert",
|
||||
"out_of_stock_alert": "Out of Stock Alert"
|
||||
},
|
||||
"marketplace": {
|
||||
"title": "Marketplace",
|
||||
"import": "Import",
|
||||
"export": "Export",
|
||||
"sync": "Sync",
|
||||
"source": "Source",
|
||||
"source_url": "Source URL",
|
||||
"import_products": "Import Products",
|
||||
"start_import": "Start Import",
|
||||
"importing": "Importing...",
|
||||
"import_complete": "Import Complete",
|
||||
"import_failed": "Import Failed",
|
||||
"import_history": "Import History",
|
||||
"job_id": "Job ID",
|
||||
"started_at": "Started At",
|
||||
"completed_at": "Completed At",
|
||||
"duration": "Duration",
|
||||
"imported_count": "Imported",
|
||||
"error_count": "Errors",
|
||||
"total_processed": "Total Processed",
|
||||
"progress": "Progress",
|
||||
"no_import_jobs": "No import jobs yet",
|
||||
"start_first_import": "Start your first import using the form above"
|
||||
},
|
||||
"letzshop": {
|
||||
"title": "Letzshop Integration",
|
||||
"connection": "Connection",
|
||||
"credentials": "Credentials",
|
||||
"api_key": "API Key",
|
||||
"api_endpoint": "API Endpoint",
|
||||
"auto_sync": "Auto Sync",
|
||||
"sync_interval": "Sync Interval",
|
||||
"every_hour": "Every hour",
|
||||
"every_day": "Every day",
|
||||
"test_connection": "Test Connection",
|
||||
"save_credentials": "Save Credentials",
|
||||
"connection_success": "Connection successful",
|
||||
"connection_failed": "Connection failed",
|
||||
"last_sync": "Last Sync",
|
||||
"sync_status": "Sync Status",
|
||||
"import_orders": "Import Orders",
|
||||
"export_products": "Export Products",
|
||||
"no_credentials": "Configure your API key in Settings to get started",
|
||||
"carriers": {
|
||||
"dhl": "DHL",
|
||||
"ups": "UPS",
|
||||
"fedex": "FedEx",
|
||||
"dpd": "DPD",
|
||||
"gls": "GLS",
|
||||
"post_luxembourg": "Post Luxembourg",
|
||||
"other": "Other"
|
||||
}
|
||||
},
|
||||
"team": {
|
||||
"title": "Team",
|
||||
"members": "Members",
|
||||
"add_member": "Add Member",
|
||||
"invite_member": "Invite Member",
|
||||
"remove_member": "Remove Member",
|
||||
"role": "Role",
|
||||
"owner": "Owner",
|
||||
"manager": "Manager",
|
||||
"editor": "Editor",
|
||||
"viewer": "Viewer",
|
||||
"permissions": "Permissions",
|
||||
"pending_invitations": "Pending Invitations",
|
||||
"invitation_sent": "Invitation Sent",
|
||||
"invitation_accepted": "Invitation Accepted"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
"general": "General",
|
||||
"store": "Store",
|
||||
"store_name": "Store Name",
|
||||
"store_description": "Store Description",
|
||||
"contact_email": "Contact Email",
|
||||
"contact_phone": "Contact Phone",
|
||||
"business_address": "Business Address",
|
||||
"tax_number": "Tax Number",
|
||||
"currency": "Currency",
|
||||
"timezone": "Timezone",
|
||||
"language": "Language",
|
||||
"language_settings": "Language Settings",
|
||||
"default_language": "Default Language",
|
||||
"dashboard_language": "Dashboard Language",
|
||||
"storefront_language": "Storefront Language",
|
||||
"enabled_languages": "Enabled Languages",
|
||||
"notifications": "Notifications",
|
||||
"email_notifications": "Email Notifications",
|
||||
"integrations": "Integrations",
|
||||
"api_keys": "API Keys",
|
||||
"webhooks": "Webhooks",
|
||||
"save_settings": "Save Settings",
|
||||
"settings_saved": "Settings saved successfully"
|
||||
},
|
||||
"profile": {
|
||||
"title": "Profile",
|
||||
"my_profile": "My Profile",
|
||||
"edit_profile": "Edit Profile",
|
||||
"personal_info": "Personal Information",
|
||||
"first_name": "First Name",
|
||||
"last_name": "Last Name",
|
||||
"email": "Email",
|
||||
"phone": "Phone",
|
||||
"avatar": "Avatar",
|
||||
"change_avatar": "Change Avatar",
|
||||
"security": "Security",
|
||||
"two_factor": "Two-Factor Authentication",
|
||||
"sessions": "Active Sessions",
|
||||
"preferences": "Preferences",
|
||||
"language_preference": "Language Preference",
|
||||
"save_profile": "Save Profile",
|
||||
"profile_updated": "Profile updated successfully"
|
||||
},
|
||||
"errors": {
|
||||
"generic": "An error occurred",
|
||||
"not_found": "Not Found",
|
||||
@@ -414,35 +163,6 @@
|
||||
"logout_title": "Confirm Logout",
|
||||
"logout_message": "Are you sure you want to log out?"
|
||||
},
|
||||
"notifications": {
|
||||
"title": "Notifications",
|
||||
"mark_read": "Mark as Read",
|
||||
"mark_all_read": "Mark All as Read",
|
||||
"no_notifications": "No notifications",
|
||||
"new_order": "New Order",
|
||||
"order_updated": "Order Updated",
|
||||
"low_stock": "Low Stock Alert",
|
||||
"import_complete": "Import Complete",
|
||||
"import_failed": "Import Failed"
|
||||
},
|
||||
"shop": {
|
||||
"welcome": "Welcome to our store",
|
||||
"browse_products": "Browse Products",
|
||||
"add_to_cart": "Add to Cart",
|
||||
"buy_now": "Buy Now",
|
||||
"view_cart": "View Cart",
|
||||
"checkout": "Checkout",
|
||||
"continue_shopping": "Continue Shopping",
|
||||
"start_shopping": "Start Shopping",
|
||||
"empty_cart": "Your cart is empty",
|
||||
"cart_total": "Cart Total",
|
||||
"proceed_checkout": "Proceed to Checkout",
|
||||
"payment": "Payment",
|
||||
"place_order": "Place Order",
|
||||
"order_placed": "Order Placed Successfully",
|
||||
"thank_you": "Thank you for your order",
|
||||
"order_confirmation": "Order Confirmation"
|
||||
},
|
||||
"footer": {
|
||||
"all_rights_reserved": "All rights reserved",
|
||||
"powered_by": "Powered by"
|
||||
@@ -472,205 +192,8 @@
|
||||
"datetime": "MM/DD/YYYY HH:mm",
|
||||
"currency": "{symbol}{amount}"
|
||||
},
|
||||
"platform": {
|
||||
"nav": {
|
||||
"pricing": "Pricing",
|
||||
"find_shop": "Find Your Shop",
|
||||
"start_trial": "Start Free Trial",
|
||||
"admin_login": "Admin Login",
|
||||
"vendor_login": "Vendor Login",
|
||||
"toggle_menu": "Toggle menu",
|
||||
"toggle_dark_mode": "Toggle dark mode"
|
||||
},
|
||||
"hero": {
|
||||
"badge": "{trial_days}-Day Free Trial - No Credit Card Required to Start",
|
||||
"title": "Lightweight OMS for Letzshop Sellers",
|
||||
"subtitle": "Order management, inventory, and invoicing built for Luxembourg e-commerce. Stop juggling spreadsheets. Start running your business.",
|
||||
"cta_trial": "Start Free Trial",
|
||||
"cta_find_shop": "Find Your Letzshop Shop"
|
||||
},
|
||||
"pricing": {
|
||||
"title": "Simple, Transparent Pricing",
|
||||
"subtitle": "Choose the plan that fits your business. All plans include a {trial_days}-day free trial.",
|
||||
"monthly": "Monthly",
|
||||
"annual": "Annual",
|
||||
"save_months": "Save 2 months!",
|
||||
"most_popular": "MOST POPULAR",
|
||||
"recommended": "RECOMMENDED",
|
||||
"contact_sales": "Contact Sales",
|
||||
"start_trial": "Start Free Trial",
|
||||
"per_month": "/month",
|
||||
"per_year": "/year",
|
||||
"custom": "Custom",
|
||||
"orders_per_month": "{count} orders/month",
|
||||
"unlimited_orders": "Unlimited orders",
|
||||
"products_limit": "{count} products",
|
||||
"unlimited_products": "Unlimited products",
|
||||
"team_members": "{count} team members",
|
||||
"unlimited_team": "Unlimited team",
|
||||
"letzshop_sync": "Letzshop order sync",
|
||||
"eu_vat_invoicing": "EU VAT invoicing",
|
||||
"analytics_dashboard": "Analytics dashboard",
|
||||
"api_access": "API access",
|
||||
"multi_channel": "Multi-channel integration",
|
||||
"products": "products",
|
||||
"team_member": "team member",
|
||||
"unlimited": "Unlimited",
|
||||
"order_history": "months order history",
|
||||
"trial_note": "All plans include a {trial_days}-day free trial. No credit card required.",
|
||||
"back_home": "Back to Home"
|
||||
},
|
||||
"features": {
|
||||
"letzshop_sync": "Letzshop order sync",
|
||||
"inventory_basic": "Basic inventory management",
|
||||
"inventory_locations": "Warehouse locations",
|
||||
"inventory_purchase_orders": "Purchase orders",
|
||||
"invoice_lu": "Luxembourg VAT invoicing",
|
||||
"invoice_eu_vat": "EU VAT invoicing",
|
||||
"invoice_bulk": "Bulk invoicing",
|
||||
"customer_view": "Customer list",
|
||||
"customer_export": "Customer export",
|
||||
"analytics_dashboard": "Analytics dashboard",
|
||||
"accounting_export": "Accounting export",
|
||||
"api_access": "API access",
|
||||
"automation_rules": "Automation rules",
|
||||
"team_roles": "Team roles & permissions",
|
||||
"white_label": "White-label option",
|
||||
"multi_vendor": "Multi-vendor support",
|
||||
"custom_integrations": "Custom integrations",
|
||||
"sla_guarantee": "SLA guarantee",
|
||||
"dedicated_support": "Dedicated account manager"
|
||||
},
|
||||
"addons": {
|
||||
"title": "Enhance Your Platform",
|
||||
"subtitle": "Add custom branding, professional email, and enhanced security.",
|
||||
"per_year": "/year",
|
||||
"per_month": "/month",
|
||||
"custom_domain": "Custom Domain",
|
||||
"custom_domain_desc": "Use your own domain (mydomain.com)",
|
||||
"premium_ssl": "Premium SSL",
|
||||
"premium_ssl_desc": "EV certificate for trust badges",
|
||||
"email_package": "Email Package",
|
||||
"email_package_desc": "Professional email addresses"
|
||||
},
|
||||
"find_shop": {
|
||||
"title": "Find Your Letzshop Shop",
|
||||
"subtitle": "Already selling on Letzshop? Enter your shop URL to get started.",
|
||||
"placeholder": "Enter your Letzshop URL (e.g., letzshop.lu/vendors/my-shop)",
|
||||
"button": "Find My Shop",
|
||||
"claim_shop": "Claim This Shop",
|
||||
"already_claimed": "Already Claimed",
|
||||
"no_account": "Don't have a Letzshop account?",
|
||||
"signup_letzshop": "Sign up with Letzshop first",
|
||||
"then_connect": ", then come back to connect your shop.",
|
||||
"search_placeholder": "Enter Letzshop URL or shop name...",
|
||||
"search_button": "Search",
|
||||
"examples": "Examples:",
|
||||
"claim_button": "Claim This Shop & Start Free Trial",
|
||||
"not_found": "We could not find a Letzshop shop with that URL. Please check and try again.",
|
||||
"or_signup": "Or sign up without a Letzshop connection",
|
||||
"need_help": "Need Help?",
|
||||
"no_account_yet": "Don't have a Letzshop account yet? No problem!",
|
||||
"create_letzshop": "Create a Letzshop Account",
|
||||
"signup_without": "Sign Up Without Letzshop",
|
||||
"looking_up": "Looking up your shop...",
|
||||
"found": "Found:",
|
||||
"claimed_badge": "Already Claimed"
|
||||
},
|
||||
"signup": {
|
||||
"step_plan": "Select Plan",
|
||||
"step_shop": "Claim Shop",
|
||||
"step_account": "Account",
|
||||
"step_payment": "Payment",
|
||||
"choose_plan": "Choose Your Plan",
|
||||
"save_percent": "Save {percent}%",
|
||||
"trial_info": "We'll collect your payment info, but you won't be charged until the trial ends.",
|
||||
"connect_shop": "Connect Your Letzshop Shop",
|
||||
"connect_optional": "Optional: Link your Letzshop account to sync orders automatically.",
|
||||
"connect_continue": "Connect & Continue",
|
||||
"skip_step": "Skip This Step",
|
||||
"create_account": "Create Your Account",
|
||||
"first_name": "First Name",
|
||||
"last_name": "Last Name",
|
||||
"company_name": "Company Name",
|
||||
"email": "Email",
|
||||
"password": "Password",
|
||||
"password_hint": "Minimum 8 characters",
|
||||
"continue": "Continue",
|
||||
"continue_payment": "Continue to Payment",
|
||||
"back": "Back",
|
||||
"add_payment": "Add Payment Method",
|
||||
"no_charge_note": "You won't be charged until your {trial_days}-day trial ends.",
|
||||
"processing": "Processing...",
|
||||
"start_trial": "Start Free Trial",
|
||||
"creating_account": "Creating your account..."
|
||||
},
|
||||
"success": {
|
||||
"title": "Welcome to Wizamart!",
|
||||
"subtitle": "Your account has been created and your {trial_days}-day free trial has started.",
|
||||
"what_next": "What's Next?",
|
||||
"step_connect": "Connect Letzshop:",
|
||||
"step_connect_desc": "Add your API key to start syncing orders automatically.",
|
||||
"step_invoicing": "Set Up Invoicing:",
|
||||
"step_invoicing_desc": "Configure your invoice settings for Luxembourg compliance.",
|
||||
"step_products": "Import Products:",
|
||||
"step_products_desc": "Sync your product catalog from Letzshop.",
|
||||
"go_to_dashboard": "Go to Dashboard",
|
||||
"login_dashboard": "Login to Dashboard",
|
||||
"need_help": "Need help getting started?",
|
||||
"contact_support": "Contact our support team"
|
||||
},
|
||||
"cta": {
|
||||
"title": "Ready to Streamline Your Orders?",
|
||||
"subtitle": "Join Letzshop vendors who trust Wizamart for their order management. Start your {trial_days}-day free trial today.",
|
||||
"button": "Start Free Trial"
|
||||
},
|
||||
"footer": {
|
||||
"tagline": "Lightweight OMS for Letzshop sellers. Manage orders, inventory, and invoicing.",
|
||||
"quick_links": "Quick Links",
|
||||
"platform": "Platform",
|
||||
"contact": "Contact",
|
||||
"copyright": "© {year} Wizamart. Built for Luxembourg e-commerce.",
|
||||
"privacy": "Privacy Policy",
|
||||
"terms": "Terms of Service",
|
||||
"about": "About Us",
|
||||
"faq": "FAQ",
|
||||
"contact_us": "Contact Us"
|
||||
},
|
||||
"modern": {
|
||||
"badge_integration": "Official Integration",
|
||||
"badge_connect": "Connect in 2 minutes",
|
||||
"hero_title_1": "Built for Luxembourg E-Commerce",
|
||||
"hero_title_2": "The Back-Office Letzshop Doesn't Give You",
|
||||
"hero_subtitle": "Sync orders, manage inventory, generate invoices with correct VAT, and own your customer data. All in one place.",
|
||||
"cta_trial": "Start {trial_days}-Day Free Trial",
|
||||
"cta_how": "See How It Works",
|
||||
"hero_note": "No credit card required. Setup in 5 minutes. Cancel anytime.",
|
||||
"pain_title": "Sound Familiar?",
|
||||
"pain_subtitle": "These are the daily frustrations of Letzshop sellers",
|
||||
"pain_manual": "Manual Order Entry",
|
||||
"pain_manual_desc": "Copy-pasting orders from Letzshop to spreadsheets. Every. Single. Day.",
|
||||
"pain_inventory": "Inventory Chaos",
|
||||
"pain_inventory_desc": "Stock in Letzshop doesn't match reality. Overselling happens.",
|
||||
"pain_vat": "Wrong VAT Invoices",
|
||||
"pain_vat_desc": "EU customers need correct VAT. Your accountant keeps complaining.",
|
||||
"pain_customers": "Lost Customers",
|
||||
"pain_customers_desc": "Letzshop owns your customer data. You can't retarget or build loyalty.",
|
||||
"how_title": "How It Works",
|
||||
"how_subtitle": "From Chaos to Control in 4 Steps",
|
||||
"how_step1": "Connect Letzshop",
|
||||
"how_step1_desc": "Enter your Letzshop API credentials. Done in 2 minutes, no technical skills needed.",
|
||||
"how_step2": "Orders Flow In",
|
||||
"how_step2_desc": "Orders sync automatically. Confirm and add tracking directly from Wizamart.",
|
||||
"how_step3": "Generate Invoices",
|
||||
"how_step3_desc": "One click to create compliant PDF invoices with correct VAT for any EU country.",
|
||||
"how_step4": "Grow Your Business",
|
||||
"how_step4_desc": "Export customers for marketing. Track inventory. Focus on selling, not spreadsheets.",
|
||||
"features_title": "Everything a Letzshop Seller Needs",
|
||||
"features_subtitle": "The operational tools Letzshop doesn't provide",
|
||||
"cta_final_title": "Ready to Take Control of Your Letzshop Business?",
|
||||
"cta_final_subtitle": "Join Luxembourg vendors who've stopped fighting spreadsheets and started growing their business.",
|
||||
"cta_final_note": "No credit card required. Setup in 5 minutes. Full Professional features during trial."
|
||||
}
|
||||
"clipboard": {
|
||||
"copied": "Copied to clipboard",
|
||||
"failed": "Failed to copy"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,10 +140,13 @@ const Utils = {
|
||||
async copyToClipboard(text) {
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
this.showToast('Copied to clipboard', 'success');
|
||||
// Use I18n if available, fallback to hardcoded string
|
||||
const message = typeof I18n !== 'undefined' ? I18n.t('clipboard.copied') : 'Copied to clipboard';
|
||||
this.showToast(message, 'success');
|
||||
} catch (error) {
|
||||
console.error('Failed to copy:', error);
|
||||
this.showToast('Failed to copy', 'error');
|
||||
const message = typeof I18n !== 'undefined' ? I18n.t('clipboard.failed') : 'Failed to copy';
|
||||
this.showToast(message, 'error');
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
Reference in New Issue
Block a user