mirror of
https://github.com/lobehub/lobe-chat.git
synced 2026-06-14 03:30:19 +00:00
959c210e86
* chore: stable updater * ✨ feat: add local update testing scripts and configuration - Introduced scripts for local update testing, including setup, server management, and manifest generation. - Added `dev-app-update.local.yml` for local server configuration. - Implemented `generate-manifest.sh` to create update manifests. - Created `run-test.sh` for streamlined testing process. - Updated `README.md` with instructions for local testing setup and usage. - Enhanced `UpdaterManager` to allow forced use of dev update configuration in packaged apps. Signed-off-by: Innei <tukon479@gmail.com> * 🐛 fix(desktop): update UpdaterManager test mocks for new exports Add missing mock exports for @/modules/updater/configs: - isStableChannel - githubConfig - UPDATE_SERVER_URL Add mock for @/env with getDesktopEnv Add setFeedURL method to autoUpdater mock * ✨ feat: add Conductor setup scripts and configuration * ✨ feat: enhance update modal functionality and refactor modal hooks - Added `useUpdateModal` for managing update modal state and behavior. - Refactored `UpdateModal` to utilize new modal management approach. - Improved `useWatchBroadcast` integration for handling update events. - Removed deprecated `createModalHooks` and related components from `FunctionModal`. - Updated `AddFilesToKnowledgeBase` and `CreateNew` modals to use new modal context for closing behavior. This refactor streamlines modal management and enhances the user experience during update processes. Signed-off-by: Innei <tukon479@gmail.com> * update flow (#11513) * ci: simplify desktop release workflow and add renderer tarball * 👷 ci: fix s3 upload credentials for desktop release * 🐛 fix(ci): use compact jq output for GitHub Actions matrix Add -c flag to jq commands to produce single-line JSON output, fixing "Invalid format" error when setting GITHUB_OUTPUT. * 🐛 fix(ci): add administration permission to detect self-hosted runner The /actions/runners API requires administration:read permission to list repository runners. * 🔧 refactor(ci): use workflow input for self-hosted runner selection Replace API-based runner detection with workflow input parameter since GITHUB_TOKEN lacks permission to call /actions/runners API. - Add `use_self_hosted_mac` input (default: true) - Release events always use self-hosted runner - Manual dispatch can toggle via input * feat(updater): add stable channel support with fallback mechanism - Configure electron-builder to generate stable-mac.yml for stable channel - Update CI workflow to handle both stable and latest manifest files - Implement fallback to GitHub provider when primary S3 provider fails - Reset to primary provider after successful update check * 🐛 fix(updater): remove invalid channel config from electron-builder - Remove unsupported 'channel' property from electron-builder config - Create stable*.yml files from latest*.yml in workflow instead - This ensures electron-updater finds correct manifest for stable channel * 🐛 fix(updater): use correct channel based on provider type - S3 provider: channel='stable' → looks for stable-mac.yml - GitHub provider: channel='latest' → looks for latest-mac.yml This fixes the 404 error when falling back to GitHub releases, which only have latest-mac.yml files. * refactor(env): remove unused OFFICIAL_CLOUD_SERVER and update env defaults Update environment variable handling by removing unused OFFICIAL_CLOUD_SERVER and setting defaults for UPDATE_CHANNEL and UPDATE_SERVER_URL from process.env during build stage. * 🐛 fix(ci): add version prefix to stable manifest URLs for S3 S3 directory structure: stable/{version}/xxx.dmg So stable-mac.yml URLs need version prefix: url: LobeHub-2.1.0-arm64.dmg → url: 2.1.1/LobeHub-2.1.0-arm64.dmg * ✨ feat(ci): add renderer tar manifest for integrity verification Creates stable-renderer.yml with SHA512 checksum for lobehub-renderer.tar.gz This allows the desktop app to verify renderer tarball integrity before extraction. * 🐛 fix(ci): fix YAML syntax error in renderer manifest generation * ✨ feat(ci): archive manifest files in version directory * refactor(ci): update desktop release workflows to streamline build process - Removed unnecessary dependencies in the build job for the desktop beta workflow. - Introduced a new gate job to conditionally proceed with publishing based on the success of previous jobs. - Updated macOS file merging to depend on the new gate job instead of the build job. - Simplified macOS runner selection logic in the stable workflow by using GitHub-hosted runners exclusively. Signed-off-by: Innei <tukon479@gmail.com> * refactor(electron): reorganize titlebar components and update imports - Moved titlebar components to a new directory structure for better organization. - Updated import paths for `SimpleTitleBar`, `TitleBar`, and related constants. - Introduced new components for connection management and navigation within the titlebar. - Added constants for title bar height to maintain consistency across components. This refactor enhances the maintainability of the titlebar code and improves the overall structure of the Electron application. Signed-off-by: Innei <tukon479@gmail.com> * feat(ci): add release notes handling to desktop stable workflow - Enhanced the desktop stable release workflow to include release notes. - Updated output variables to capture release notes from the GitHub event. - Adjusted environment variables in subsequent jobs to utilize the new release notes data. This addition improves the clarity and documentation of releases by ensuring that release notes are included in the workflow process. Signed-off-by: Innei <tukon479@gmail.com> * 🐛 fix: call onClose after knowledge base modal closes * 🧪 test: fix UpdaterManager update channel mocks --------- Signed-off-by: Innei <tukon479@gmail.com>
378 lines
25 KiB
JSON
378 lines
25 KiB
JSON
{
|
|
"balance.creditBalance": "Top-up Credits Balance",
|
|
"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",
|
|
"balance.plansUsageDesc": "Subscription credits are used first, then top-up credits",
|
|
"balance.title": "Balance",
|
|
"billing.amount": "Amount",
|
|
"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.empty": "No billing history",
|
|
"billing.endDate": "End Date",
|
|
"billing.history": "Billing History",
|
|
"billing.orderNumber": "Order Number",
|
|
"billing.paid": "Paid",
|
|
"billing.pay": "Pay Now",
|
|
"billing.paymentGateway": "Payment Gateway",
|
|
"billing.paymentMethod": "Payment Method",
|
|
"billing.price": "Subscription Price",
|
|
"billing.startDate": "Start Date",
|
|
"billing.status": "Transaction Status",
|
|
"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.title": "Cancel Subscription",
|
|
"cancelSubscription": "Cancel Subscription",
|
|
"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.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.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.desc": "The plan change will take effect after the current plan expires.",
|
|
"downgradePlans.success": "Subscription cancelled successfully",
|
|
"downgradePlans.title": "Switch to {{plan}}",
|
|
"funds.packages.expired": "Expired",
|
|
"funds.packages.expiresIn": "Expires in {{days}} days",
|
|
"funds.packages.expiresToday": "Expires today",
|
|
"funds.packages.expiringSoon": "Expiring soon",
|
|
"funds.packages.gift": "Gift",
|
|
"funds.packages.giftedOn": "Gifted on {{date}}",
|
|
"funds.packages.noPackages": "No credit packages",
|
|
"funds.packages.purchaseFirst": "Purchase your first credit package",
|
|
"funds.packages.purchasedOn": "Purchased on {{date}}",
|
|
"funds.packages.sort.amountAsc": "Amount: Low to High",
|
|
"funds.packages.sort.amountDesc": "Amount: High to Low",
|
|
"funds.packages.sort.balanceAsc": "Balance: Low to High",
|
|
"funds.packages.sort.balanceDesc": "Balance: High to Low",
|
|
"funds.packages.sort.newest": "Newest",
|
|
"funds.packages.sort.oldest": "Oldest",
|
|
"funds.packages.tabs.active": "Active Packages",
|
|
"funds.packages.tabs.activeCount": "Active ({{count}})",
|
|
"funds.packages.tabs.depleted": "Depleted",
|
|
"funds.packages.tabs.depletedCount": "Depleted ({{count}})",
|
|
"funds.packages.tabs.expired": "Expired",
|
|
"funds.packages.tabs.expiredCount": "Expired ({{count}})",
|
|
"funds.packages.title": "My Credit Packages",
|
|
"funds.topUp.cancel": "Cancel",
|
|
"funds.topUp.custom": "Custom",
|
|
"funds.topUp.maxAmountError": "Single purchase amount cannot exceed ${{max}}",
|
|
"funds.topUp.purchaseError": "Purchase failed, please try again later",
|
|
"funds.topUp.purchaseNow": "Purchase Now",
|
|
"funds.topUp.selectPackage": "Select Package",
|
|
"funds.topUp.subscribeFirst": "Subscribe first",
|
|
"funds.topUp.success.credits": "+{{quantity}} Credits",
|
|
"funds.topUp.success.title": "Top-up Successful",
|
|
"funds.topUp.title": "Purchase Credits",
|
|
"funds.topUp.total": "Total",
|
|
"funds.topUp.unitPrice": "Unit Price",
|
|
"funds.topUp.unitPriceFormat": "${{price}} / 1M {{creditLabel}}",
|
|
"funds.topUp.upgradePrefix": "Upgrade to",
|
|
"funds.topUp.upgradeSuffix": "to save ${{savings}}",
|
|
"funds.topUp.validityInfo": "{{months}} months validity",
|
|
"header.desc": "Usage and subscription management",
|
|
"header.title": "Billing",
|
|
"keyMissMatch.button": "Restore usage and continue conversation",
|
|
"keyMissMatch.description": "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.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.title": "Top-up Successful",
|
|
"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.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.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.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 friends, both get {{reward}}M",
|
|
"limitation.limited.title": "Computing Credits Exhausted",
|
|
"limitation.limited.topup": "Top-Up Credits",
|
|
"limitation.limited.upgrade": "Upgrade to Higher Plan",
|
|
"limitation.providers.lock.addNew": "Subscribe now to create custom AI providers",
|
|
"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.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.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.title": "Text Model Pricing",
|
|
"models.input": "Input",
|
|
"models.intro": "Introduction",
|
|
"models.link": "View",
|
|
"models.output": "Output",
|
|
"models.title": "Models",
|
|
"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.title": "Query Failed",
|
|
"payment.result.title": "Subscription Result",
|
|
"payment.success.actions.startUsing": "Start Using",
|
|
"payment.success.actions.viewBill": "View Billing History",
|
|
"payment.success.desc": "Your subscription plan has been activated successfully",
|
|
"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.inefficient": "Insufficient card balance",
|
|
"payment.upgradeFailed.alert.reason.security": "Stripe system risk control",
|
|
"payment.upgradeFailed.alert.title": "Common reasons for automatic payment failure",
|
|
"payment.upgradeFailed.desc": "Your subscription upgrade failed. Please check and try again",
|
|
"payment.upgradeFailed.title": "Upgrade Failed",
|
|
"payment.upgradeSuccess.desc": "Your subscription plan has been upgraded successfully",
|
|
"payment.upgradeSuccess.title": "Upgrade Successful",
|
|
"plans.btn.contact": "Contact Us",
|
|
"plans.btn.noAction": "Plan Locked",
|
|
"plans.btn.payment": "Purchase",
|
|
"plans.btn.paymentDesc": "Supports credit card / Alipay / WeChat Pay",
|
|
"plans.btn.paymentDescForZarinpal": "Supports credit card",
|
|
"plans.btn.soon": "Coming Soon",
|
|
"plans.changePlan": "Choose Plan",
|
|
"plans.cloud.history": "Unlimited conversation history",
|
|
"plans.cloud.sync": "Global cloud sync",
|
|
"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.buy": "Purchase Computing Credits",
|
|
"plans.credit.buyDesc": "Also supports purchasing computing credits on demand",
|
|
"plans.credit.none": "No built-in computing credits",
|
|
"plans.credit.tip": "{{credit}} free credits per month",
|
|
"plans.credit.title": "Computing Credits",
|
|
"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.embeddingStorage.embeddings": "entries",
|
|
"plans.embeddingStorage.title": "Vector Storage",
|
|
"plans.embeddingStorage.tooltip": "One document page (1000-1500 characters) generates approximately 1 vector entry. (Estimated using OpenAI Embeddings, may vary by model)",
|
|
"plans.features.agents": "Curated Agent Market",
|
|
"plans.features.ceAgents": "Community Agent Market",
|
|
"plans.features.cePlugins": "Community Plugin Market",
|
|
"plans.features.internet": "Smart Web Search",
|
|
"plans.features.plugins": "Exclusive Premium Plugins",
|
|
"plans.features.showAll": "View All Features",
|
|
"plans.features.title": "Premium Features",
|
|
"plans.fileStorage.title": "File Storage",
|
|
"plans.fileStorage.tooltip": "File storage for storing files, images, and other data",
|
|
"plans.free": "Free",
|
|
"plans.freeTrail": "Register to get free trial of {{name}}, no credit card required",
|
|
"plans.includes": "Benefits include:",
|
|
"plans.includesExtra": "All benefits in {{name}}, plus:",
|
|
"plans.knowledgeBase.desc": "Use files and knowledge base in conversations",
|
|
"plans.knowledgeBase.filetype": "Supports PDF / MD / DOC / XLS / PPT and other formats",
|
|
"plans.knowledgeBase.title": "Files & Knowledge Base",
|
|
"plans.knowledgeBase.tooltip": "Supports file upload and knowledge base features. Upload files, images, audio, video and more. Create knowledge bases for easy file management. Use files and knowledge base in conversations for richer experiences.",
|
|
"plans.llm.customAPI": "Global mainstream model custom API service",
|
|
"plans.llm.messageRequest": "Unlimited message requests",
|
|
"plans.llm.title": "Model Service",
|
|
"plans.llm.tooltip": "Add private model Provider API while enjoying cloud sync",
|
|
"plans.message.count": "Approximately {{number}} messages",
|
|
"plans.message.more": "More models in plan comparison",
|
|
"plans.message.normalLLM": "Standard Models",
|
|
"plans.message.proLLM": "Premium Models",
|
|
"plans.message.tooltip": "Estimated based on average {{number}} tokens per message",
|
|
"plans.mostPicked": "Most Popular",
|
|
"plans.navs.monthly": "Monthly",
|
|
"plans.navs.payonce": "One-time",
|
|
"plans.navs.yearly": "Yearly",
|
|
"plans.payonce.cancel": "Cancel",
|
|
"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.plan.enterprise.contactSales": "Contact Sales",
|
|
"plans.plan.enterprise.title": "Enterprise",
|
|
"plans.plan.free.desc": "For first-time users",
|
|
"plans.plan.free.title": "Free",
|
|
"plans.plan.hobby.desc": "For users with their own API who pay as they go",
|
|
"plans.plan.hobby.title": "Hobby",
|
|
"plans.plan.premium.desc": "Designed for professional users who frequently use AI",
|
|
"plans.plan.premium.title": "Premium",
|
|
"plans.plan.starter.desc": "For occasional AI users",
|
|
"plans.plan.starter.title": "Starter",
|
|
"plans.plan.ultimate.desc": "For heavy users who need complex AI conversations",
|
|
"plans.plan.ultimate.title": "Ultimate",
|
|
"plans.storage.title": "Data Storage",
|
|
"plans.subscribe": "Subscribe",
|
|
"plans.support.hobby": "Community Forum",
|
|
"plans.support.premium": "Priority Email Support",
|
|
"plans.support.starter": "Email and Community Forum",
|
|
"plans.support.title": "Support",
|
|
"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.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.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}}\".",
|
|
"qa.list.embeddings.q": "How is vector storage calculated?",
|
|
"qa.list.free.a": "{{name}} has always adhered to open source principles. For professional developers, you can use all open source capabilities through self-deployment of the community version. In {{cloud}}, we provide all registered users with {{credit}} free computing credits per month, ready to use without complex configuration. If you need more usage, you can subscribe to {{starter}}, {{premium}} or {{ultimate}}.",
|
|
"qa.list.free.q": "Can {{name}} be used for free?",
|
|
"qa.list.limit.a": "{{cloud}} subscription plans are divided into {{starter}}, {{premium}} and {{ultimate}}, each providing different computing credits. If your current plan credits are insufficient, we recommend upgrading. You can also purchase credit packages on the <fundsLink>\"{{funds}}\"</fundsLink> page for pay-as-you-go usage. Alternatively, you can set up a custom model API key to use API credits purchased from other sources.",
|
|
"qa.list.limit.q": "What if I run out of computing credits?",
|
|
"qa.list.management.a": "On the {{subscribe}} page, you can \"Upgrade / Downgrade\" your current subscription plan, or switch between yearly and monthly billing. Through \"{{usage}}-{{management}}\" you can go to Stripe for subscription management, and you can cancel your subscription at any time. After cancellation, you will be automatically downgraded to the free version when your current plan expires.",
|
|
"qa.list.management.q": "How do I change or cancel my subscription?",
|
|
"qa.support.community": "Community Support",
|
|
"qa.support.email": "Email Support",
|
|
"qa.title": "FAQ",
|
|
"recurring.day": "Daily",
|
|
"recurring.fullYear": "Full Year",
|
|
"recurring.monthly": "Monthly Billing",
|
|
"recurring.oneMonth": "One Month",
|
|
"recurring.oneYear": "One Year",
|
|
"recurring.payonce": "One-time Payment",
|
|
"recurring.perMonth": "Per Month",
|
|
"recurring.perYear": "Per Year",
|
|
"recurring.sixMonth": "Six Months",
|
|
"recurring.threeMonth": "Three Months",
|
|
"recurring.title": "Billing Cycle",
|
|
"recurring.yearly": "Yearly Billing",
|
|
"referral.copy.codeSuccess": "Referral code copied",
|
|
"referral.copy.linkSuccess": "Referral link copied",
|
|
"referral.edit.button": "Edit",
|
|
"referral.edit.cancel": "Cancel",
|
|
"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",
|
|
"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.stats.availableBalance": "Available Balance",
|
|
"referral.stats.description": "View your referral statistics",
|
|
"referral.stats.title": "Referral Overview",
|
|
"referral.stats.totalInvites": "Total Invites",
|
|
"referral.stats.totalRewarded": "Valid Conversions",
|
|
"referral.stats.totalRewardedAmount": "Total Earnings",
|
|
"referral.table.columns.createdAt": "Registration Time",
|
|
"referral.table.columns.inviteeEmail": "Invitee Email",
|
|
"referral.table.columns.inviterRewardAmount": "My Reward",
|
|
"referral.table.columns.rewardedAt": "Reward Time",
|
|
"referral.table.columns.status": "Status",
|
|
"referral.table.columns.suspectedReason": "Anomaly Reason",
|
|
"referral.table.status.registered": "Registered",
|
|
"referral.table.status.revoked": "Revoked",
|
|
"referral.table.status.rewarded": "Rewarded",
|
|
"referral.table.status.suspected": "Suspected Anomaly",
|
|
"referral.table.title": "Referral History",
|
|
"sessionCard.title": "Ready to leave the free plan? Upgrade to enjoy premium features.",
|
|
"summary.desc": "This amount only includes subscription service expenses.",
|
|
"summary.dueBy": "Due on {{date}}",
|
|
"summary.nextPayment": "Your Next Payment",
|
|
"summary.paymentInformation": "Billing Information",
|
|
"summary.title": "Billing Summary",
|
|
"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.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.title": "Switch to Yearly Billing",
|
|
"tab.billing": "Billing Management",
|
|
"tab.funds": "Credits Management",
|
|
"tab.plans": "Subscription Plans",
|
|
"tab.referral": "Referral Rewards",
|
|
"tab.spend": "Credits Details",
|
|
"tab.usage": "Usage Statistics",
|
|
"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.title": "Upgrade to {{plan}}",
|
|
"usage.credit.addon.desc": "Quota resets in {{time}}",
|
|
"usage.credit.addon.used": "Top-up Credits",
|
|
"usage.credit.desc": "Credits usage for AI chat, image generation, speech synthesis",
|
|
"usage.credit.detail": "Usage statistics for the past {{day}} days",
|
|
"usage.credit.free.desc": "Quota resets in {{time}}",
|
|
"usage.credit.free.expired": "Expired on {{date}}",
|
|
"usage.credit.free.used": "Free Credits",
|
|
"usage.credit.referral.desc": "Reward credits from inviting friends",
|
|
"usage.credit.referral.used": "Referral Reward Credits",
|
|
"usage.credit.subscription.desc": "Quota resets in {{time}}",
|
|
"usage.credit.subscription.used": "Subscription Credits",
|
|
"usage.credit.time.days": "{{days}} days",
|
|
"usage.credit.time.daysAndHours": "{{days}} days {{hours}} hours",
|
|
"usage.credit.time.hours": "{{hours}} hours",
|
|
"usage.credit.title": "Computing Credits Usage",
|
|
"usage.overview.charge": "Charges",
|
|
"usage.overview.included": "Plan Usage",
|
|
"usage.overview.onDemand": "On-demand",
|
|
"usage.overview.product": "Product Item",
|
|
"usage.overview.title": "Usage Overview",
|
|
"usage.storage.desc": "Data storage can be released by manual cleanup",
|
|
"usage.storage.embeddings.used": "Vector Storage",
|
|
"usage.storage.file.used": "File Usage",
|
|
"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.phone.label": "Phone Number",
|
|
"zarinpal.infoModal.phone.placeholder": "Please enter phone number",
|
|
"zarinpal.infoModal.phone.rule": "Please enter a valid phone number",
|
|
"zarinpal.infoModal.submit": "Purchase",
|
|
"zarinpal.infoModal.title": "Fill in Required Information"
|
|
}
|