{{ t('tabOperationalReports') }}
{{ t('operationalReportCohortHint') }}
{{ t('reportMetricDefinitionsDisclosure') }}
{{ t('reportReworkTitle') }}
{{ t('reportReworkCoverageWarning') }} {{ t('reportReworkUnscopedEvents') }}: {{ operationalReworkSummary.unscopedEventCounts.REWORK_REQUESTED + operationalReworkSummary.unscopedEventCounts.REWORK_STARTED + operationalReworkSummary.unscopedEventCounts.DELIVERY_READY + operationalReworkSummary.unscopedEventCounts.DELIVERY_ACCEPTED }}
{{ t('reportReworkProjectOnly') }}
{{ t('reportDeliveryTitle') }}
{{ t('reportDeliveryDefinition') }} {{ t('reportDeliveryHistoryCaveat') }}
{{ t('reportDeliveryProjectOnly') }}
{{ t('reportQuoteConversionTitle') }}
{{ t('reportQuoteDefinition') }} {{ t('reportQuoteMissingHistory') }}: {{ operationalQuoteSummary.ordersMissingVersionHistory }}
{{ t('reportQuoteAccountOnly') }}
| {{ t('reportProject') }} | {{ t('status') }} | {{ t('reportDeadline') }} | {{ t('reportSegments') }} | {{ t('reportTargetsPresent') }} | {{ t('reportTargetFillPct') }} | {{ t('reportHumanReview') }} | {{ t('reportPipelineRuns') }} | {{ t('reportPipelineQuality') }} | {{ t('reportProviderUsage') }} |
|---|---|---|---|---|---|---|---|---|---|
| {{ project.status }} | {{ project.deadline.replace('T', ' ') }} · {{ t('reportDeadline' + project.deadlineStatus) }} | {{ project.totalSegments }} | {{ project.doneSegments }} | {{ project.progressPct }}% | {{ project.humanReviewSegments }}/{{ project.totalSegments }} ({{ project.humanReviewRatePercent == null ? '—' : project.humanReviewRatePercent + '%' }}) | {{ project.pipelineQueuedRuns }}/{{ project.pipelineRunningRuns }}/{{ project.pipelineSucceededRuns }}/{{ project.pipelineFailedRuns }} · {{ project.pipelineRuns }} | {{ project.qualityReviewRuns }}/{{ project.qualityBlockedRuns }}/{{ project.exportReadyRuns }} · {{ project.qualityEvaluatedRuns }} | {{ project.providerCalls }} / {{ project.providerUnpricedCalls }} · {{ project.providerTokens }} · ¥{{ formatProviderMicros(project.providerKnownEstimatedCostMicros) }} |
{{ t('reportReviewItemsTitle') }} · #{{ operationalReviewProject.projectId }}
{{ documentWorkspace.view === 'editor' && taskResult ? taskResult.fileName : (documentWorkspace.view === 'hidden-tasks' ? t('hiddenTasks') : t('tabTranslate')) }}
{{ t('formatCapabilitiesIntro') }}
{{ t('formatCapabilitiesLoading') }}
{{ t('formatCapabilitiesUnavailable') }}
{{ t(terminologyProjectId ? 'terminologyPreviewProjectScope' : 'terminologyPreviewScope') }}
- {{ term.sourceTerm }} → {{ term.targetTerm }}{{ term.domain }}
{{ t('terminologyPreviewNoMatches') }}
{{ translationStatusText || t('translatingHint') }}
{{ t('docTasks') }} {{ translationHistory.length }}
| {{ t('fileName') }} | {{ t('translationEngine') }} | {{ t('status') }} | {{ t('progress') }} | {{ t('createdAt') }} | {{ t('action') }} |
|---|---|---|---|---|---|
| {{ task.selectedModel || task.selectedProvider || '—' }} | {{ t(documentWorkspace.statusKey(task)) }} | {{ task.completedSegments || 0 }} / {{ task.totalSegments || 0 }} |
{{ task.createdAt ? String(task.createdAt).replace('T',' ').slice(0,16) : '—' }} | ||
| {{ t('docNoMatch') }} | |||||
✎ {{ t('imageRefineTitle') }} {{ t('imageRefineHint') }}
{{ t('clientPortal') }}
{{ t('supportedFormatsShort') }}
{{ t('customerWorkspaceTitle') }}
{{ t('customerWorkspaceHint') }}
{{ t('emptyTranslateText') }}
{{ t('supportedLanguages') }}
{{ t('demoStepDownloadText') }}
{{ t('demoStepTranslateText') }}
{{ t('demoStepReviewText') }}
{{ t('demoStepExportText') }}
📚 {{ t('terminologyWorkflowTitle') }}
{{ terminologyWorkflowHint() }}
{{ t('pasteTermText') }}
| {{ t('sourceTerm') }} | {{ t('suggestedTranslation') }} | {{ t('domain') }} | {{ t('action') }} |
|---|---|---|---|
| {{ term.sourceTerm }} | {{ term.targetTerm }} | {{ term.domain }} |
|
{{ t('addTermHint') }}
| {{ t('sourceTerm') }} | {{ t('targetText') }} | {{ t('domain') }} | {{ t('action') }} |
|---|---|---|---|
| {{ term.sourceTerm }} |
{{ term.targetTerm }}
|
{{ term.domain }} |
|
💾 {{ t('translationMemoryTitle') }}
{{ t('tmPageHint') }}
{{ entry.sourceText }}
{{ entry.targetText }}
{{ entry.sourceText }}
{{ entry.targetText }}
👥 {{ t('teamMemoryTitle') }}
{{ t('teamMemoryHint') }}
{{ entry.sourceText }}
{{ entry.targetText }}
{{ entry.sourceText }}
{{ entry.targetText }}
{{ t('tabProjects') }}
{{ projectListView.statusCounts.all }}{{ projectList.length === 0 ? t('noProjects') : t('noFilteredProjects') }}
| {{ t('projectName') }} | {{ t('projectLanguageDirection') }} | {{ t('status') }} | {{ t('wordCount') }} | {{ t('createdAt') }} | {{ t('action') }} |
|---|---|---|---|---|---|
| {{ p.sourceLang }} {{ p.targetLang }} | {{ t(p.status === 'DRAFT' ? 'draft' : p.status === 'IN_PROGRESS' ? 'inProgress' : p.status === 'REVIEW' ? 'review' : p.status === 'DONE' ? 'done' : 'unknown') }} | {{ formatNumber(p.wordCount || 0) }} | {{ p.createdAt ? String(p.createdAt).substring(0, 10) : t('unknown') }} |
{{ projectDetail.name }}
{{ t('projectInformation') }}
{{ t('projectDetailInformationHint') }}
- {{ t('client') }}
- {{ projectDetail.clientName || '—' }}
- {{ t('team') }}
- {{ projectDetail.teamName || '—' }}
- {{ t('domain') }}
- {{ projectDetail.domain || t('translatorDomainUnset') }}
- {{ t('wordCount') }}
- {{ projectDetail.wordCount || 0 }}
- {{ t('deadline') }}
- {{ projectDetail.deadline ? projectDetail.deadline.substring(0,16) : '—' }}
- {{ t('priority') }}
- {{ projectDetail.priority === 'HIGH' ? t('priorityHigh') : projectDetail.priority === 'LOW' ? t('priorityLow') : t('priorityMedium') }}
- {{ t('description') }}
- {{ projectDetail.description }}
⋮ {{ t('projectManagerActions') }}
{{ editLanguageAssetsLoading ? t('loadingProjectLanguageAssets') : t('projectLanguageAssetHint') }}
| {{ t('user') }} | {{ t('domain') }} | {{ t('translatorAvailability') }} | {{ t('translatorTeamLoad') }} | {{ t('translatorRate') }} | {{ t('translatorEstimate') }} | |
|---|---|---|---|---|---|---|
| {{ resourceMemberName(candidate.userId) }} | {{ candidate.domainMatch === 'EXACT' ? t('translatorDomainExact') : t('translatorDomainFallback') }} | {{ candidate.availability === 'AVAILABLE' ? t('translatorAvailable') : t('translatorLimited') }} | {{ candidate.teamLoadComplete ? candidate.teamOpenSegments : t('translatorLoadUnknown') }} | {{ formatCnyEstimate(candidate.rateCnyPerThousandWords) }} | {{ formatCnyEstimate(candidate.estimatedSupplierCostCny) }} |
{{ t('commercialCustomerAmount') }}: {{ formatCnyCents(commercialEstimates[0].customerAmountCents) }}
{{ formatCnyCents(commercialEstimates[0].estimatedSupplierCostCents) }}
{{ formatCnyCents(commercialEstimates[0].estimatedContributionCents) }}
{{ t('commercialEstimateHistory') }}
- {{ projectNotificationStatusLabel(delivery.status) }} {{ t('projectEmailDeliveryAttempts') }}: {{ delivery.attemptCount }} {{ t('projectEmailDeliveryUpdated') }}: {{ formatProjectNotificationTime(delivery.updatedAt) }} {{ t('projectEmailDeliverySentAt') }}: {{ formatProjectNotificationTime(delivery.sentAt) }} {{ t('projectEmailDeliveryNextAttempt') }}: {{ formatProjectNotificationTime(delivery.nextAttemptAt) }} {{ t('projectEmailDeliveryFailure') }}
👥 {{ t('assignment') }}
| {{ t('user') }} | {{ t('segmentUnit') }} | {{ t('status') }} |
|---|---|---|
| {{ a.userName }} {{ a.documentName }} | {{ segDisplayLabel(a.segmentStart) }}-{{ segDisplayLabel(a.segmentEnd) }} | {{ a.status }} |
{{ t('projectDocuments') }}
{{ t('projectDocumentSummary', { shown: filteredProjectDocuments.length, total: projectDocuments.length }) }}
| {{ t('fileName') }} | {{ t('segmentUnit') }} | {{ t('uploadedAt') }} | {{ t('projectDetailActions') }} |
|---|---|---|---|
| {{ doc.fileName }}{{ t('projectDocumentHistorical') }} | {{ doc.segCount }} | {{ (doc.createdAt || '').substring(0,16) }} |
{{ t('tabMyTasks') }}
{{ t('taskInboxSubtitle') }}
{{ t('taskInboxNoMatchHint') }}
| {{ t('taskInboxTask') }} | {{ t('taskInboxLanguage') }} | {{ t('taskInboxType') }} | {{ t('taskInboxStatusProgress') }} | {{ t('taskInboxDeadline') }} | {{ t('taskInboxAction') }} |
|---|---|---|---|---|---|
{{ item.projectName }} |
{{ taskInboxLanguageName(item.sourceLang) }} → {{ taskInboxLanguageName(item.targetLang) }}— | {{ taskInboxTypeLabel(item.kind) }} | {{ taskInboxStatusLabel(item.state) }}{{ taskInboxProgressLabel(item) }}{{ t('reviewQueueHighCount', {count: item.riskCount}) }} | {{ item.dueAt.replace('T', ' ').substring(0, 16) }}{{ t('taskInboxNoDueDate') }} |
{{ t('priorityAssignmentsHeading') }}
⚖️ {{ t('compareTitle') }}
👥 {{ t('teamManagement') }}
{{ t('teamManagementHint') }}
{{ t('noTeams') }}
| {{ t('name') }} | {{ t('email') }} | {{ t('role') }} | {{ t('action') }} |
|---|---|---|---|
| {{ member.userName }} | {{ member.userEmail }} | {{ t((member.role || '').toLowerCase()) }} |
{{ t('languageAssetViewPublished') }}
💰 {{ t('tabBilling') }}
| 订单号 | 套餐 | 金额 | 方式 | 状态 | 下单时间 | 操作 |
|---|---|---|---|---|---|---|
| {{ o.orderNo }} | {{ o.planName }} | ¥{{ billingYuan(o.amountCents) }} | {{ o.payMethod === 'ALIPAY' ? '支付宝' : '微信' }} | {{ statusLabel(o.status) }} | {{ (o.createdAt || '').replace('T',' ').slice(0,19) }} | |
| 暂无订单 | ||||||
套餐:{{ selectedPlan.name }}
金额:¥{{ billingYuan(selectedPlan.amountCents) }} / 年
付款后请提交支付凭证,管理员核销后自动开通套餐额度。
当前订单:{{ currentOrder ? currentOrder.orderNo : '' }} · 金额 ¥{{ currentOrder ? billingYuan(currentOrder.amountCents) : '0.00' }}
付款完成后,点击下方「提交凭证」上传支付截图或填写交易单号
✅ {{ t('tabAdminBilling') }}
{{ t('adminBillingOrdersHeading') }}
{{ t('adminBillingPendingHint', { count: adminBillingPendingCount() }) }}
| 订单号 | 用户 | 套餐 | 金额 | 方式 | 状态 | 操作 |
|---|---|---|---|---|---|---|
| {{ o.orderNo }} | {{ (o.userId || '').slice(0,8) }} | {{ o.planName }} | ¥{{ billingYuan(o.amountCents) }} | {{ o.payMethod === 'ALIPAY' ? '支付宝' : '微信' }} | {{ statusLabel(o.status) }} | |
| {{ adminOrders.length === 0 ? t('adminBillingNoOrders') : t('adminBillingNoMatches') }} | ||||||
套餐:{{ adminOrderDetail.planName }} · 金额 ¥{{ billingYuan(adminOrderDetail.amountCents) }} · {{ adminOrderDetail.payMethod === 'ALIPAY' ? '支付宝' : '微信' }}
状态:{{ statusLabel(adminOrderDetail.status) }}
凭证类型:{{ adminOrderDetail.proof.proofType === 'IMAGE' ? '支付截图' : '交易单号' }}
交易单号:{{ adminOrderDetail.proof.transactionNo }}
备注:{{ adminOrderDetail.proof.note }}
提交时间:{{ (adminOrderDetail.proof.submittedAt || '').replace('T',' ').slice(0,19) }}
{{ t('adminBillingPaymentHeading') }}
{{ t('adminBillingPaymentIntro') }}
{{ t('adminBillingReportsHeading') }}
{{ t('adminBillingReportsIntro') }}
{{ t('adminBillingProjectProgress') }}
| 项目 | 状态 | 分段 | 已译 | 进度 |
|---|---|---|---|---|
| {{ t('adminBillingReportsEmpty') }} | ||||
| {{ p.name }} | {{ p.status }} | {{ p.totalSegments }} | {{ p.doneSegments }} | {{ p.progressPct }}% |
{{ t('adminBillingTranslatorWorkload') }}
| 译员 | 项目ID | 区间 | 已完成 |
|---|---|---|---|
| {{ t('adminBillingReportsEmpty') }} | |||
| {{ t.userName }} | {{ t.projectId }} | {{ t.start }}-{{ t.end }} | {{ t.doneCount }} |
{{ t('adminReworkTitle') }}
{{ t('clientOrderStatus' + status) }} {{ adminReworkStatusCount(status) }}
{{ status === 'REWORK_REQUESTED' ? t('adminReworkRequestedHint') : t('adminReworkAssignedHint') }}
{{ t('adminUsersTitle') }}
{{ t('adminUsersCount', {total: adminUsersTotal}) }}
{{ t('adminUsersMoreActions') }}
- {{ t('email') }}
- {{ adminSelectedUser.email }}
- {{ t('nameOrCompany') }}
- {{ adminSelectedUser.name || '-' }}
- {{ t('adminUsersPlanLabel') }}
- {{ adminSelectedUser.plan || 'FREE' }}
- {{ t('adminUsersStatusFilter') }}
- {{ adminSelectedUser.disabled ? t('adminUsersDisabled') : t('adminUsersEnabled') }}
- {{ t('adminUsersUsage') }}
- {{ Number(adminSelectedUser.wordsUsed || 0).toLocaleString() }} / {{ Number(adminSelectedUser.wordsLimit || 0).toLocaleString() }}{{ t('wordsReserved') }} {{ Number(adminSelectedUser.wordsReserved || 0).toLocaleString() }} · {{ t('wordsAvailable') }} {{ Number(adminSelectedUser.wordsAvailable || 0).toLocaleString() }}
- {{ t('adminUsersRegistered') }}
- {{ adminSelectedUser.createdAt ? adminSelectedUser.createdAt.replace('T',' ').slice(0,16) : '-' }}
- {{ t('adminUsersLastLogin') }}
- {{ adminSelectedUser.lastLoginAt ? adminSelectedUser.lastLoginAt.replace('T',' ').slice(0,16) : '-' }}
- {{ t('adminUsersRegisterIp') }}
- {{ adminSelectedUser.registerIp || '-' }}
- {{ t('adminUsersLastLoginIp') }}
- {{ adminSelectedUser.lastLoginIp || '-' }}
- {{ t('domain') }} / {{ t('style') }}
- {{ adminSelectedUser.preferredDomain || '-' }} / {{ adminSelectedUser.preferredStyle || '-' }}
{{ entry.details }}
{{ t('adminProviderBudgetTitle') }}
{{ t('adminProviderBudgetReadinessTitle') }}
{{ adminProviderBudgetReadiness().ready ? t('adminProviderBudgetReadinessReady') : (adminProviderBudgetReadiness().checking ? t('adminProviderBudgetReadinessChecking') : t('adminProviderBudgetReadinessAttention')) }}
- {{ t('adminProviderBudgetReadinessPolicyInactive') }}
- {{ t('adminProviderBudgetReadinessCapsMissing') }}
- {{ t('adminProviderBudgetReadinessEnforcementOff') }}
- {{ t('adminProviderBudgetReadinessWorkerOff') }}
- {{ t('adminProviderBudgetReadinessUnknown') }}
{{ t('adminQaRecoveryTitle') }}
{{ t('adminProviderBudgetPolicy') }} · {{ t('adminProviderBudgetState' + adminProviderBudgetPolicy.state) }}
{{ t('adminProviderBudgetHint' + adminProviderBudgetPolicy.state) }}
{{ t('adminProviderBudgetLedger') }}
{{ t('adminProviderBudgetLatest50') }}
| {{ t('adminProviderBudgetTask') }} | {{ t('adminProviderBudgetProvider') }} | {{ t('adminProviderBudgetHeld') }} | {{ t('adminProviderBudgetSettled') }} | {{ t('adminProviderBudgetStatus') }} | {{ t('adminProviderBudgetUpdated') }} |
|---|---|---|---|---|---|
| {{ row.originalFileName || adminProviderBudgetShortTaskId(row.taskId) }} {{ adminProviderBudgetShortTaskId(row.taskId) }} | {{ row.provider }} / {{ row.model }} | ¥{{ formatProviderMicros(row.reservedMicros) }} | ¥{{ formatProviderMicros(row.settledMicros) }} | {{ t('adminProviderBudgetStatus' + row.status) }} | {{ row.updatedAt || '-' }} |
| {{ adminProviderBudgetLedger.jobs && adminProviderBudgetLedger.jobs.length ? t('adminProviderBudgetNoMatches') : t('adminProviderBudgetEmpty') }} | |||||
{{ t('adminProviderBudgetHolds') }}
{{ t('adminProviderBudgetReconcileWarning') }}
| {{ t('adminProviderBudgetTask') }} | {{ t('adminProviderBudgetProvider') }} | {{ t('adminProviderBudgetHoldAmount') }} | {{ t('adminProviderBudgetActualYuan') }} | {{ t('adminProviderBudgetReason') }} | {{ t('adminProviderBudgetReconcile') }} |
|---|---|---|---|---|---|
| {{ adminProviderBudgetShortTaskId(hold.operationId || hold.taskId) }}{{ t('adminProviderBudgetOperation' + hold.operationKind) }} | {{ hold.pricingKey }} | ¥{{ formatProviderMicros(hold.reservedMicros) }} |
{{ t('adminProjectNotificationTitle') }}
{{ t('adminProjectNotificationHint') }}
{{ adminProjectNotificationShortId(row.deliveryId) }}
{{ t('adminProjectNotificationShowFullId') }}
{{ row.deliveryId }}🔑 {{ t('apiKeyManagement') }}
{{ t('apiKeyHint') }}
{{ t('noApiKeys') }}
{{ t('navDashboard') }}
{{ t('dashboardSubtitle') }}
{{ t('dashboardRecentTitle') }}
{{ t('dashboardRecentDescription') }}
| {{ t('dashboardFileColumn') }} | {{ t('dashboardStatusColumn') }} | {{ t('dashboardProgressColumn') }} | {{ t('dashboardUpdatedColumn') }} | {{ t('dashboardActionColumn') }} |
|---|---|---|---|---|
|
{{ task.originalFileName || task.taskId }}{{ task.selectedModel || task.selectedProvider || 'LingFlow AI' }}
|
{{ documentWorkspace.category(task) === 'failed' ? t('dashboardTranslationFailed') : t(documentWorkspace.statusKey(task)) }} {{ task.errorMessage }} |
{{ task.completedSegments || 0 }} / {{ task.totalSegments || 0 }}
|
{{ (task.updatedAt || task.completedAt || task.createdAt || '').replace('T', ' ').slice(0, 16) || '—' }} |
{{ t('navProfile') }}
{{ t('pageProfileDesc') }}
{{ t('navImage') }}
{{ t('imageTranslateModeHint') }}