refactor(i18n): streamline localization for zh-CN and remove zh-HK

This commit is contained in:
2026-01-14 03:38:16 +07:00
parent 7b7996b36f
commit 09cdfa0be8
13 changed files with 91 additions and 1371 deletions

View File

@@ -1,360 +0,0 @@
{
"wallet": {
"wallet": "المحفظة",
"recharge": "إعادة الشحن",
"withdraw": "سحب",
"transfer": "تحويل",
"balance": "الرصيد"
},
"recharge": {
"channel": {
"chainRecharge": "إعادة الشحن عبر البلوكشين",
"chainRechargeDesc": "تحويل العملات المشفرة من محفظة البلوكشين أو البورصة",
"fiatCurrency": "إعادة الشحن بالعملة الورقية",
"fiatCurrencyDesc": "تحويل العملة الورقية عبر البنك أو المؤسسات المالية الأخرى"
},
"fiat": {
"title": "إعادة الشحن بالعملة الورقية",
"bankAccount": "حساب البطاقة البنكية لإعادة الشحن",
"chooseCurrency": "اختر العملة",
"amount": "المبلغ",
"enterAmount": "الرجاء إدخال المبلغ",
"validAmountError": "الرجاء إدخال مبلغ صحيح.",
"note": "يرجى التأكد من إدخال المبلغ الصحيح. بعد التقديم، سيتم إضافة الأموال إلى حسابك بعد المراجعة الخلفية.",
"submit": "إرسال",
"submitSuccess": "تم التقديم بنجاح!"
}
},
"withdraw": {
"title": "سحب",
"chooseCurrency": "اختر العملة",
"chooseMethod": "اختر طريقة السحب",
"amount": "المبلغ",
"enterAmountMax": "الرجاء إدخال المبلغ (الحد الأقصى: {amount})",
"validAmountError": "الرجاء إدخال مبلغ صحيح.",
"bankAccountId": "معرف الحساب البنكي",
"enterBankAccountId": "الرجاء إدخال معرف الحساب البنكي",
"validBankAccountError": "الرجاء إدخال معرف حساب بنكي صحيح.",
"chooseChain": "اختر البلوكشين",
"cryptoAddress": "عنوان العملة المشفرة",
"enterCryptoAddress": "الرجاء إدخال عنوان العملة المشفرة",
"validCryptoAddressError": "الرجاء إدخال عنوان عملة مشفرة صحيح.",
"successMessage": "تم تقديم طلب السحب بنجاح!",
"submit": "إرسال",
"assetCode": {
"USDT": "USDT",
"OPTS": "OPTS"
},
"method": {
"bank": "التحويل البنكي",
"crypto": "العملة المشفرة",
"cash": "نقدا"
},
"validation": {
"assetCodeRequired": "الرجاء اختيار العملة",
"amountRequired": "الرجاء إدخال المبلغ",
"amountInvalid": "الرجاء إدخال صيغة رقمية صحيحة",
"amountExceedsBalance": "لا يمكن أن يتجاوز المبلغ الرصيد المتاح",
"amountTooSmall": "يجب أن يكون المبلغ أكبر من 0",
"methodRequired": "الرجاء اختيار طريقة السحب",
"bankAccountRequired": "الرجاء اختيار الحساب البنكي",
"chainRequired": "الرجاء اختيار شبكة البلوكشين",
"addressRequired": "الرجاء إدخال عنوان السحب",
"addressTooShort": "صيغة العنوان غير صحيحة، الطول قصير جدًا"
}
},
"bankCard": {
"management": "إدارة البطاقات البنكية",
"add": "إضافة بطاقة بنكية",
"empty": {
"title": "لا توجد بطاقة بنكية",
"description": "أضف بطاقة بنكية لإعادة الشحن والسحب السريع",
"addButton": "إضافة بطاقة بنكية"
},
"list": {
"addCard": "إضافة بطاقة بنكية",
"boundCards": "البطاقات البنكية المربوطة",
"defaultCard": "البطاقة البنكية الافتراضية",
"setDefault": "تعيين كافتراضي",
"edit": "تعديل",
"delete": "حذف",
"cancel": "إلغاء",
"debitCard": "بطاقة توفير"
},
"form": {
"tips": {
"title": "تذكير دافئ",
"description": "لضمان سلامة أموالك، يرجى التأكد من صحة معلومات البطاقة البنكية. ستُستخدم البطاقة البنكية المضافة لعمليات إعادة الشحن والسحب."
},
"bankName": "اسم البنك",
"bankNamePlaceholder": "الرجاء اختيار البنك الخاص بك",
"accountNumber": "رقم البطاقة البنكية",
"accountNumberPlaceholder": "الرجاء إدخال رقم البطاقة البنكية",
"accountNumberHelper": "يدعم أرقام البطاقات البنكية من 16-19 رقمًا",
"accountName": "اسم حامل البطاقة",
"accountNamePlaceholder": "الرجاء إدخال اسم حامل البطاقة",
"accountNameHelper": "الرجاء إدخال الاسم الحقيقي عند فتح الحساب البنكي",
"security": {
"title": "ضمان الأمان",
"encryption": "يتم نقل جميع معلومات البطاقة البنكية مشفرة بـ SSL",
"standard": "نلتزم بصرامة بمعايير الأمان على مستوى البنوك",
"privacy": "سيتم حماية معلوماتك الشخصية بشكل صحيح"
},
"submit": "تأكيد إضافة البطاقة البنكية",
"validation": {
"bankRequired": "الرجاء اختيار البنك",
"accountNumberRequired": "الرجاء إدخال رقم البطاقة البنكية",
"accountNameRequired": "الرجاء إدخال اسم حامل البطاقة"
}
},
"messages": {
"addSuccess": "تمت إضافة البطاقة البنكية بنجاح",
"setDefaultSuccess": "تم التعيين كبطاقة بنكية افتراضية",
"deleteSuccess": "تم حذف البطاقة البنكية بنجاح",
"deleteConfirm": "حذف البطاقة البنكية",
"deleteMessage": "هل أنت متأكد من حذف {bankName} ({accountName})؟ لا يمكن التراجع عن هذا الإجراء."
},
"tips": {
"encryption": "معلومات البطاقة البنكية محمية بالتشفير",
"support": "يدعم البنوك الرئيسية لإعادة الشحن والسحب السريع"
}
},
"trade": {
"title": "التداول",
"settings": {
"bankManagement": "إدارة البطاقات البنكية",
"mySubscribe": "اشتراكاتي"
}
},
"asset": {
"issue": {
"issuingAsset": "إصدار الأصول",
"myCompany": "شركتي",
"issuingApply": "طلب الإصدار",
"audit": "التدقيق والمراجعة",
"supervision": "الإشراف بالوكالة",
"apply": {
"title": "طلب الإصدار",
"base": "المعلومات الأساسية",
"issuePeriod": "فترة الإصدار",
"productName": "اسم المنتج",
"enterProductName": "الرجاء إدخال اسم المنتج",
"productCode": "رمز المنتج",
"enterProductCode": "الرجاء إدخال رمز المنتج",
"productType": "نوع المنتج",
"chooseProductType": "الرجاء اختيار نوع المنتج",
"productValue": "تقييم المنتج",
"enterProductValue": "الرجاء إدخال تقييم المنتج (بالدولار الأمريكي)",
"assetProof": "إثبات الأصول",
"enterAssetProof": "الرجاء إدخال إثبات الأصول",
"uploadAssetProof": "تحميل مستندات إثبات الأصول",
"totalSupplyLimit": "الحد الأقصى لإجمالي الإصدار",
"enterTotalSupplyLimit": "الرجاء إدخال الحد الأقصى لإجمالي الإصدار",
"editionName": "اسم فترة الإصدار",
"enterEditionName": "الرجاء إدخال اسم فترة الإصدار",
"launchDate": "وقت الإحماء",
"enterLaunchDate": "الرجاء إدخال وقت الإحماء",
"perUserLimit": "الحد الأقصى للاشتراك الفردي",
"enterPerUserLimit": "الرجاء إدخال الحد الأقصى للاشتراك الفردي",
"totalSupply": "إجمالي الإصدار",
"enterTotalSupply": "الرجاء إدخال إجمالي الإصدار",
"subscriptionStartDate": "تاريخ بدء الاشتراك",
"subscriptionEndDate": "تاريخ انتهاء الاشتراك",
"unitPrice": "سعر الوحدة",
"enterUnitPrice": "الرجاء إدخال سعر الوحدة",
"dividendRate": "معدل الأرباح",
"enterDividendRate": "معدل الأرباح (مثل 0.01 يمثل 1٪)",
"description": "وصف المنتج",
"enterDescription": "الرجاء إدخال وصف المنتج",
"issuePeriodIndex": "فترة الإصدار {index}",
"realEstate": "العقارات",
"snickers": "الحلوى",
"next": "التالي",
"back": "العودة",
"submit": "إرسال",
"addStep": "إضافة فترة إصدار",
"removeItem": "إزالة العنصر",
"validation": {
"nameRequired": "اسم المنتج مطلوب",
"codeRequired": "رمز المنتج مطلوب",
"categoryRequired": "نوع المنتج مطلوب",
"editionNameRequired": "اسم فترة الإصدار مطلوب",
"launchDateRequired": "وقت الإحماء مطلوب",
"launchDateNotPast": "لا يمكن أن يكون وقت الإحماء قبل الوقت الحالي",
"launchBeforeSubscription": "يجب أن يكون وقت الإحماء قبل تاريخ بدء الاشتراك",
"subscriptionStartDateRequired": "تاريخ بدء الاشتراك مطلوب",
"subscriptionStartDateNotPast": "لا يمكن أن يكون تاريخ بدء الاشتراك قبل التاريخ الحالي",
"subscriptionAfterLaunch": "يجب أن يكون تاريخ بدء الاشتراك بعد وقت الإحماء",
"subscriptionEndDateRequired": "تاريخ انتهاء الاشتراك مطلوب",
"subscriptionEndAfterStart": "يجب أن يكون تاريخ انتهاء الاشتراك بعد تاريخ بدء الاشتراك",
"perUserLimitRequired": "الحد الأقصى للاشتراك الفردي مطلوب",
"totalSupplyRequired": "إجمالي الإصدار مطلوب",
"unitPriceRequired": "سعر الوحدة مطلوب",
"dividendRateRequired": "معدل الأرباح مطلوب"
},
"done": {
"title": "تم تقديم الطلب بنجاح",
"description": "تم تقديم طلب الإصدار الخاص بك بنجاح، وسنراجع طلبك خلال أيام العمل. يرجى انتظار نتيجة المراجعة بصبر.",
"viewProducts": "عرض منتجاتي"
}
}
},
"purchase": {
"purchaseAsset": "شراء الأصول",
"fiatPurchase": "الشراء بالعملة الورقية",
"cryptoPurchase": "الشراء بالعملة الرقمية",
"realEstate": "العقارات",
"assetExchange": "تبادل الأصول"
},
"balance": {
"assetBalance": "رصيد الأصول",
"fiat": "العملة الورقية",
"onChain": "على البلوكشين",
"wallet": "المحفظة",
"recharge": "إعادة الشحن"
},
"revenue": {
"myRevenue": "إيراداتي",
"totalRevenue": "إجمالي الإيرادات",
"monthlyRevenue": "الإيرادات الشهرية",
"pendingRevenue": "الإيرادات المعلقة",
"revenueDetails": "تفاصيل الإيرادات"
}
},
"myIssues": {
"title": "طلبات الإصدار الخاصة بي",
"search": "بحث",
"list": {
"nameCode": "الاسم/الرمز",
"createdAt": "وقت الإنشاء",
"status": "الحالة"
},
"status": {
"draft": "مسودة",
"under_review": "قيد المراجعة",
"approved": "تمت الموافقة",
"rejected": "مرفوض"
},
"loadMore": "تحميل المزيد"
},
"market": {
"title": "السوق",
"search": {
"placeholder": "بحث"
},
"category": {
"all": "الكل"
},
"rwaList": {
"nameCode": "الاسم/الرمز",
"stage": "المرحلة",
"issueDate": "تاريخ الإصدار",
"subscriptionPrice": "سعر الاشتراك"
},
"tradeRwa": {
"tabs": {
"overview": "نظرة عامة",
"moment": "اللحظة"
},
"fields": {
"productCode": "رقم المنتج",
"valuation": "التقييم",
"unitPrice": "سعر الوحدة",
"totalSupply": "إجمالي الإصدار",
"perUserLimit": "الحد لكل شخص",
"launchDate": "وقت الإحماء",
"subscriptionStartDate": "تاريخ بدء الاشتراك",
"subscriptionEndDate": "تاريخ انتهاء الاشتراك"
},
"units": {
"shares": "أسهم"
},
"about": "حول",
"noDescription": "لا يوجد وصف.",
"subscribe": "اشترك",
"subscribeSuccess": "نجح الاشتراك"
},
"subscribeRwa": {
"title": "اشترك في RWA",
"maxSubscribePlaceholder": "الحد الأقصى للكمية القابلة للاشتراك: {max}",
"unitPrice": "سعر الوحدة",
"availableBalance": "الرصيد المتاح",
"confirmSubscribe": "تأكيد الاشتراك",
"enterQuantityError": "الرجاء إدخال كمية الاشتراك"
},
"loading": {
"loadingMore": "تحميل المزيد..."
}
},
"tabs": {
"riwa": "Riwa",
"market": "السوق",
"trade": "التداول",
"chat": "الدردشة",
"user": "حسابي"
},
"common": {
"failedSendCode": "فشل إرسال رمز التحقق",
"uploadFile": "تحميل ملف",
"files": "ملفات"
},
"auth": {
"login": {
"title": "تسجيل الدخول",
"loginButton": "تسجيل الدخول",
"signupButton": "التسجيل",
"username": "البريد الإلكتروني",
"phone": "الهاتف",
"selectCountryCode": "اختر الدولة/المنطقة",
"enterEmail": "أدخل البريد الإلكتروني",
"enterCode": "أدخل رمز التحقق",
"enterOtp": "أدخل رمز التحقق",
"getCode": "احصل على الرمز",
"sending": "جاري الإرسال...",
"sendCodeSuccess": "تم إرسال رمز التحقق",
"validation": {
"phoneNumberRequired": "الرجاء إدخال رقم الهاتف",
"phoneNumberInvalid": "الرجاء إدخال رقم هاتف صحيح",
"codeRequired": "الرجاء إدخال رمز التحقق",
"codeInvalid": "الرجاء إدخال رمز تحقق من 6 أرقام",
"emailRequired": "الرجاء إدخال البريد الإلكتروني",
"emailInvalid": "الرجاء إدخال عنوان بريد إلكتروني صحيح",
"otpRequired": "الرجاء إدخال رمز التحقق",
"otpInvalid": "الرجاء إدخال رمز تحقق من 6 أرقام"
}
}
},
"settings": {
"title": "الإعدادات",
"language": "اللغة",
"aboutUs": "معلومات عنا",
"clearCache": "مسح ذاكرة التخزين المؤقت",
"checkUpdate": "التحقق من التحديثات",
"cacheCleared": "تم مسح ذاكرة التخزين المؤقت",
"updateAvailable": "تم العثور على إصدار جديد",
"currentVersion": "الإصدار الحالي",
"latestVersion": "أحدث إصدار",
"newVersion": "إصدار جديد",
"cancel": "إلغاء",
"updateNow": "تحديث الآن",
"alreadyLatest": "أنت تستخدم أحدث إصدار",
"checkUpdateFailed": "فشل التحقق من التحديثات",
"languageTitle": "اللغة / Language",
"theme": "المظهر",
"themeTitle": "مظهر الواجهة",
"themeLight": "فاتح",
"themeDark": "داكن",
"themeAuto": "تلقائي (حسب النظام)"
},
"home": {
"title": "الصفحة الرئيسية",
"rwa": {
"title": "منتجات RWA",
"buy": "شراء",
"stage": "المرحلة: "
},
"news": {
"title": "الأخبار والتحديثات"
}
}
}

View File

@@ -1,604 +0,0 @@
{
"wallet": {
"wallet": "Wallet",
"recharge": "Recharge",
"withdraw": "Withdraw",
"transfer": "Transfer",
"balance": "Balance"
},
"app": {
"update": {
"title": "New Version Available",
"message": "A new version is available. Update now?",
"now": "Update Now",
"later": "Later",
"forceUpdate": "A new version is required to continue using the app"
}
},
"scanner": {
"title": "Scan QR Code",
"hint": "Align QR code within frame to scan",
"fromGallery": "Choose from Gallery",
"notSupported": "QR code scanning not supported on this platform",
"permissionDenied": "Camera permission denied",
"openError": "Failed to open scanner",
"noQRCodeFound": "No QR code detected",
"galleryError": "Failed to read from gallery",
"galleryNotSupported": "Gallery selection not supported currently"
},
"recharge": {
"channel": {
"chainRecharge": "Chain recharge",
"chainRechargeDesc": "Transfer crypto from on-chain wallet or exchange.",
"fiatCurrency": "Fiat currency",
"fiatCurrencyDesc": "Transfer fiat currency through bank or other financial institutions."
},
"fiat": {
"title": "Fiat Recharge",
"bankAccount": "Recharge bank card account",
"chooseCurrency": "Choose Currency",
"amount": "Amount",
"enterAmount": "Enter the amount",
"validAmountError": "Please enter a valid amount.",
"note": "Please make sure to enter the correct amount. After submission, the funds will be credited to your account after review in the background.",
"submit": "Submit",
"submitSuccess": "Submission successful!"
},
"status": {
"pending": "Pending",
"confirming": "Confirming",
"approved": "Approved",
"completed": "Completed",
"rejected": "Rejected",
"cancelled": "Cancelled"
}
},
"withdraw": {
"title": "Withdraw",
"chooseCurrency": "Choose Currency",
"chooseMethod": "Choose Withdraw Method",
"amount": "Amount",
"enterAmountMax": "Enter the amount (Max: {amount})",
"validAmountError": "Please enter a valid amount.",
"bankAccountId": "Bank Account ID",
"enterBankAccountId": "Enter the bank account ID",
"validBankAccountError": "Please enter a valid bank account ID.",
"chooseChain": "Choose Chain",
"cryptoAddress": "Crypto Address",
"enterCryptoAddress": "Enter the crypto address",
"validCryptoAddressError": "Please enter a valid crypto address.",
"successMessage": "Withdrawal request submitted successfully!",
"submit": "Submit",
"assetCode": {
"USDT": "USDT",
"OPTS": "OPTS"
},
"method": {
"bank": "Bank Transfer",
"crypto": "Cryptocurrency",
"cash": "Cash"
},
"validation": {
"assetCodeRequired": "Please select a currency",
"amountRequired": "Please enter an amount",
"amountInvalid": "Please enter a valid number format",
"amountExceedsBalance": "Amount cannot exceed available balance",
"amountTooSmall": "Amount must be greater than 0",
"methodRequired": "Please select a withdrawal method",
"bankAccountRequired": "Please select a bank account",
"chainRequired": "Please select a blockchain network",
"addressRequired": "Please enter a withdrawal address",
"addressTooShort": "Address format is incorrect, too short"
}
},
"bankCard": {
"management": "Bank Card Management",
"add": "Add Bank Card",
"empty": {
"title": "No Bank Cards",
"description": "Add a bank card for quick deposits and withdrawals",
"addButton": "Add Bank Card"
},
"list": {
"addCard": "Add Bank Card",
"boundCards": "Bound Bank Cards",
"defaultCard": "Default Card",
"setDefault": "Set as Default",
"edit": "Edit",
"delete": "Delete",
"cancel": "Cancel",
"debitCard": "Debit Card"
},
"form": {
"tips": {
"title": "Tips",
"description": "To ensure the security of your funds, please make sure the bank card information is authentic and valid. The added bank card will be used for deposit and withdrawal operations."
},
"bankName": "Bank Name",
"bankNamePlaceholder": "Please select your bank",
"accountNumber": "Bank Card Number",
"accountNumberPlaceholder": "Please enter your bank card number",
"accountNumberHelper": "Supports 16-19 digit bank card numbers",
"accountName": "Cardholder Name",
"accountNamePlaceholder": "Please enter cardholder name",
"accountNameHelper": "Please enter the real name when opening the bank card",
"security": {
"title": "Security Guarantee",
"encryption": "All bank card information is encrypted via SSL transmission",
"standard": "We strictly follow bank-level security standards",
"privacy": "Your personal information will be properly protected"
},
"submit": "Confirm Add Bank Card",
"validation": {
"bankRequired": "Please select a bank",
"accountNumberRequired": "Please enter bank card number",
"accountNameRequired": "Please enter cardholder name"
}
},
"messages": {
"addSuccess": "Bank card added successfully",
"setDefaultSuccess": "Set as default bank card successfully",
"deleteSuccess": "Bank card deleted successfully",
"deleteConfirm": "Delete Bank Card",
"deleteMessage": "Are you sure you want to delete {bankName} ({accountName})? This operation cannot be undone."
},
"tips": {
"encryption": "Bank card information is encrypted and protected",
"support": "Supports mainstream banks for fast deposits and withdrawals"
}
},
"trade": {
"title": "Trade",
"settings": {
"bankManagement": "Bank Card",
"mySubscribe": "Subscribe",
"myIssues": "My Issues"
}
},
"asset": {
"issue": {
"issuingAsset": "Issuing Asset",
"myCompany": "My Company",
"issuingApply": "Issuing Apply",
"audit": "Audit",
"supervision": "Supervision",
"apply": {
"title": "Issuing Apply",
"base": "Base",
"issuePeriod": "Issue Period",
"productName": "Product Name",
"enterProductName": "Please enter product name",
"productCode": "Product Code",
"enterProductCode": "Please enter product code",
"productType": "Product Type",
"chooseProductType": "Please choose product type",
"productValue": "Product Valuation",
"enterProductValue": "Please enter product valuation (USD)",
"assetProof": "Asset Proof",
"enterAssetProof": "Please enter asset proof",
"uploadAssetProof": "Upload Asset Proof Documents",
"totalSupplyLimit": "Total Supply Limit",
"enterTotalSupplyLimit": "Please enter total supply limit",
"editionName": "Edition Name",
"enterEditionName": "Please enter edition name",
"launchDate": "Warm-up Time",
"enterLaunchDate": "Please enter warm-up time",
"perUserLimit": "Per User Limit",
"enterPerUserLimit": "Please enter per user limit",
"totalSupply": "Total Supply",
"enterTotalSupply": "Please enter total supply",
"subscriptionStartDate": "Subscription Start Date",
"subscriptionEndDate": "Subscription End Date",
"unitPrice": "Unit Price",
"enterUnitPrice": "Please enter unit price",
"dividendRate": "Dividend Rate",
"enterDividendRate": "Dividend rate (e.g., 0.01 for 1%)",
"description": "Product Description",
"enterDescription": "Please enter product description",
"issuePeriodIndex": "Issue Period {index}",
"realEstate": "Real Estate",
"snickers": "Snickers",
"next": "Next",
"back": "Back",
"submit": "Submit",
"addStep": "Add Step",
"removeItem": "Remove Item",
"validation": {
"nameRequired": "Name is required",
"codeRequired": "Code is required",
"categoryRequired": "Type is required",
"editionNameRequired": "Edition name is required",
"launchDateRequired": "Warm-up time is required",
"launchDateNotPast": "Warm-up time cannot be earlier than current date",
"launchBeforeSubscription": "Warm-up time must be before subscription start date",
"subscriptionStartDateRequired": "Subscription start date is required",
"subscriptionStartDateNotPast": "Subscription start date cannot be earlier than current date",
"subscriptionAfterLaunch": "Subscription start date must be after warm-up time",
"subscriptionEndDateRequired": "Subscription end date is required",
"subscriptionEndAfterStart": "Subscription end date must be after subscription start date",
"perUserLimitRequired": "Per user limit is required",
"totalSupplyRequired": "Total supply is required",
"unitPriceRequired": "Unit price is required",
"dividendRateRequired": "Dividend rate is required"
},
"done": {
"title": "Application Submitted Successfully",
"description": "Your issuance application has been submitted successfully. We will review your application within business days. Please wait patiently for the review results.",
"viewProducts": "View My Products"
}
}
},
"purchase": {
"purchaseAsset": "Purchase Assets",
"fiatPurchase": "Fiat Purchase",
"cryptoPurchase": "Crypto Purchase",
"realEstate": "Real Estate",
"assetExchange": "Asset Exchange"
},
"balance": {
"assetBalance": "Asset Balance",
"fiat": "Fiat",
"onChain": "On-Chain",
"wallet": "Wallet",
"recharge": "Recharge"
},
"revenue": {
"myRevenue": "My Revenue",
"totalRevenue": "Total Revenue",
"monthlyRevenue": "Monthly Revenue",
"pendingRevenue": "Pending Revenue",
"revenueDetails": "Revenue Details",
"types": {
"all": "All",
"dividend": "Dividend",
"staking": "Staking",
"new_user_reward": "New User Reward",
"referral_reward": "Referral Reward",
"trading_fee_rebate": "Trading Fee Rebate",
"deposit_rebate": "Deposit Rebate",
"deposit_reward": "Deposit Reward",
"other": "Other"
}
}
},
"income": {
"title": "Total Revenue",
"overview": {
"totalRevenue": "Total Revenue",
"yesterdayRevenue": "Yesterday's Revenue",
"monthRevenue": "This Month",
"pendingRevenue": "Pending Revenue"
},
"trend": {
"title": "Revenue Trend",
"last7Days": "Last 7 Days",
"last30Days": "Last 30 Days",
"last90Days": "Last 90 Days"
},
"sources": {
"title": "Revenue Sources",
"dividend": "Dividend",
"appreciation": "Appreciation",
"trade": "Trading"
},
"records": {
"title": "Revenue Records",
"all": "All",
"recent": "Recent Records",
"viewAll": "View All",
"assetName": "Asset Name",
"type": "Type",
"amount": "Amount",
"date": "Date",
"status": "Status",
"noData": "No revenue records"
},
"status": {
"completed": "Completed",
"pending": "Pending",
"processing": "Processing"
}
},
"myIssues": {
"title": "My Issuance Applications",
"search": "Search",
"list": {
"nameCode": "Name/Code",
"createdAt": "Created Time",
"status": "Status"
},
"status": {
"draft": "Draft",
"under_review": "Under Review",
"approved": "Approved",
"rejected": "Rejected"
},
"loadMore": "Load More"
},
"holdings": {
"title": "My Holdings",
"empty": "No holdings yet",
"nameCode": "Name/Code",
"quantity": "Quantity",
"totalValue": "Total Value",
"purchaseDate": "Purchase Date",
"status": {
"active": "Active",
"tokenized": "Tokenized",
"locked": "Locked"
},
"units": {
"shares": "shares"
}
},
"market": {
"title": "Market",
"search": {
"placeholder": "Search"
},
"category": {
"all": "All"
},
"rwaList": {
"nameCode": "Name/Code",
"stage": "Stage",
"issueDate": "Issue Date",
"subscriptionPrice": "Subscription Price"
},
"tradeRwa": {
"tabs": {
"overview": "Overview",
"moment": "Moment"
},
"fields": {
"productCode": "Product Code",
"valuation": "Valuation",
"unitPrice": "Unit Price",
"totalSupply": "Total Supply",
"perUserLimit": "Per User Limit",
"launchDate": "Warm-up Time",
"subscriptionStartDate": "Subscription Start Date",
"subscriptionEndDate": "Subscription End Date"
},
"units": {
"shares": "shares"
},
"about": "About",
"noDescription": "No description available.",
"subscribe": "Subscribe",
"subscribeSuccess": "Subscription successful"
},
"subscribeRwa": {
"title": "Subscribe RWA",
"maxSubscribePlaceholder": "Max quantity: {max}",
"unitPrice": "Unit Price",
"availableBalance": "Available Balance",
"confirmSubscribe": "Confirm Subscribe",
"enterQuantityError": "Please enter quantity"
},
"loading": {
"loadingMore": "Loading more..."
}
},
"tabs": {
"riwa": "Riwa",
"market": "Market",
"trade": "Trade",
"chat": "Chat",
"notify": "Notify",
"user": "Profile"
},
"common": {
"failedSendCode": "Failed to send verification code",
"uploadFile": "Upload File",
"files": "files",
"today": "Today",
"yesterday": "Yesterday",
"items": "items"
},
"fileUpload": {
"uploadFile": "Upload File",
"files": "files",
"maxFilesError": "Maximum {max} files allowed",
"fileSizeError": "File {name} exceeds {max}MB limit",
"uploadError": "File {name} upload failed"
},
"news": {
"detail": "News Detail",
"summary": "Summary",
"views": "views",
"attachments": "Attachments",
"loadError": "Failed to load, please try again later"
},
"auth": {
"login": {
"title": "Log in",
"loginButton": "Log in",
"signupButton": "Sign up",
"username": "Email",
"phone": "Phone",
"selectCountryCode": "Select Country/Region",
"enterEmail": "Enter email",
"enterCode": "Enter verification code",
"enterOtp": "Enter verification code",
"getCode": "Get Code",
"sending": "Sending...",
"sendCodeSuccess": "Verification code sent",
"validation": {
"phoneNumberRequired": "Please enter phone number",
"phoneNumberInvalid": "Please enter a valid phone number",
"codeRequired": "Please enter verification code",
"codeInvalid": "Please enter a 6-digit verification code",
"emailRequired": "Please enter email",
"emailInvalid": "Please enter a valid email address",
"otpRequired": "Please enter verification code",
"otpInvalid": "Please enter a 6-digit verification code"
}
}
},
"settings": {
"title": "Settings",
"language": "Language",
"aboutUs": "About Us",
"clearCache": "Clear Cache",
"checkUpdate": "Check for Updates",
"cacheCleared": "Cache cleared",
"updateAvailable": "New version available",
"currentVersion": "Current version",
"latestVersion": "Latest version",
"newVersion": "New version",
"cancel": "Cancel",
"updateNow": "Update Now",
"alreadyLatest": "Already up to date",
"checkUpdateFailed": "Failed to check for updates",
"languageTitle": "Language / 语言",
"theme": "Theme",
"themeTitle": "Appearance",
"themeLight": "Light",
"themeDark": "Dark",
"themeAuto": "Auto"
},
"transfer": {
"title": "Transfer",
"chooseCurrency": "Choose Currency",
"from": "From",
"to": "To",
"fundingAccount": "Funding Account",
"tradingAccount": "Trading Account",
"available": "Available",
"amount": "Amount",
"enterAmount": "Enter amount",
"all": "All",
"submit": "Confirm Transfer",
"submitting": "Transferring...",
"successMessage": "Transfer successful!",
"assetCodeRequired": "Please select a currency",
"amountRequired": "Please enter amount",
"amountMinError": "Amount must be greater than 0",
"amountMaxError": "Amount cannot exceed available balance {amount}",
"fromAccountRequired": "Please select from account",
"toAccountRequired": "Please select to account"
},
"pwa": {
"install": {
"installApp": "Install App",
"addToHomeScreen": "Add to Home Screen",
"howToInstall": "How to Install",
"success": "Installation Successful",
"successMessage": "The app has been successfully added to your device",
"iosTitle": "Install App on iOS",
"iosStep1": "1. Tap the Share button at the bottom toolbar",
"iosStep2": "2. Scroll down and tap 'Add to Home Screen'",
"iosStep3": "3. Tap 'Add' to confirm installation",
"iosNote": "Once installed, you can use it like a native app"
}
},
"term": {
"title": "Terms of Service",
"lastUpdate": "Last Updated: January 2026",
"introduction": "Welcome to our service. Please read the following terms of service carefully before using this platform. By using this service, you agree to be bound by these terms.",
"sections": {
"serviceDescription": {
"title": "Service Description",
"content": {
"0": "This platform provides digital asset trading services, including but not limited to spot trading, futures trading, and other financial services.",
"1": "We are committed to providing users with a secure, stable, and efficient trading environment, but are not responsible for market fluctuations or trading results.",
"2": "The platform reserves the right to modify, suspend, or terminate some or all services at any time without prior notice."
}
},
"userResponsibilities": {
"title": "User Responsibilities",
"content": {
"0": "You must be at least 18 years old or have reached the legal age in your jurisdiction to use this service.",
"1": "You agree to provide truthful, accurate, and complete registration information and update it in a timely manner to maintain accuracy.",
"2": "You are responsible for all activities conducted through your account, including any unauthorized access or use."
}
},
"accountSecurity": {
"title": "Account Security",
"content": {
"0": "You are responsible for maintaining the confidentiality of your account password and other security credentials.",
"1": "We recommend enabling security features such as two-factor authentication to enhance account security.",
"2": "Please notify us immediately if you discover any abnormal account activity or security vulnerabilities."
}
},
"prohibitedActivities": {
"title": "Prohibited Activities",
"content": {
"0": "It is strictly prohibited to use this platform for money laundering, terrorist financing, or other illegal activities.",
"1": "Market price manipulation, fake trading, or any fraudulent behavior is prohibited.",
"2": "You may not use automated programs, bots, or other unauthorized means to access this platform.",
"3": "Violation of the above provisions may result in account freezing or permanent ban."
}
},
"riskDisclosure": {
"title": "Risk Disclosure",
"content": {
"0": "Digital asset trading is highly speculative and volatile, which may result in partial or total loss of funds.",
"1": "Please fully understand market risks before trading and only invest funds you can afford to lose.",
"2": "The platform does not provide investment advice, and you are solely responsible for all trading decisions."
}
},
"privacyPolicy": {
"title": "Privacy Policy",
"content": {
"0": "We value your privacy and take reasonable measures to protect your personal information.",
"1": "We may collect necessary information to provide services, comply with legal requirements, and improve user experience.",
"2": "For detailed privacy policy, please refer to our Privacy Policy page."
}
},
"intellectualProperty": {
"title": "Intellectual Property",
"content": {
"0": "All content on this platform, including but not limited to text, graphics, logos, and software, is protected by intellectual property laws.",
"1": "Without explicit authorization, you may not copy, modify, distribute, or otherwise use platform content."
}
},
"disclaimers": {
"title": "Disclaimers",
"content": {
"0": "This service is provided 'as is' without any express or implied warranties.",
"1": "We are not responsible for service interruptions, data loss, or any indirect damages.",
"2": "We assume no responsibility for third-party services or links."
}
},
"termination": {
"title": "Termination",
"content": {
"0": "We reserve the right to terminate or suspend your account at any time, especially in case of violation of these terms.",
"1": "After account termination, you remain responsible for actions and obligations prior to termination."
}
},
"changes": {
"title": "Changes to Terms",
"content": {
"0": "We may revise these terms of service from time to time, and the revised terms will be published on the platform.",
"1": "Continued use of the service indicates your acceptance of the revised terms."
}
},
"governingLaw": {
"title": "Governing Law",
"content": {
"0": "These terms are governed by applicable law, and any disputes should be resolved through negotiation.",
"1": "If negotiation fails, disputes shall be submitted to a court with jurisdiction."
}
}
},
"contact": {
"title": "Contact Us",
"description": "If you have any questions about these Terms of Service or need assistance, please contact us:",
"email": "Email"
}
},
"home": {
"title": "Home",
"rwa": {
"title": "RWA Products",
"buy": "Buy",
"stage": "Stage: "
},
"news": {
"title": "News & Updates"
}
}
}

View File

@@ -1,20 +1,14 @@
import { createI18n } from "vue-i18n";
import ar from "./ar.json";
import enUS from "./en-US.json";
import zhCN from "./zh-CN.json";
import zhTW from "./zh-HK.json";
export type MessageSchema = typeof enUS;
export type MessageSchema = typeof zhCN;
const i18n = createI18n<MessageSchema, "en-US" | "zh-CN" | "zh-HK" | "ar">({
const i18n = createI18n<MessageSchema, "zh-CN">({
legacy: false,
locale: "zh-CN",
fallbackLocale: "en-US",
messages: {
"en-US": enUS,
"zh-CN": zhCN,
"zh-HK": zhTW,
"ar": ar,
},
});

View File

@@ -342,41 +342,84 @@
"search": {
"placeholder": "搜索"
},
"tabs": {
"rwa": "数字化",
"tokenized": "代币化"
},
"orders": {
"title": "持仓"
},
"category": {
"all": "全部"
},
"rwaList": {
"nameCode": "名称/代码",
"stage": "阶段",
"issueDate": "发行日",
"subscriptionPrice": "申购单价"
"issueDate": "发行日",
"subscriptionPrice": "价"
},
"tokenizedList": {
"nameCode": "名称/代码",
"changeRate": "涨跌幅",
"tradePrice": "估价"
},
"holdings": {
"unitPrice": "单价",
"quantity": "数量",
"stage": "阶段",
"totalAmount": "总额",
"totalDividend": "分红",
"tokenize": "资产化",
"lock": "锁仓",
"tokenizeConfirm": {
"title": "确认资产化",
"message": "转换为可交易资产将失去分红权,是否继续?",
"cancel": "取消",
"confirm": "确认"
},
"status": {
"active": "持有中",
"tokenized": "已资产化",
"locked": "已锁仓"
}
},
"lockOption": {
"title": "锁仓期限",
"description": "锁仓期间可获得相应奖励",
"months": "个月",
"reward": "收益",
"confirm": "确定",
"empty": "暂无锁仓选项",
"success": "锁仓成功"
},
"tradeRwa": {
"tabs": {
"overview": "概览",
"moment": "动态"
"moment": "动态",
"about": "相关文档"
},
"fields": {
"productCode": "产品编号",
"productCode": "编号",
"valuation": "估值",
"unitPrice": "单价",
"totalSupply": "总发行量",
"perUserLimit": "每人限量",
"totalSupply": "总量",
"perUserLimit": "限量",
"launchDate": "预热时间",
"subscriptionStartDate": "订阅开始时间",
"subscriptionEndDate": "订阅结束时间"
"subscriptionStartDate": "订阅开始",
"subscriptionEndDate": "订阅结束"
},
"units": {
"shares": "份"
},
"about": "About",
"about": "介绍",
"status": "资产状态",
"noDescription": "暂无描述。",
"subscribe": "申购",
"subscribeSuccess": "申购成功"
},
"subscribeRwa": {
"title": "申购RWA",
"maxSubscribePlaceholder": "最大可申购数量: {max}",
"maxSubscribePlaceholder": "最大可申购: {max}",
"unitPrice": "单价",
"availableBalance": "可用余额",
"confirmSubscribe": "确认申购",

View File

@@ -1,360 +0,0 @@
{
"wallet": {
"wallet": "錢包",
"recharge": "充值",
"withdraw": "提現",
"transfer": "轉賬",
"balance": "餘額"
},
"recharge": {
"channel": {
"chainRecharge": "鏈上充值",
"chainRechargeDesc": "從鏈上錢包或交易所轉入加密貨幣",
"fiatCurrency": "法幣充值",
"fiatCurrencyDesc": "通過銀行或其他金融機構轉入法幣"
},
"fiat": {
"title": "法幣充值",
"bankAccount": "充值銀行卡賬戶",
"chooseCurrency": "選擇貨幣",
"amount": "金額",
"enterAmount": "請輸入金額",
"validAmountError": "請輸入有效的金額。",
"note": "請確保輸入正確的金額。提交後,資金將在後臺審核後計入您的賬戶。",
"submit": "提交",
"submitSuccess": "提交成功!"
}
},
"withdraw": {
"title": "提現",
"chooseCurrency": "選擇貨幣",
"chooseMethod": "選擇提現方式",
"amount": "金額",
"enterAmountMax": "請輸入金額(最大可用:{amount}",
"validAmountError": "請輸入有效的金額。",
"bankAccountId": "銀行賬戶",
"enterBankAccountId": "請輸入銀行賬戶ID",
"validBankAccountError": "請輸入有效的銀行賬戶ID。",
"chooseChain": "選擇鏈",
"cryptoAddress": "加密貨幣地址",
"enterCryptoAddress": "請輸入加密貨幣地址",
"validCryptoAddressError": "請輸入有效的加密貨幣地址。",
"successMessage": "提現申請提交成功!",
"submit": "提交",
"assetCode": {
"USDT": "USDT",
"OPTS": "OPTS"
},
"method": {
"bank": "銀行轉賬",
"crypto": "加密貨幣",
"cash": "現金"
},
"validation": {
"assetCodeRequired": "請選擇貨幣",
"amountRequired": "請輸入金額",
"amountInvalid": "請輸入有效的數字格式",
"amountExceedsBalance": "金額不能超過可用餘額",
"amountTooSmall": "金額必須大於0",
"methodRequired": "請選擇提現方式",
"bankAccountRequired": "請選擇銀行賬戶",
"chainRequired": "請選擇區塊鏈網絡",
"addressRequired": "請輸入提現地址",
"addressTooShort": "地址格式不正確,長度過短"
}
},
"bankCard": {
"management": "銀行卡管理",
"add": "添加銀行卡",
"empty": {
"title": "暫無銀行卡",
"description": "添加銀行卡以便快速充值和提現",
"addButton": "添加銀行卡"
},
"list": {
"addCard": "添加銀行卡",
"boundCards": "已綁定銀行卡",
"defaultCard": "默認銀行卡",
"setDefault": "設為默認",
"edit": "編輯",
"delete": "刪除",
"cancel": "取消",
"debitCard": "儲蓄卡"
},
"form": {
"tips": {
"title": "溫馨提示",
"description": "為了保障您的資金安全,請確保銀行卡信息真實有效。添加的銀行卡將用於充值和提現操作。"
},
"bankName": "銀行名稱",
"bankNamePlaceholder": "請選擇您的銀行",
"accountNumber": "銀行卡號",
"accountNumberPlaceholder": "請輸入銀行卡號",
"accountNumberHelper": "支持16-19位銀行卡號",
"accountName": "持卡人姓名",
"accountNamePlaceholder": "請輸入持卡人姓名",
"accountNameHelper": "請輸入銀行卡開戶時的真實姓名",
"security": {
"title": "安全保障",
"encryption": "所有銀行卡信息均經過SSL加密傳輸",
"standard": "我們嚴格遵循銀行級安全標準",
"privacy": "您的個人信息將被妥善保護"
},
"submit": "確認添加銀行卡",
"validation": {
"bankRequired": "請選擇銀行",
"accountNumberRequired": "請輸入銀行卡號",
"accountNameRequired": "請輸入持卡人姓名"
}
},
"messages": {
"addSuccess": "銀行卡添加成功",
"setDefaultSuccess": "已設置為默認銀行卡",
"deleteSuccess": "銀行卡刪除成功",
"deleteConfirm": "刪除銀行卡",
"deleteMessage": "確定要刪除 {bankName} ({accountName}) 嗎?此操作無法撤銷。"
},
"tips": {
"encryption": "銀行卡信息經過加密保護",
"support": "支持主流銀行快速充值提現"
}
},
"trade": {
"title": "交易",
"settings": {
"bankManagement": "銀行卡管理",
"mySubscribe": "我的申購"
}
},
"asset": {
"issue": {
"issuingAsset": "發行資產",
"myCompany": "我的企業",
"issuingApply": "發行申請",
"audit": "審核審計",
"supervision": "委託監管",
"apply": {
"title": "發行申請",
"base": "基礎信息",
"issuePeriod": "發行期",
"productName": "產品名稱",
"enterProductName": "請輸入產品名稱",
"productCode": "產品編碼",
"enterProductCode": "請輸入產品編碼",
"productType": "產品類型",
"chooseProductType": "請選擇產品類型",
"productValue": "產品估值",
"enterProductValue": "請輸入產品估值(美元)",
"assetProof": "資產證明",
"enterAssetProof": "請輸入資產證明",
"uploadAssetProof": "上傳資產證明文件",
"totalSupplyLimit": "總發行量上限",
"enterTotalSupplyLimit": "請輸入總發行量上限",
"editionName": "發行期名稱",
"enterEditionName": "請輸入發行期名稱",
"launchDate": "預熱時間",
"enterLaunchDate": "請輸入預熱時間",
"perUserLimit": "個人申購上限",
"enterPerUserLimit": "請輸入個人申購上限",
"totalSupply": "發行總量",
"enterTotalSupply": "請輸入發行總量",
"subscriptionStartDate": "訂閱開始時間",
"subscriptionEndDate": "訂閱結束時間",
"unitPrice": "單價",
"enterUnitPrice": "請輸入單價",
"dividendRate": "分紅率",
"enterDividendRate": "分紅率(如0.01代表1%)",
"description": "產品描述",
"enterDescription": "請輸入產品描述",
"issuePeriodIndex": "發行期 {index}",
"realEstate": "房地產",
"snickers": "糖果",
"next": "下一步",
"back": "返回",
"submit": "提交",
"addStep": "添加發行期",
"removeItem": "移除項目",
"validation": {
"nameRequired": "產品名稱是必填項",
"codeRequired": "產品編碼是必填項",
"categoryRequired": "產品類型是必填項",
"editionNameRequired": "發行期名稱是必填項",
"launchDateRequired": "預熱時間是必填項",
"launchDateNotPast": "預熱時間不能早於當前時間",
"launchBeforeSubscription": "預熱時間必須在訂閱開始時間之前",
"subscriptionStartDateRequired": "訂閱開始時間是必填項",
"subscriptionStartDateNotPast": "訂閱開始時間不能早於當前時間",
"subscriptionAfterLaunch": "訂閱開始時間必須在預熱時間之後",
"subscriptionEndDateRequired": "訂閱結束時間是必填項",
"subscriptionEndAfterStart": "訂閱結束時間必須在訂閱開始時間之後",
"perUserLimitRequired": "個人申購上限是必填項",
"totalSupplyRequired": "發行總量是必填項",
"unitPriceRequired": "單價是必填項",
"dividendRateRequired": "分紅率是必填項"
},
"done": {
"title": "申請提交成功",
"description": "您的發行申請已成功提交,我們將在工作日內對您的申請進行審核。請耐心等待審核結果。",
"viewProducts": "查看我的產品"
}
}
},
"purchase": {
"purchaseAsset": "購買資產",
"fiatPurchase": "法幣購買",
"cryptoPurchase": "數字貨幣購買",
"realEstate": "房地產",
"assetExchange": "資產交換"
},
"balance": {
"assetBalance": "資產餘額",
"fiat": "法幣",
"onChain": "鏈上",
"wallet": "錢包",
"recharge": "充值"
},
"revenue": {
"myRevenue": "我的收益",
"totalRevenue": "總收益",
"monthlyRevenue": "月度收益",
"pendingRevenue": "待確認收益",
"revenueDetails": "收益明細"
}
},
"myIssues": {
"title": "我的發行申請",
"search": "搜索",
"list": {
"nameCode": "名稱/代碼",
"createdAt": "創建時間",
"status": "狀態"
},
"status": {
"draft": "草稿",
"under_review": "待審核",
"approved": "審核通過",
"rejected": "審核拒絕"
},
"loadMore": "加載更多"
},
"market": {
"title": "市場",
"search": {
"placeholder": "搜索"
},
"category": {
"all": "全部"
},
"rwaList": {
"nameCode": "名稱/代碼",
"stage": "階段",
"issueDate": "發行日期",
"subscriptionPrice": "申購單價"
},
"tradeRwa": {
"tabs": {
"overview": "概覽",
"moment": "動態"
},
"fields": {
"productCode": "產品編號",
"valuation": "估值",
"unitPrice": "單價",
"totalSupply": "總發行量",
"perUserLimit": "每人限量",
"launchDate": "預熱時間",
"subscriptionStartDate": "訂閱開始時間",
"subscriptionEndDate": "訂閱結束時間"
},
"units": {
"shares": "份"
},
"about": "About",
"noDescription": "暫無描述。",
"subscribe": "申購",
"subscribeSuccess": "申購成功"
},
"subscribeRwa": {
"title": "申購RWA",
"maxSubscribePlaceholder": "最大可申購數量: {max}",
"unitPrice": "單價",
"availableBalance": "可用餘額",
"confirmSubscribe": "確認申購",
"enterQuantityError": "請輸入申購數量"
},
"loading": {
"loadingMore": "加載更多..."
}
},
"tabs": {
"riwa": "Riwa",
"market": "市場",
"trade": "交易",
"chat": "聊天",
"user": "我的"
},
"common": {
"failedSendCode": "發送驗證碼失敗",
"uploadFile": "上傳文件",
"files": "個文件"
},
"auth": {
"login": {
"title": "登錄",
"loginButton": "登錄",
"signupButton": "註冊",
"username": "郵箱",
"phone": "手機號碼",
"selectCountryCode": "選擇國家/地區",
"enterEmail": "請輸入郵箱",
"enterCode": "請輸入驗證碼",
"enterOtp": "請輸入驗證碼",
"getCode": "獲取驗證碼",
"sending": "發送中...",
"sendCodeSuccess": "驗證碼已發送",
"validation": {
"phoneNumberRequired": "請輸入手機號碼",
"phoneNumberInvalid": "請輸入有效的手機號碼",
"codeRequired": "請輸入驗證碼",
"codeInvalid": "請輸入6位數字驗證碼",
"emailRequired": "請輸入郵箱",
"emailInvalid": "請輸入有效的郵箱地址",
"otpRequired": "請輸入驗證碼",
"otpInvalid": "請輸入6位數字驗證碼"
}
}
},
"settings": {
"title": "設置",
"language": "語言",
"aboutUs": "關於我們",
"clearCache": "清除緩存",
"checkUpdate": "檢查更新",
"cacheCleared": "緩存已清除",
"updateAvailable": "發現新版本",
"currentVersion": "當前版本",
"latestVersion": "最新版本",
"newVersion": "新版本",
"cancel": "取消",
"updateNow": "立即更新",
"alreadyLatest": "已是最新版本",
"checkUpdateFailed": "檢查更新失敗",
"languageTitle": "語言 / Language",
"theme": "主題",
"themeTitle": "外觀主題",
"themeLight": "淺色",
"themeDark": "深色",
"themeAuto": "跟隨系統"
},
"home": {
"title": "首頁",
"rwa": {
"title": "RWA產品",
"buy": "購 入",
"stage": "階段:"
},
"news": {
"title": "動態新聞"
}
}
}

View File

@@ -7,6 +7,8 @@ const emit = defineEmits<{
close: [];
}>();
const { t } = useI18n();
const { data } = safeClient(client.api.rwa.tokenization.lock_options.get({ query: { productId: props.id } }));
const selectedOption = ref<{ months: number; rewardRate: string } | null>(null);
@@ -18,7 +20,7 @@ async function handleSubmit() {
}));
emit("close");
const toast = await toastController.create({
message: "锁仓成功",
message: t("market.lockOption.success"),
duration: 2000,
position: "bottom",
color: "success",
@@ -31,10 +33,10 @@ async function handleSubmit() {
<div class="ion-padding">
<div class="mb-4">
<h3 class="text-lg font-semibold mb-2">
选择锁仓期限
{{ t('market.lockOption.title') }}
</h3>
<p class="text-sm text-text-500">
选择锁仓月数锁仓期间可获得相应奖励
{{ t('market.lockOption.description') }}
</p>
</div>
@@ -47,14 +49,14 @@ async function handleSubmit() {
class="bg-faint rounded-md mb-3"
>
<ion-radio :value="option" justify="space-between" color="primary">
<div>{{ option.months }} 个月 - {{ (Number(option.rewardRate) * 100).toFixed(2) }}% 收益</div>
<div>{{ option.months }} {{ t('market.lockOption.months') }} - {{ (Number(option.rewardRate) * 100).toFixed(2) }}% {{ t('market.lockOption.reward') }}</div>
</ion-radio>
</ion-item>
</ion-radio-group>
</ion-list>
</div>
<ui-empty v-else-if="!data || data.lockOptions.length === 0" description="暂无锁仓选项" />
<ui-empty v-else-if="!data || data.lockOptions.length === 0" :description="t('market.lockOption.empty')" />
<ion-button
expand="block"
@@ -64,7 +66,7 @@ async function handleSubmit() {
class="mt-6 h-12"
@click="handleSubmit"
>
确定
{{ t('market.lockOption.confirm') }}
</ion-button>
</div>
</template>

View File

@@ -42,23 +42,23 @@ function getStatusColor(status: string) {
}
function getStatusText(status: HoldingItem["status"]) {
const statusMap = {
active: t("holdings.status.active"),
tokenized: t("holdings.status.tokenized"),
locked: t("holdings.status.locked"),
active: t("market.holdings.status.active"),
tokenized: t("market.holdings.status.tokenized"),
locked: t("market.holdings.status.locked"),
};
return statusMap[status];
}
async function handleTokenized(item: HoldingItem) {
const alert = await alertController.create({
header: "资产化确认",
message: "将持仓转换为可交易资产(失去分红权),是否继续?",
header: t("market.holdings.tokenizeConfirm.title"),
message: t("market.holdings.tokenizeConfirm.message"),
buttons: [
{
text: "取消",
text: t("market.holdings.tokenizeConfirm.cancel"),
role: "cancel",
},
{
text: "确认",
text: t("market.holdings.tokenizeConfirm.confirm"),
role: "destructive",
handler: async () => {
await safeClient(client.api.rwa.tokenization.immediate.post({ productId: item.productId }));
@@ -117,23 +117,23 @@ onMounted(() => {
<div class="grid grid-cols-2 gap-2 mb-2">
<div class="flex justify-between text-xs">
<span class="text-(--ion-text-color-step-400)">单价</span>
<span class="text-(--ion-text-color-step-400)">{{ t('market.holdings.unitPrice') }}</span>
<span class="text-(--ion-text-color) font-medium">${{ Number(item.subscriptionOrder.unitPrice).toFixed(2) }}</span>
</div>
<div class="flex justify-between text-xs">
<span class="text-(--ion-text-color-step-400)">数量</span>
<span class="text-(--ion-text-color-step-400)">{{ t('market.holdings.quantity') }}</span>
<span class="text-(--ion-text-color) font-medium">{{ Number(item.quantity).toFixed(2) }}</span>
</div>
<div class="flex justify-between text-xs">
<span class="text-(--ion-text-color-step-400)">阶段</span>
<span class="text-(--ion-text-color-step-400)">{{ t('market.holdings.stage') }}</span>
<span class="text-(--ion-text-color) font-medium">{{ item.edition.editionName }}</span>
</div>
<div class="flex justify-between text-xs">
<span class="text-(--ion-text-color-step-400)">总额</span>
<span class="text-(--ion-text-color-step-400)">{{ t('market.holdings.totalAmount') }}</span>
<span class="text-(--ion-text-color) font-medium">${{ item.costValue }}</span>
</div>
<div class="flex justify-between text-xs">
<span class="text-(--ion-text-color-step-400)">总分红</span>
<span class="text-(--ion-text-color-step-400)">{{ t('market.holdings.totalDividend') }}</span>
<span class="text-(--ion-text-color) font-medium">${{ Number(item.totalDividendReceived).toFixed(2) }}</span>
</div>
</div>
@@ -143,10 +143,10 @@ onMounted(() => {
<div v-if="item.status === 'active'" class="flex-1 text-right space-x-2">
<ion-button size="small" @click="handleTokenized(item)">
资产化
{{ t('market.holdings.tokenize') }}
</ion-button>
<ion-button size="small" @click="handleLocked(item)">
立即锁仓
{{ t('market.holdings.lock') }}
</ion-button>
</div>
</div>

View File

@@ -6,6 +6,7 @@ defineProps<{
data: TradableData[];
}>();
const { t } = useI18n();
const router = useRouter();
function gotoTokenized(id: string) {
@@ -18,16 +19,16 @@ function gotoTokenized(id: string) {
<ion-grid>
<ion-row class="ion-align-items-center text-xs text-text-500">
<ion-col size="6">
<div>名称/代码</div>
<div>{{ t('market.tokenizedList.nameCode') }}</div>
</ion-col>
<ion-col>
<div class="text-right">
涨跌幅
{{ t('market.tokenizedList.changeRate') }}
</div>
</ion-col>
<ion-col>
<div class="text-right">
交易价估算
{{ t('market.tokenizedList.tradePrice') }}
</div>
</ion-col>
</ion-row>

View File

@@ -39,10 +39,10 @@ async function handleRefresh(event: RefresherCustomEvent) {
</ion-refresher>
<ui-tabs type="segment" class="tabs" size="small">
<ui-tab-pane name="rwa" title="数字化产品">
<ui-tab-pane name="rwa" :title="t('market.tabs.rwa')">
<RwaTab ref="rwaInst" />
</ui-tab-pane>
<ui-tab-pane name="tokenized" title="代币化产品">
<ui-tab-pane name="tokenized" :title="t('market.tabs.tokenized')">
<TokenizedTab ref="tokenizedInst" />
</ui-tab-pane>
</ui-tabs>

View File

@@ -1,5 +1,7 @@
<script lang='ts' setup>
import RwaOrders from "./components/rwa-orders.vue";
const { t } = useI18n();
</script>
<template>
@@ -7,7 +9,7 @@ import RwaOrders from "./components/rwa-orders.vue";
<ion-header class="ion-no-border">
<ion-toolbar class="ion-toolbar">
<ui-back-button slot="start" />
<ion-title>持仓</ion-title>
<ion-title>{{ t('market.orders.title') }}</ion-title>
</ion-toolbar>
</ion-header>
<ion-content :fullscreen="true" class="ion-padding">

View File

@@ -4,13 +4,15 @@ import type { RwaData } from "@/api/types";
const props = defineProps<{
data: RwaData | null;
}>();
const { t } = useI18n();
</script>
<template>
<div class="mt-2">
<div>
<div class="font-semibold mb-4">
相关文档
{{ t('market.tradeRwa.tabs.about') }}
</div>
<ui-file-preview :file-ids="props.data?.product.proofDocumentIds || []" />

View File

@@ -83,7 +83,7 @@ const { t } = useI18n();
<!-- Rwa status -->
<div class="mt-5">
<div class="font-semibold">
资产状态
{{ t('market.tradeRwa.status') }}
</div>
<div class="text-xs mt-2">
{{ data?.status }}

View File

@@ -76,7 +76,7 @@ function gotoEdit() {
<ui-tab-pane name="overview" :title="t('market.tradeRwa.tabs.overview')">
<RwaBase :data="data" />
</ui-tab-pane>
<ui-tab-pane name="about" title="相关文档" lazy>
<ui-tab-pane name="about" :title="t('market.tradeRwa.tabs.about')" lazy>
<RwaAbout :data="data" />
</ui-tab-pane>
</ui-tabs>