feat(referral): add backfill referral code i18n keys

Add translations for backfill referral code feature:
- errors.alreadyBound, errors.backfillExpired, errors.invalidCode, errors.selfReferral
- rules.backfill.* (title, description, placeholder, submit, success, etc.)
- rules.missedCode with link component
This commit is contained in:
YuTengjing
2025-12-31 16:59:13 +08:00
parent f7cbfe4497
commit bbf62ce97c
3 changed files with 121 additions and 39 deletions
+13
View File
@@ -271,15 +271,28 @@
"referral.edit.hint": "Supports 2-8 letters, numbers or underscores",
"referral.edit.placeholder": "Enter referral code",
"referral.edit.save": "Save",
"referral.errors.alreadyBound": "You have already bound an invite code",
"referral.errors.backfillExpired": "Backfill period has expired. Cannot backfill after 3 days of registration",
"referral.errors.codeExists": "This referral code is already in use, please choose another",
"referral.errors.invalidCode": "Invite code does not exist, please check and try again",
"referral.errors.invalidFormat": "Invalid referral code format, please enter 2-8 letters, numbers or underscores",
"referral.errors.selfReferral": "You cannot use your own invite code",
"referral.errors.updateFailed": "Update failed, please try again later",
"referral.inviteCode.description": "Share your exclusive referral code to invite friends to register",
"referral.inviteCode.title": "My Referral Code",
"referral.inviteLink.description": "Copy the link and share with friends. Complete registration to receive rewards",
"referral.inviteLink.title": "Referral Link",
"referral.rules.backfill.alreadyBound": "You have already bound an invite code",
"referral.rules.backfill.description": "Forgot to enter invite code? You can backfill within 3 days of registration",
"referral.rules.backfill.expiredTip": "Backfill period has expired. Cannot backfill after 3 days of registration",
"referral.rules.backfill.link": "Backfill Invite Code",
"referral.rules.backfill.placeholder": "Enter invite code",
"referral.rules.backfill.submit": "Confirm Binding",
"referral.rules.backfill.success": "Invite code bound successfully",
"referral.rules.backfill.title": "Backfill Invite Code",
"referral.rules.description": "Learn about referral reward program rules",
"referral.rules.expiry": "Credit validity: Available referral credits will be cleared after 100 days of user inactivity",
"referral.rules.missedCode": "Missed invite code: You can <0>backfill</0> within 3 days of registration",
"referral.rules.priority": "Credit consumption priority: Free credits → Subscription credits → Referral credits → Top-up credits",
"referral.rules.registration": "Registration method: Invited users register via referral link or enter referral code on registration page",
"referral.rules.reward": "Reward: Referrer and invitee each receive {{reward}}M credits",
+13
View File
@@ -271,15 +271,28 @@
"referral.edit.hint": "支持 2-8 位字母、数字或下划线",
"referral.edit.placeholder": "请输入推荐码",
"referral.edit.save": "保存",
"referral.errors.alreadyBound": "你已经绑定过邀请码",
"referral.errors.backfillExpired": "补填期限已过,注册超过三天后无法补填",
"referral.errors.codeExists": "该推荐码已被使用,请更换",
"referral.errors.invalidCode": "邀请码不存在,请检查后重试",
"referral.errors.invalidFormat": "推荐码格式无效,请输入 2-8 位字母、数字或下划线",
"referral.errors.selfReferral": "不能使用自己的邀请码",
"referral.errors.updateFailed": "更新失败,请稍后重试",
"referral.inviteCode.description": "分享您的专属推荐码,邀请好友注册",
"referral.inviteCode.title": "我的推荐码",
"referral.inviteLink.description": "复制链接并分享给好友,完成注册即可获得奖励",
"referral.inviteLink.title": "推荐链接",
"referral.rules.backfill.alreadyBound": "你已经绑定过邀请码",
"referral.rules.backfill.description": "忘记填写邀请码?注册三天内可以补填",
"referral.rules.backfill.expiredTip": "补填期限已过,注册超过三天后无法补填",
"referral.rules.backfill.link": "补填邀请码",
"referral.rules.backfill.placeholder": "请输入邀请码",
"referral.rules.backfill.submit": "确认绑定",
"referral.rules.backfill.success": "邀请码绑定成功",
"referral.rules.backfill.title": "补填邀请码",
"referral.rules.description": "了解推荐奖励计划规则",
"referral.rules.expiry": "点数有效期:用户 100 天未活跃后,推荐奖励点数将被清除",
"referral.rules.missedCode": "忘记填写邀请码:注册三天内可以<0>补填邀请码</0>",
"referral.rules.priority": "点数使用优先级:免费点数 → 订阅点数 → 推荐点数 → 充值点数",
"referral.rules.registration": "注册方式:被邀请用户通过推荐链接注册或在注册页输入推荐码",
"referral.rules.reward": "奖励:邀请人和被邀请人各获得 {{reward}}M 点数",
+95 -39
View File
@@ -1,6 +1,7 @@
export default {
'balance.creditBalance': 'Top-up Credits Balance',
'balance.hobbyDesc': '{{hobby}} does not include subscription credits, you need to configure model API or top up',
'balance.hobbyDesc':
'{{hobby}} does not include subscription credits, you need to configure model API or top up',
'balance.link.history': 'Top-up History',
'balance.link.usage': 'View Usage',
'balance.plansUsage': 'Subscription Credits',
@@ -10,7 +11,8 @@ export default {
'billing.closed': 'Closed',
'billing.created': 'Payment Date',
'billing.draft': 'Draft',
'billing.draftTooltip': 'This draft invoice was generated by a new subscription and will be automatically charged soon',
'billing.draftTooltip':
'This draft invoice was generated by a new subscription and will be automatically charged soon',
'billing.empty': 'No billing history',
'billing.endDate': 'End Date',
'billing.history': 'Billing History',
@@ -25,28 +27,34 @@ export default {
'billing.subscriptionId': 'Subscription ID',
'billing.unpaid': 'Unpaid',
'billing.view': 'View',
'cancelPlan.alert': 'You will still enjoy the benefits until the current plan expires ({{date}}). You can resubscribe at any time before expiration.',
'cancelPlan.desc': 'After cancellation, you will be downgraded to the free version when the current plan expires.',
'cancelPlan.alert':
'You will still enjoy the benefits until the current plan expires ({{date}}). You can resubscribe at any time before expiration.',
'cancelPlan.desc':
'After cancellation, you will be downgraded to the free version when the current plan expires.',
'cancelPlan.title': 'Cancel Subscription',
'cancelSubscription': 'Cancel Subscription',
'compare.hobbyCreditTooltip': 'Does not include monthly computing credits, you need to configure your own model API',
'compare.hobbyCreditTooltip':
'Does not include monthly computing credits, you need to configure your own model API',
'compare.monthlyCredit': 'Monthly Computing Credits',
'compare.title': 'Plan Comparison',
'compareAllPlans': 'View All Plans',
'comparePlans': 'View Plans',
'createSubscriptionError': 'Failed to create subscription',
'currentPlan.cancelAlert': 'Subscription will be cancelled after {{canceledAt}}. You can still restore it in "Manage Subscription" before then',
'currentPlan.cancelAlert':
'Subscription will be cancelled after {{canceledAt}}. You can still restore it in "Manage Subscription" before then',
'currentPlan.downgradeAlert': 'Will be downgraded to {{plan}} after {{downgradedAt}}.',
'currentPlan.management': 'Manage Subscription',
'currentPlan.notIncluded': 'Not included in current plan',
'currentPlan.paymentExpired': 'This subscription will expire on {{expiredAt}}, please plan your usage accordingly',
'currentPlan.paymentExpired':
'This subscription will expire on {{expiredAt}}, please plan your usage accordingly',
'currentPlan.seeAllFeaturesAndComparePlans': 'See all features and compare plans',
'currentPlan.title': 'Current Plan',
'discount.add': 'Add',
'discount.maxOff': 'Up to {{percent}}% off',
'discount.off': '{{percent}}% off',
'discount.save': 'Save',
'downgradePlans.alert': 'You will still enjoy the benefits until the current plan expires ({{date}}). The new plan will take effect after the current plan expires.',
'downgradePlans.alert':
'You will still enjoy the benefits until the current plan expires ({{date}}). The new plan will take effect after the current plan expires.',
'downgradePlans.desc': 'The plan change will take effect after the current plan expires.',
'downgradePlans.success': 'Subscription cancelled successfully',
'downgradePlans.title': 'Switch to {{plan}}',
@@ -93,30 +101,39 @@ export default {
'Due to an occasional system failure, your current subscription usage is temporarily inactive. Please click the button below to restore usage and continue the conversation. If this happens repeatedly, please contact us via email (support@lobehub.com)',
'keyMissMatch.title': 'Restore Subscription Usage Now',
'limitation.chat.success.action': 'Continue Chatting',
'limitation.chat.success.desc': 'Your {{plan}} subscription has been upgraded successfully. Enjoy AI chatting. Your current plan includes:',
'limitation.chat.success.desc':
'Your {{plan}} subscription has been upgraded successfully. Enjoy AI chatting. Your current plan includes:',
'limitation.chat.success.title': 'Upgrade Successful',
'limitation.chat.topupSuccess.action': 'Continue Chatting',
'limitation.chat.topupSuccess.desc': 'Your top-up credits are now active. Enjoy AI chatting. Your current plan includes:',
'limitation.chat.topupSuccess.desc':
'Your top-up credits are now active. Enjoy AI chatting. Your current plan includes:',
'limitation.chat.topupSuccess.title': 'Top-up Successful',
'limitation.expired.desc': 'Your {{plan}} computing credits expired on {{expiredAt}}. Upgrade your plan now to get computing credits.',
'limitation.expired.desc':
'Your {{plan}} computing credits expired on {{expiredAt}}. Upgrade your plan now to get computing credits.',
'limitation.expired.title': 'Computing Credits Expired',
'limitation.hobby.action': 'Configured, continue chatting',
'limitation.hobby.configAPI': 'Configure API',
'limitation.hobby.desc': 'Your free computing credits have been exhausted. Please configure a custom model API to continue.',
'limitation.hobby.desc':
'Your free computing credits have been exhausted. Please configure a custom model API to continue.',
'limitation.hobby.docs': 'View configuration docs',
'limitation.hobby.tip': 'Remember to switch to a model with custom API Key',
'limitation.hobby.title': 'Please Configure Model Service API',
'limitation.image.success.action': 'Continue Generating',
'limitation.image.success.desc': 'Your {{plan}} subscription has been upgraded successfully. Enjoy AI image generation. Your current plan includes:',
'limitation.image.success.desc':
'Your {{plan}} subscription has been upgraded successfully. Enjoy AI image generation. Your current plan includes:',
'limitation.image.success.title': 'Upgrade Successful',
'limitation.image.topupSuccess.action': 'Continue Generating',
'limitation.image.topupSuccess.desc': 'Your top-up credits are now active. Enjoy AI image generation. Your current plan includes:',
'limitation.image.topupSuccess.desc':
'Your top-up credits are now active. Enjoy AI image generation. Your current plan includes:',
'limitation.image.topupSuccess.title': 'Top-up Successful',
'limitation.limited.action': 'Upgrade Now',
'limitation.limited.advanceFeature': 'Upgrade to enjoy premium features:',
'limitation.limited.desc': 'Your {{plan}} computing credits have been exhausted. Upgrade now to get more credits.',
'limitation.limited.descUltimate': 'Your {{plan}} computing credits have been exhausted. Please top up credits to continue.',
'limitation.limited.referralTip': 'Invite new users to register, and you and your friend will each receive {{reward}}M credits',
'limitation.limited.desc':
'Your {{plan}} computing credits have been exhausted. Upgrade now to get more credits.',
'limitation.limited.descUltimate':
'Your {{plan}} computing credits have been exhausted. Please top up credits to continue.',
'limitation.limited.referralTip':
'Invite new users to register, and you and your friend will each receive {{reward}}M credits',
'limitation.limited.title': 'Computing Credits Exhausted',
'limitation.limited.topup': 'Top Up Credits',
'limitation.limited.upgrade': 'Upgrade to Higher Plan',
@@ -124,14 +141,17 @@ export default {
'limitation.providers.lock.enableProvider': 'Subscribe now to enable this AI provider',
'limitation.providers.lock.menuItem': 'Subscribe now to configure custom API service',
'limitation.providers.mask.action': 'Upgrade Now',
'limitation.providers.mask.subTitle': 'Custom API service is only available for paid plans. Upgrade now to enjoy global mainstream model services',
'limitation.providers.mask.subTitle':
'Custom API service is only available for paid plans. Upgrade now to enjoy global mainstream model services',
'limitation.providers.mask.title': 'Subscribe now to use custom API service',
'limitation.providers.prompter.action': 'Upgrade Now',
'limitation.providers.prompter.subTitle': 'Custom API service is only available for paid plans. Upgrade now to enjoy global mainstream model services',
'limitation.providers.prompter.subTitle':
'Custom API service is only available for paid plans. Upgrade now to enjoy global mainstream model services',
'limitation.providers.prompter.title': 'Subscribe now to use custom API service',
'limitation.providers.tooltip': 'Custom API service is only available for paid plans',
'modelPricing.button': 'View Pricing Documentation',
'modelPricing.desc': '{{name}} uses Credits to measure AI model usage. The table below shows computing credits per 1M Tokens.',
'modelPricing.desc':
'{{name}} uses Credits to measure AI model usage. The table below shows computing credits per 1M Tokens.',
'modelPricing.title': 'Text Model Pricing',
'models.input': 'Input',
'models.intro': 'Introduction',
@@ -141,7 +161,8 @@ export default {
'payDiffPrice': 'Pay Difference',
'payment.error.actions.billing': 'Billing Management',
'payment.error.actions.home': 'Back to Home',
'payment.error.desc': 'Subscription ID: {{id}} not found. If you have questions, please contact us via email',
'payment.error.desc':
'Subscription ID: {{id}} not found. If you have questions, please contact us via email',
'payment.error.title': 'Query Failed',
'payment.result.title': 'Subscription Result',
'payment.success.actions.startUsing': 'Start Using',
@@ -150,7 +171,8 @@ export default {
'payment.success.title': 'Subscription Successful',
'payment.switchSuccess.desc': 'Your subscription plan will automatically switch on {{switchAt}}',
'payment.switchSuccess.title': 'Switch Successful',
'payment.upgradeFailed.alert.reason.bank3DS': 'Your bank requires 3DS verification, please confirm again',
'payment.upgradeFailed.alert.reason.bank3DS':
'Your bank requires 3DS verification, please confirm again',
'payment.upgradeFailed.alert.reason.inefficient': 'Insufficient card balance',
'payment.upgradeFailed.alert.reason.security': 'Stripe system risk control',
'payment.upgradeFailed.alert.title': 'Common reasons for automatic payment failure',
@@ -170,7 +192,8 @@ export default {
'plans.cloud.title': 'Cloud Service',
'plans.credit.api': 'Custom API',
'plans.credit.apiDesc': 'Requires your own model API configuration',
'plans.credit.apiProvider': 'Supports 20+ mainstream model providers including OpenAI / Anthropic / OpenRouter',
'plans.credit.apiProvider':
'Supports 20+ mainstream model providers including OpenAI / Anthropic / OpenRouter',
'plans.credit.buy': 'Purchase Computing Credits',
'plans.credit.buyDesc': 'Also supports purchasing computing credits on demand',
'plans.credit.none': 'No built-in computing credits',
@@ -179,7 +202,8 @@ export default {
'plans.credit.tooltip': 'Monthly model message computing credits',
'plans.current': 'Current Plan',
'plans.downgradePlan': 'Target Downgrade Plan',
'plans.downgradeTip': 'You have already switched subscription. You cannot perform other operations until the switch is complete',
'plans.downgradeTip':
'You have already switched subscription. You cannot perform other operations until the switch is complete',
'plans.embeddingStorage.embeddings': 'entries',
'plans.embeddingStorage.title': 'Vector Storage',
'plans.embeddingStorage.tooltip':
@@ -219,7 +243,8 @@ export default {
'plans.payonce.ok': 'Confirm Selection',
'plans.payonce.popconfirm':
'After one-time payment, you must wait until subscription expires to switch plans or change billing cycle. Please confirm your selection.',
'plans.payonce.tooltip': 'One-time payment requires waiting until subscription expires to switch plans or change billing cycle',
'plans.payonce.tooltip':
'One-time payment requires waiting until subscription expires to switch plans or change billing cycle',
'plans.plan.enterprise.contactSales': 'Contact Sales',
'plans.plan.enterprise.title': 'Enterprise',
'plans.plan.free.desc': 'For first-time users',
@@ -241,9 +266,11 @@ export default {
'plans.support.ultimate': 'Priority Chat and Email Support',
'plans.target': 'Target Plan',
'plans.unlimited': 'Unlimited',
'qa.desc': 'If your question is not answered, check <1>Product Documentation</1> for more FAQs, or contact us.',
'qa.desc':
'If your question is not answered, check <1>Product Documentation</1> for more FAQs, or contact us.',
'qa.detail': 'View Details',
'qa.list.credit.a': 'Computing credits are a metric used by {{cloud}} to measure AI model usage when calling models. Different AI models consume different amounts of computing credits.',
'qa.list.credit.a':
'Computing credits are a metric used by {{cloud}} to measure AI model usage when calling models. Different AI models consume different amounts of computing credits.',
'qa.list.credit.q': 'What are computing credits?',
'qa.list.embeddings.a':
'Vector storage is not equal to the original size of your uploaded or imported dataset, but is calculated based on the vectorization of pure text content in your files. For example, a 1-page PDF file (1000-1500 characters) may only take up about 1 vector storage entry when extracted and vectorized into pure text. You can view your usage under "{{usage}}".',
@@ -279,21 +306,46 @@ export default {
'referral.edit.hint': 'Supports 2-8 letters, numbers or underscores',
'referral.edit.placeholder': 'Enter referral code',
'referral.edit.save': 'Save',
'referral.errors.alreadyBound': 'You have already bound an invite code',
'referral.errors.backfillExpired':
'Backfill period has expired. Cannot backfill after 3 days of registration',
'referral.errors.codeExists': 'This referral code is already in use, please choose another',
'referral.errors.invalidFormat': 'Invalid referral code format, please enter 2-8 letters, numbers or underscores',
'referral.errors.invalidCode': 'Invite code does not exist, please check and try again',
'referral.errors.invalidFormat':
'Invalid referral code format, please enter 2-8 letters, numbers or underscores',
'referral.errors.selfReferral': 'You cannot use your own invite code',
'referral.errors.updateFailed': 'Update failed, please try again later',
'referral.inviteCode.description': 'Share your exclusive referral code to invite friends to register',
'referral.inviteCode.description':
'Share your exclusive referral code to invite friends to register',
'referral.inviteCode.title': 'My Referral Code',
'referral.inviteLink.description': 'Copy the link and share with friends. Complete registration to receive rewards',
'referral.inviteLink.description':
'Copy the link and share with friends. Complete registration to receive rewards',
'referral.inviteLink.title': 'Referral Link',
'referral.rules.backfill.alreadyBound': 'You have already bound an invite code',
'referral.rules.backfill.description':
'Forgot to enter invite code? You can backfill within 3 days of registration',
'referral.rules.backfill.expiredTip':
'Backfill period has expired. Cannot backfill after 3 days of registration',
'referral.rules.backfill.link': 'Backfill Invite Code',
'referral.rules.backfill.placeholder': 'Enter invite code',
'referral.rules.backfill.submit': 'Confirm Binding',
'referral.rules.backfill.success': 'Invite code bound successfully',
'referral.rules.backfill.title': 'Backfill Invite Code',
'referral.rules.description': 'Learn about referral reward program rules',
'referral.rules.expiry': 'Credit validity: Available referral credits will be cleared after 100 days of user inactivity',
'referral.rules.priority': 'Credit consumption priority: Free credits → Subscription credits → Referral credits → Top-up credits',
'referral.rules.registration': 'Registration method: Invited users register via referral link or enter referral code on registration page',
'referral.rules.expiry':
'Credit validity: Available referral credits will be cleared after 100 days of user inactivity',
'referral.rules.missedCode':
'Missed invite code: You can <0>backfill</0> within 3 days of registration',
'referral.rules.priority':
'Credit consumption priority: Free credits → Subscription credits → Referral credits → Top-up credits',
'referral.rules.registration':
'Registration method: Invited users register via referral link or enter referral code on registration page',
'referral.rules.reward': 'Reward: Referrer and invitee each receive {{reward}}M credits',
'referral.rules.title': 'Program Rules',
'referral.rules.validInvitation': 'Valid invitation: Invitee registers with your referral code and performs one valid action',
'referral.rules.validOperation': 'Valid action criteria: Send one message on Chat page, or generate one image on image page',
'referral.rules.validInvitation':
'Valid invitation: Invitee registers with your referral code and performs one valid action',
'referral.rules.validOperation':
'Valid action criteria: Send one message on Chat page, or generate one image on image page',
'referral.stats.availableBalance': 'Available Balance',
'referral.stats.description': 'View your referral statistics',
'referral.stats.title': 'Referral Overview',
@@ -320,9 +372,11 @@ export default {
'summary.usageThisMonth': 'View your usage this month.',
'summary.viewBillingHistory': 'View Payment History',
'switchPlan': 'Switch Plan',
'switchToMonthly.desc': 'After switching, monthly billing will take effect after the current yearly plan expires.',
'switchToMonthly.desc':
'After switching, monthly billing will take effect after the current yearly plan expires.',
'switchToMonthly.title': 'Switch to Monthly Billing',
'switchToYearly.desc': 'After switching, yearly billing will take effect immediately after paying the difference. Start date inherits from previous plan.',
'switchToYearly.desc':
'After switching, yearly billing will take effect immediately after paying the difference. Start date inherits from previous plan.',
'switchToYearly.title': 'Switch to Yearly Billing',
'tab.billing': 'Billing Management',
'tab.funds': 'Credits Management',
@@ -333,7 +387,8 @@ export default {
'upgrade': 'Upgrade',
'upgradeNow': 'Upgrade Now',
'upgradePlan': 'Upgrade Plan',
'upgradePlans.desc': 'Plan upgrade takes effect immediately after paying the difference. Start date inherits from previous plan.',
'upgradePlans.desc':
'Plan upgrade takes effect immediately after paying the difference. Start date inherits from previous plan.',
'upgradePlans.title': 'Upgrade to {{plan}}',
'usage.credit.addon.desc': 'Quota resets in {{time}}',
'usage.credit.addon.used': 'Top-up Credits',
@@ -361,7 +416,8 @@ export default {
'usage.storage.title': 'Data Storage',
'usage.title': 'This Month Usage',
'usage.used': 'Used',
'zarinpal.infoModal.desc': 'Due to policy requirements, please complete the following personal information before placing an order:',
'zarinpal.infoModal.desc':
'Due to policy requirements, please complete the following personal information before placing an order:',
'zarinpal.infoModal.phone.label': 'Phone Number',
'zarinpal.infoModal.phone.placeholder': 'Please enter phone number',
'zarinpal.infoModal.phone.rule': 'Please enter a valid phone number',