{{ loginError }}
{{ t('enterRegisterEmail') }}
{{ t('noAccount') }}
{{ regError }}
{{ t('hasAccount') }}
{{ headerContextLabel }}
{{ currentUser.name }} {{ currentUser.plan }}
{{ formatNumber(currentUser.wordsUsed) }} / {{ formatNumber(currentUser.wordsLimit) }} {{ t('wordsReserved') }} {{ formatNumber(currentUser.wordsReserved) }} · {{ t('wordsAvailable') }} {{ formatNumber(currentUser.wordsAvailable) }}
{{ t('uiLanguage') }}
{{ t('onlineCollaborators', { count: onlineCollaborators.length }) }}
{{ t('upgradePlan') }}
{{ t('upgradePlanHint') }}

{{ t('tabOperationalReports') }}

{{ t('operationalReportCohortHint') }}

{{ operationalProjectsError }}
{{ t('loading') }}
{{ t('reportScope') }}: {{ operationalReportSummary.scope === 'TEAM' ? t('reportTeamScopeLabel') : t('reportPersonalScope') }} ({{ operationalReportSummary.teamId }}) · {{ t('reportProjectFilter') }}: {{ operationalReportSummary.projectId }}
{{ t('reportAppliedRange') }}: {{ operationalReportSummary.from }} – {{ operationalReportSummary.toExclusive }} ({{ operationalReportSummary.timezone }})
{{ t('reportAsOf') }}: {{ operationalReportSummary.asOf }} ({{ operationalReportSummary.timezone }})
{{ t('reportMetricDefinitionsDisclosure') }}
{{ t('reportMetricDefinition') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.progress) }}
{{ t('reportDeadline') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.deadline) }}
{{ t('reportHumanReviewDefinition') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.humanReview) }} · {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.humanReviewRate) }}
{{ t('reportPipelineRuns') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.pipelineRuns) }}
{{ t('reportPipelineQuality') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.qualitySnapshot) }}
{{ t('reportProviderUsage') }}: {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.providerUsage) }} {{ t('reportMetricDefinition' + operationalReportSummary.metricDefinitions.providerCost) }}

{{ t('reportReworkTitle') }}

{{ t('loading') }}
{{ operationalReworkError }}
{{ operationalReworkSummary.from }} – {{ operationalReworkSummary.toExclusive }} ({{ operationalReworkSummary.timezone }}) · {{ t(operationalReworkSummary.scope === 'TEAM_ORDERS' ? 'reportReworkTeamScope' : 'reportReworkAccountScope') }}
{{ t('reportReworkRequested') }}
{{ operationalReworkSummary.knownCycleEventCounts.REWORK_REQUESTED }}
{{ t('reportReworkStarted') }}
{{ operationalReworkSummary.knownCycleEventCounts.REWORK_STARTED }}
{{ t('reportReworkDelivered') }}
{{ operationalReworkSummary.knownCycleEventCounts.DELIVERY_READY }}
{{ t('reportReworkAccepted') }}
{{ operationalReworkSummary.knownCycleEventCounts.DELIVERY_ACCEPTED }}

{{ 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('loading') }}
{{ operationalDeliveryError }}
{{ operationalDeliverySummary.from }} – {{ operationalDeliverySummary.toExclusive }} ({{ operationalDeliverySummary.timezone }}) · {{ t(operationalDeliverySummary.scope === 'TEAM_ORDERS' ? 'reportDeliveryTeamScope' : 'reportDeliveryAccountScope') }}
{{ t('reportDeliveryOnTime') }}
{{ operationalDeliverySummary.onTime }}
{{ t('reportDeliveryLate') }}
{{ operationalDeliverySummary.late }}
{{ t('reportDeliveryEligible') }}
{{ operationalDeliverySummary.eligibleDenominator }}
{{ t('reportDeliveryRate') }}
{{ operationalDeliverySummary.onTimeRatePercent == null ? '—' : operationalDeliverySummary.onTimeRatePercent + '%' }}
{{ t('reportDeliveryNoProject') }}
{{ operationalDeliverySummary.noVerifiedProject }}
{{ t('reportDeliveryNoDeadline') }}
{{ operationalDeliverySummary.noDeadline }}

{{ t('reportDeliveryDefinition') }} {{ t('reportDeliveryHistoryCaveat') }}

{{ t('reportDeliveryProjectOnly') }}

{{ t('reportQuoteConversionTitle') }}

{{ t('loading') }}
{{ operationalQuoteError }}
{{ operationalQuoteSummary.from }} – {{ operationalQuoteSummary.toExclusive }} ({{ operationalQuoteSummary.timezone }}) · {{ t('reportQuoteAccountScope') }}
{{ t('reportQuoteProposed') }}
{{ operationalQuoteSummary.proposedQuoteVersions }}
{{ t('reportQuoteApproved') }}
{{ operationalQuoteSummary.approvedQuoteVersions }}
{{ t('reportQuoteNotApproved') }}
{{ operationalQuoteSummary.notApprovedQuoteVersions }}
{{ t('reportQuoteApprovalRate') }}
{{ operationalQuoteSummary.approvalRatePercent == null ? '—' : operationalQuoteSummary.approvalRatePercent + '%' }}

{{ t('reportQuoteDefinition') }} {{ t('reportQuoteMissingHistory') }}: {{ operationalQuoteSummary.ordersMissingVersionHistory }}

{{ t('reportQuoteAccountOnly') }}

{{ t('reportProjectsEmpty') }}
{{ 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 }}

{{ t('loading') }}
{{ operationalReviewError }}
{{ t('reportReviewItemsEmpty') }}
#{{ item.segmentIndex + 1 }} · {{ item.reviewStatus === 'PENDING' ? t('reportReviewStatusPending') : (reviewStatusLabel({ reviewStatus: item.reviewStatus }) || item.reviewStatus || t('unknown')) }} · {{ reportRiskLabel(item.riskLevel) }} · {{ item.targetPresent ? t('reportTargetPresentYes') : t('reportTargetMissing') }}
{{ t('reportPage') }} {{ operationalReviewPage + 1 }} / {{ operationalReviewTotalPages }} · {{ operationalReviewTotal }}
{{ t('reportPage') }} {{ operationalReportSummary.page + 1 }} / {{ operationalReportSummary.totalPages }} · {{ operationalReportSummary.totalProjects }}
{{ t('navGroupProduce') }} / {{ t('tabTranslate') }}

{{ documentWorkspace.view === 'editor' && taskResult ? taskResult.fileName : (documentWorkspace.view === 'hidden-tasks' ? t('hiddenTasks') : t('tabTranslate')) }}

{{ t('docBack') }} {{ t('docContinue') }}
📄 {{ t('uploadDocument') }}

{{ t('formatCapabilitiesIntro') }}

{{ t('formatCapabilitiesLoading') }}

{{ row.label }} {{ row.detail }}
📄 {{ uploadFile ? uploadFile.name : (taskResult.fileName || t('untitled')) }} {{ sourceLang }} → {{ targetLang }}
{{ t('uploadText') }}
{{ t('uploadHint') }}
📄 {{ uploadFile.name }} {{ formatSize(uploadFile.size) }} ✕
{{ t('sourceLanguage') }} {{ t('targetLanguage') }} {{ t('docStrategy') }} {{ t('docAdvanced') }}
{{ t('terminologyProjectLabel') }} {{ t('terminologyProjectHint') }}
{{ t('domain') }} {{ t('style') }}
{{ t('imageRequirementsLabel') }}
{{ t('productionMode') }}
{{ workflowTemplateHint() }}
{{ t('wfAboutToRun') }} {{ chip }} {{ stageInfo.label }}
{{ translating ? t('translating') : t('startTranslate') }}
{{ t(terminologyProjectId ? 'terminologyPreviewProjectTitle' : 'terminologyPreviewTitle') }} · {{ terminologyPreflight.termMatchCount || 0 }}

{{ t(terminologyProjectId ? 'terminologyPreviewProjectScope' : 'terminologyPreviewScope') }}

  • {{ term.sourceTerm }} → {{ term.targetTerm }}{{ term.domain }}

{{ t('terminologyPreviewNoMatches') }}

{{ translationStatusText || t('translatingHint') }}

{{ t('docTasks') }} {{ translationHistory.length }}

{{ t('hiddenTasks') }}
{{ t('loading') }}
📝
{{ t('noTranslationHistory') }}
{{ t('docTasks') }}
{{ t('fileName') }}{{ t('translationEngine') }}{{ t('status') }}{{ t('progress') }}{{ t('createdAt') }}{{ t('action') }}
{{ task.originalFileName || task.taskId }}
{{ task.errorMessage }}
{{ task.selectedModel || task.selectedProvider || '—' }} {{ t(documentWorkspace.statusKey(task)) }} {{ task.completedSegments || 0 }} / {{ task.totalSegments || 0 }} {{ task.createdAt ? String(task.createdAt).replace('T',' ').slice(0,16) : '—' }}
{{ retryingTranslationTasks[task.taskId] ? t('retryingTask') : (task.status === 'FAILED' ? t('retryTask') : (documentWorkspace.category(task) === 'processing' ? t('openTask') : t('docOpen'))) }}{{ t('taskHide') }}
{{ t('docNoMatch') }}
{{ t('docRecent') }} · {{ documentWorkspace.filtered.length }}
{{ documentWorkspace.currentPage }} / {{ documentWorkspace.pageCount }}

{{ t('hiddenTasks') }} {{ hiddenTranslationHistory.totalElements }}

{{ t('hiddenTasksHint') }}

{{ t('loading') }}
📝
{{ t('hiddenTasksEmpty') }}
{{ t('hiddenTasks') }}
{{ t('fileName') }}{{ t('status') }}{{ t('createdAt') }}{{ t('action') }}
{{ task.originalFileName || task.taskId }}
{{ t(documentWorkspace.statusKey(task)) }} {{ task.createdAt ? String(task.createdAt).replace('T',' ').slice(0,16) : '—' }}
{{ t('taskRestore') }}{{ t('taskDeleteAction') }}
{{ hiddenTranslationHistory.totalElements }} · {{ hiddenTranslationHistory.page + 1 }} / {{ Math.max(1, hiddenTranslationHistory.totalPages) }}
{{ hiddenTranslationHistory.page + 1 }} / {{ Math.max(1, hiddenTranslationHistory.totalPages) }}
{{ t('aiTranslationPipeline') }} {{ pipelineOverallStatus().text }}
{{ card.label }}
{{ card.value }}
{{ card.note }}
{{ stage.label }}
{{ stage.statusText }}
{{ stage.message }}
{{ pipelineNextAction() }}
{{ t('aiPreflightReport') }}
{{ t('documentRisk') }}
{{ preflightReport().riskLevel || 'LOW' }}
{{ preflightRiskText() }}
{{ t('workloadAndQuota') }}
{{ preflightReport().totalSegments || 0 }} {{ t('segmentUnit') }} / {{ preflightReport().wordCount || 0 }} {{ t('charUnit') }}
{{ preflightReport().quotaEnough === false ? t('quotaNotEnough') : t('quotaEnough') }}
{{ t('tmReuse') }}
{{ preflightReport().tmHitForecast || 0 }} {{ t('segmentUnit') }} / {{ preflightReport().tmHitRate || 0 }}%
{{ t('highHitMeansLowerCost') }}
{{ t('termOpportunities') }}
{{ preflightReport().termMatchCount || 0 }} {{ t('unitEntries') }}
{{ recommendedWorkflowText() }}
{{ t('translationHistorySwitching') }}
{{ t('humanReviewQueue') }} · {{ unresolvedBlockingCount() }} {{ t('segmentInspector') }} {{ t('collaborate') }} {{ t('docDetails') }} {{ t('extractTermsFromTask') }}
✅ {{ t('translationResult') }} {{ taskResult.fileName || t('untitled') }} · {{ taskResult.totalSegments || 0 }} {{ t('segmentUnit') }}
{{ t('translationStatusMayBeStale') }}
{{ t('translationEngine') }} {{ taskResult.selectedProvider }} / {{ taskResult.selectedModel }} {{ t('engineFallback') }}:{{ taskResult.routeFallbackReason }}
{{ t('providerBudget') }} {{ providerBudgetStatusText(taskResult.providerBudgetStatus) }} {{ t('providerBudgetHeld') }} {{ formatProviderBudgetMicros(taskResult.providerBudgetReservedMicros) }} {{ t('providerBudgetSettled') }} {{ formatProviderBudgetMicros(taskResult.providerBudgetSettledMicros) }} {{ t('providerBudgetLimit') }} {{ formatProviderBudgetMicros(taskResult.providerBudgetLimitMicros) }}
{{ t('dashboardSummary') }}
#{{ focusSegmentLabel() }} / {{ taskResult.totalSegments || 0 }} {{ approvedSegmentCount }} {{ t('confirmed') }} · {{ pendingIssueCount() }} {{ t('filterPending') }}
{{ t('source') }}
{{ focusReviewSegment() ? focusReviewSegment().source : '' }}
{{ t('previousSegment') }}
{{ focusPrevSegment().target }}
{{ t('targetLanguage') }} {{ t('tmHit') }} {{ t('confirmed') }}
{{ hint.severity === 'error' ? t('severityError') : hint.severity === 'warning' ? t('severityWarning') : t('severityUnclassified') }} {{ hint.text }}
↑ {{ t('prevSegment') }} ✓ {{ t('approveAndNext') }} 💬 {{ t('segmentComments') }} {{ t('nextSegment') }} ↓ ⚑ {{ t('nextPending') }} ({{ pendingIssueCount() }}) ▤ {{ t('backToTable') }}
⌨ Ctrl+S {{ t('save') }} · Ctrl+Enter {{ t('approveAndNext') }} · Alt+↓/↑ {{ t('switchSegment') }}
{{ t('aiReports') }}
{{ t('aiProjectManagerReport') }}
{{ deliveryReport().projectManagerSummary }}
{{ deliveryReport().status }}
{{ t('qualityGate') }}
{{ deliveryReport().exportReady ? t('readyForDelivery') : t('needsReviewShort') }}
{{ (deliveryReport().exportChecklist || []).join(' · ') }}
{{ t('reviewAction') }}
{{ deliveryReport().reviewAction }}
{{ t('assetAccumulation') }}
{{ deliveryReport().tmLeverageSummary }}
{{ deliveryReport().termSummary }}
{{ t('documentFormatPromiseTitle') }}
{{ t('outputFormat') }}
{{ documentFormatPromise().inputFormat }} → {{ documentFormatPromise().outputFormat }}
{{ documentFormatPromise().outputFileName }}
{{ t('layoutBoundary') }}
{{ documentFormatPromise().layoutPreservation }}
{{ documentFormatPromise().userMessage }}
{{ documentFormatPromise().limitations.join(' · ') }}
{{ t('qualityAndRoiDashboard') }}
{{ t('qualityAndRoiDashboardHint') }}
{{ qualityRoiDashboard().qualityStatus }}
{{ t('qualityScore') }}
{{ qualityRoiDashboard().qualityScore }}%
{{ t('passedSegments', { count: qualityRoiDashboard().passedSegments || 0 }) }},{{ t('blockedSegments', { count: qualityRoiDashboard().blockedSegments || 0 }) }}
{{ t('manualReviewAmount') }}
{{ t('reviewSegmentsCount', { count: qualityRoiDashboard().reviewSegments || 0 }) }}
{{ qualityRoiDashboard().reviewSummary }}
{{ t('tmReuse') }}
{{ t('tmHitsAndRate', { hits: qualityRoiDashboard().tmHits || 0, rate: qualityRoiDashboard().tmRate || 0 }) }}
{{ t('termMatchCount', { count: qualityRoiDashboard().termMatchCount || 0 }) }}
{{ t('billingSavings') }}
{{ t('savedCharsCount', { count: qualityRoiDashboard().savedChars || 0 }) }}
{{ qualityRoiDashboard().roiSummary }}
{{ t('referenceQuote') }}
{{ t('sourceChars', { count: taskResult.pricing.totalChars || 0 }) }},{{ t('billedChars', { count: taskResult.pricing.effectiveChars || 0 }) }} {{ t('tmAppliedDiscount', { count: taskResult.pricing.tmHitCount, discount: taskResult.pricing.tmHitDiscount }) }}
{{ t('tmDiscountApplied') }}
{{ t('standardTranslation') }}
¥{{ taskResult.pricing.standard.price }}
{{ taskResult.pricing.standard.recommended ? t('recommendedForDoc') : t('suitableForGeneral') }}
{{ t('premiumTranslation') }}
¥{{ taskResult.pricing.premium.price }}
{{ taskResult.pricing.premium.recommended ? t('recommendedForDoc') : t('suitableForHighReview') }}
● {{ t('unsaved') }} {{ saveStatusText() }}
{{ t('docMore') }}
✓ {{ t('approveAndNext') }} ↓ {{ t('nextSegment') }} ⚑ {{ t('nextPending') }} ({{ pendingIssueCount() }})
🔍 {{ t('qaAllSegments', { count: taskResult.totalSegments }) }} ✓ {{ t('batchApprove', { count: selectedCount }) }} 🛡 {{ t('qualityExceptionTitle') }}
📥 {{ downloadButtonLabel() }} 📥 {{ targetOnlyButtonLabel() }} 📥 {{ t('downloadPdfPreservingLayout') }} {{ t('pdfOcrCoverageNote') }} 👁 {{ t('preview') }} ▾ 💾 {{ t('saveEdits') }} 📋 {{ t('copyTargets') }} 📄 {{ t('export') }} ▾
🔄 {{ t('retranslate') }}
{{ t('progress') }} {{ approvedSegmentCount }} / {{ taskResult.totalSegments || 0 }} {{ t('confirmed') }} {{ qaOverallSummary }} {{ qaCompactSummary }} ★ {{ qaOverallQualityScore }}
✎ {{ t('imageRefineTitle') }} {{ t('imageRefineHint') }}
🔄 {{ t('imageRefineButton') }}
{{ t('filter') }}: {{ t('showMap') }}
🔍
{{ t('noSegmentsForFilter') }}
{{ t('selectSegment') }}{{ t('segmentUnit') }}{{ t('source') }}{{ t('target') }}{{ t('action') }}
{{ seg.index }}
{{ pdfOcrProvenanceLabel(seg) }}
{{ t('pdfOcrOrientationReviewHint') }}
{{ t('imageOrientationReviewHint') }}
{{ imageOcrReviewProvenanceLabel(seg) }}
{{ t('imageOcrReviewHint') }}
{{ t('imageOcrLocateSource') }}
{{ segmentStatusLabel(seg) }} {{ reviewStatusLabel(seg) }}
{{ t('qaResult') }} · {{ t('qaDegraded') }}
{{ seg.qaSummary }}
{{ issue.severity === 'error' ? t('severityError') : issue.severity === 'warning' ? t('severityWarning') : t('severityUnclassified') }} {{ qaTypeLabel(issue.type) }} {{ t('source') }}: {{ issue.sourceSpan }} {{ t('target') }}: {{ issue.targetSpan }} {{ t('sourceOffset') }} [{{ issue.sourceStartOffset }}, {{ issue.sourceEndOffset }}) {{ t('targetOffset') }} [{{ issue.targetStartOffset }}, {{ issue.targetEndOffset }}) {{ issue.suggestion }}
{{ t('tmHit') }} {{ t('tmFuzzyHit') }} {{ seg.tmFuzzyMatchScore ? Math.round(seg.tmFuzzyMatchScore * 100) + '%' : '' }}
{{ t('targetTermMismatch') }} {{ ti.sourceTerm }} → {{ ti.expectedTarget }}
{{ t('lowRiskRepairSuggestions') }}
{{ t('repairSuggestionOnlyHint') }}
{{ qaTypeLabel(repair.issueType) }} {{ repair.suggestion }}
Q 💡 ✔ ✨ ▶ 💬

{{ t('clientPortal') }}

{{ t('revisingQuoteVersion', {version: clientRevisionTarget.expectedVersion}) }}
{{ t('dragFileHere') }}
{{ t('supportedFormatsShort') }}
{{ clientFile.name }} ({{ formatSize(clientFile.size) }}) X
{{ clientError }}
{{ t('clientUpload' + clientUploadProgress.status) }} {{ Math.floor(clientUploadProgress.received / clientUploadProgress.total * 100) }}% ({{ clientUploadProgress.received }}/{{ clientUploadProgress.total }})
{{ clientError }}
{{ t('loading') }}
🧒
{{ t('noOrders') }}
{{ order.projectName || order.originalFileName }}
{{ order.createdAt ? order.createdAt.substring(0,16) : '' }} · {{ order.sourceLang }} → {{ order.targetLang }}
{{ t('quoteAmountLabel') }}: {{ order.quoteCurrency || 'CNY' }} {{ (order.quoteAmountCents / 100).toFixed(2) }} · {{ t('quoteBasisLabel') }}: {{ order.quoteCharCount || 0 }} · {{ t('quoteExpiresLabel') }}: {{ order.quoteExpiresAt.substring(0,16) }}
{{ t('quoteExpiredHint') }}
{{ t('deliverySnapshotLabel') }}: {{ order.deliveryFileName }}
{{ t('deliveryQualityDisposition') }}: {{ t('deliveryQuality' + order.deliveryQualityDisposition) }} · {{ t('deliveryQualityReviewCount', {count: order.deliveryQualityReviewCount}) }} · {{ t('deliveryQualityUncheckedCount', {count: order.deliveryQualityUncheckedCount}) }}
{{ t('latestOrderUpdateLabel') }}: {{ order.latestNotification.message }}
{{ t('automaticRevisionRounds') }}: {{ clientRevisionPolicies[order.id].maxAutomaticRevisionRounds }} · {{ t('revisionPolicyFrozen') }}
{{ t('loading') }}
{{ t('quoteVersionLabel', {version: version.quoteVersion}) }} · {{ version.originalFileName || t('historicalFileUnknown') }} · {{ version.sourceLang || '?' }} → {{ version.targetLang || '?' }} · {{ t('domain' + ((version.domain || 'general').charAt(0).toUpperCase() + (version.domain || 'general').slice(1))) }} · {{ version.quoteCurrency || 'CNY' }} {{ ((version.quoteAmountCents || 0) / 100).toFixed(2) }} · {{ t('quoteVersionStatus' + (version.quoteStatus || 'UNKNOWN')) }} · {{ version.createdAt ? version.createdAt.substring(0,16) : '' }} · {{ t('automaticRevisionRounds') }}: {{ clientQuoteRevisionPolicies[order.id + ':' + version.quoteVersion].maxAutomaticRevisionRounds }}
{{ t('clientOrderStatus' + order.status) }} {{ t('deliveryQuality' + order.deliveryQualityDisposition) }} {{ t('deliveryAccepted') }}

{{ t('customerWorkspaceTitle') }}

{{ t('customerWorkspaceHint') }}

{{ t('loading') }}
{{ customerWorkspace.invitationNotice }}
{{ customerWorkspace.invitationError }}
{{ t('loading') }}
{{ customerWorkspace.workspacesError }}
{{ t('customerWorkspaceNoAccess') }}
🌐

{{ t('emptyTranslateText') }}

{{ t('supportedLanguages') }}

{{ t('firstRunTitle') }}
{{ t('firstRunSubtitle') }}
{{ t('downloadDemoSample') }}
1 {{ t('demoStepDownloadTitle') }}

{{ t('demoStepDownloadText') }}

2 {{ t('demoStepTranslateTitle') }}

{{ t('demoStepTranslateText') }}

3 {{ t('demoStepReviewTitle') }}

{{ t('demoStepReviewText') }}

4 {{ t('demoStepExportTitle') }}

{{ t('demoStepExportText') }}

{{ t('demoBoundaryNote') }}

📚 {{ t('terminologyWorkflowTitle') }}

{{ terminologyWorkflowHint() }}

1
{{ t('step1AiExtract') }}
{{ t('step1AiExtractDesc') }}
2
{{ t('step2ReviewSave') }}
{{ t('step2ReviewSaveDesc') }}
3
{{ t('step3ImportExport') }}
{{ t('step3ImportExportDesc') }}
4
{{ t('step4TranslateUse') }}
{{ t('step4TranslateUseDesc') }}
🤖 {{ t('termExtract') }}
{{ termTaskSourceNotice }}
{{ t('sourceLanguage') }} {{ t('targetLanguage') }}

{{ t('pasteTermText') }}

{{ termExtracting ? t('extracting') : t('extractTerms') }} {{ t('loadSampleText') }}
🚀 {{ t('extractedTerms') }} ({{ extractedTerms.length }})
{{ extractedTermLanguagePair.sourceLang }} → {{ extractedTermLanguagePair.targetLang }}
{{ termBatchSaving ? t('saving') : t('batchSaveTerms') }}
{{ t('sourceTerm') }} {{ t('suggestedTranslation') }} {{ t('domain') }} {{ t('action') }}
{{ term.sourceTerm }} {{ term.targetTerm }} {{ term.domain }} ✓
{{ t('pageIndicator', { current: extractedTermPage + 1, total: extractedTermTotalPages, totalElements: extractedTerms.length }) }}
➕ {{ t('addTermManually') }}

{{ t('addTermHint') }}

{{ t('add') }}
📚 {{ t('savedTermbase') }} ({{ termTotalElements }})
{{ t('searchAction') }} {{ t('resetAction') }}
{{ t('csvImportHint') }}
📖
{{ t('emptyTerms') }}
{{ t('sourceTerm') }} {{ t('targetText') }} {{ t('domain') }} {{ t('action') }}
{{ term.sourceTerm }} {{ term.targetTerm }} {{ term.domain }}
{{ t('pageIndicator', { current: termCurrentPage + 1, total: termTotalPages, totalElements: termTotalElements }) }}

💾 {{ t('translationMemoryTitle') }}

{{ t('tmPageHint') }}

{{ t('totalEntries') }} {{ translationMemoryStats.totalEntries || 0 }}
{{ t('tmApprovedCount') }} {{ translationMemoryStats.approvedEntries || 0 }}
{{ t('tmMachineCount') }} {{ translationMemoryStats.machineEntries || 0 }}
{{ t('hitRate') }} {{ (translationMemoryStats.hitRate || 0) }}%
{{ t('recentMemory') }} {{ translationMemoryStats.recentMemoryCount || 0 }}
{{ t('tmGovernanceRules') }}
{{ t('tmLearningPolicy') }}
{{ t('tmLearningPolicyDescription') }}
{{ t('tmRetirementPolicy') }}
{{ t('tmRetirementPolicyDescription') }}
{{ t('tmExportPolicy') }}
{{ t('tmExportPolicyDescription') }}
📥
{{ t('tmImportTitle') }}
{{ t('tmImportHint') }}
✓{{ tmImportResult }}
{{ translationMemoryError }}
正在加载翻译记忆...
暂无已批准翻译记忆。翻译后确认段落,系统会把人工确认的译文沉淀到这里。
原文

{{ entry.sourceText }}

译文

{{ entry.targetText }}

{{ t('memoryAssetManagement') }} {{ translationMemoryPage.totalElements || managedTranslationMemory.length || 0 }} {{ t('unitEntries') }}
{{ t('tmManageLoading') }}
{{ t('tmManageEmpty') }}
{{ t('originalText') }}

{{ entry.sourceText }}

{{ t('translatedText') }}

{{ entry.targetText }}

{{ t('pageIndicator', { current: translationMemoryPage.page + 1, total: translationMemoryPage.totalPages, totalElements: translationMemoryPage.totalElements }) }}

👥 {{ t('teamMemoryTitle') }}

{{ t('teamMemoryHint') }}

{{ t('noTeamSelected') }}

{{ 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.clientName }} {{ p.teamName }} {{ t('teamProject') }} {{ t('personalProject') }} {{ 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') }}
{{ t('projectRange', { start: (projectListView.page - 1) * projectListView.pageSize + 1, end: Math.min(projectListView.page * projectListView.pageSize, projectListView.total), count: projectListView.total }) }}
{{ t('projectPageIndicator', { current: projectListView.page, total: projectListView.pageCount }) }}

{{ projectDetail.name }}

{{ projectDetail.sourceLang }} → {{ projectDetail.targetLang }}
{{ t('customerProjectStatus' + projectDetail.status) }}
{{ t('client') }} {{ projectDetail.clientName }} {{ t('team') }} {{ projectDetail.teamName }} {{ t('wordCount') }} {{ projectDetail.wordCount || 0 }} {{ t('deadline') }} {{ projectDetail.deadline.substring(0,16) }} {{ t('priority') }} {{ projectDetail.priority === 'HIGH' ? t('priorityHigh') : projectDetail.priority === 'LOW' ? t('priorityLow') : t('priorityMedium') }}
{{ t('loadingProgress') }}
{{ t('progress') }} {{ t('total') }} {{ projectProgress.totalSegments }} {{ t('segmentUnit') }}
{{ projectProgress.percentComplete }}%
{{ t('completed') }} {{ projectProgress.doneSegments }} {{ t('inProgress') }} {{ projectProgress.inProgressSegments }} {{ t('pending') }} {{ projectProgress.pendingSegments }}
{{ t('noProgress') }}

{{ 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('projectLanguageAssets') }} · {{ t('projectLanguageAssetNoPermission') }}
{{ t('approvedProjectQuoteTitle') }}
{{ t('loading') }}
{{ approvedProjectQuoteError }}
{{ t('approvedProjectQuoteVersion') }} {{ approvedProjectQuote.quoteVersion }}
{{ t('approvedProjectQuoteApprovedAt') }} {{ approvedProjectQuote.approvedAt ? approvedProjectQuote.approvedAt.replace('T',' ').substring(0,16) : '-' }}
{{ t('approvedProjectQuoteExpiresAt') }} {{ approvedProjectQuote.quoteExpiresAt ? approvedProjectQuote.quoteExpiresAt.replace('T',' ').substring(0,16) : '-' }}
{{ t('approvedProjectQuoteAmount') }} {{ approvedProjectQuote.quoteCurrency }} {{ ((approvedProjectQuote.quoteAmountCents || 0) / 100).toFixed(2) }}
{{ t('approvedProjectQuoteBasis') }} {{ approvedProjectQuote.quoteCharCount || 0 }}
{{ t('approvedProjectQuoteFile') }} {{ approvedProjectQuote.originalFileName }}
{{ t('approvedProjectQuoteScope') }} {{ approvedProjectQuote.sourceLang }} → {{ approvedProjectQuote.targetLang }} · {{ approvedProjectQuote.domain }}
{{ t('translatorResources') }}
{{ t('translatorRecommendationHint') }}
{{ t('translatorRecommendationNeedsDomain') }}
{{ t('loading') }}
{{ recommendationError }}
{{ t('translatorRecommendationEmpty') }}
{{ 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) }}
{{ resourceMemberName(candidate.userId) }}{{ candidate.domainMatch === 'EXACT' ? t('translatorDomainExact') : t('translatorDomainFallback') }}
{{ t('translatorAvailability') }}{{ candidate.availability === 'AVAILABLE' ? t('translatorAvailable') : t('translatorLimited') }}
{{ t('translatorTeamLoad') }}{{ candidate.teamLoadComplete ? candidate.teamOpenSegments : t('translatorLoadUnknown') }}
{{ t('translatorRate') }}{{ formatCnyEstimate(candidate.rateCnyPerThousandWords) }}
{{ t('translatorEstimate') }}{{ formatCnyEstimate(candidate.estimatedSupplierCostCny) }}
{{ t('translatorCostScope') }}
{{ t('commercialEstimateTitle') }}
{{ t('commercialEstimateBoundary') }}
{{ t('loading') }}
{{ commercialEstimateError }}
{{ t('commercialEstimateVersion') }} {{ commercialEstimates[0].version }}
{{ t('commercialCustomerAmount') }}: {{ formatCnyCents(commercialEstimates[0].customerAmountCents) }}
{{ t('commercialSupplierEstimate') }}
{{ formatCnyCents(commercialEstimates[0].estimatedSupplierCostCents) }}
{{ t('commercialContribution') }}
{{ formatCnyCents(commercialEstimates[0].estimatedContributionCents) }}
{{ t('commercialEstimateBasis') }}: {{ commercialEstimates[0].sourceLang }} → {{ commercialEstimates[0].targetLang }} · {{ commercialEstimates[0].domain || t('translatorDomainUnset') }} · {{ t('commercialSourceWords') }} {{ commercialEstimates[0].wordCount || t('translatorCostUnknown') }} · {{ commercialEstimates[0].supplierUserId ? resourceMemberName(commercialEstimates[0].supplierUserId) : t('commercialNoSupplier') }} · {{ formatCnyEstimate(commercialEstimates[0].supplierRateCnyPerThousandWords) }}/{{ t('commercialThousandWords') }}
{{ t('commercialEstimateEmpty') }}
{{ t('commercialEstimateHistory') }}
{{ t('commercialEstimateVersion') }} {{ item.version }} · {{ formatCnyCents(item.customerAmountCents) }} · {{ formatCnyCents(item.estimatedSupplierCostCents) }} · {{ formatCnyCents(item.estimatedContributionCents) }}
{{ t('commercialEstimateCaveat') }}
🔔 {{ t('projectEmailDeliveryHistory') }}
{{ t('loading') }}
{{ projectNotificationDeliveriesError }}
{{ t('projectEmailDeliveryHistoryEmpty') }}
  • {{ 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('loading') }}
📄
{{ t('noDocuments') }}
{{ t('projectDocumentsNoMatch') }}
{{ t('fileName') }}{{ t('segmentUnit') }}{{ t('uploadedAt') }}{{ t('projectDetailActions') }}
{{ doc.fileName }}{{ t('projectDocumentHistorical') }} {{ doc.segCount }} {{ (doc.createdAt || '').substring(0,16) }}
{{ t('projectSegmentBrowserTitle') }} · {{ selectedProjectSegmentDocument.fileName }} {{ t('projectSegmentPageLabel', {page: projectSegmentPage + 1, total: projectSegmentPageCount}) }}
{{ t('loading') }}
{{ projectSegmentsError }}
{{ t('noSegments') }}
#{{ segDisplayLabel(segment.segIndex) }} {{ segment.status }}
{{ segment.sourceText }}
{{ t('personalWorkspace') }}

{{ t('tabMyTasks') }}

{{ t('taskInboxSubtitle') }}

{{ t('taskInboxAttentionSummary', {count: taskInboxView.attentionCount}) }}
{{ t('priorityQueuePartial') }}
{{ t('loading') }}
{{ priorityQueue.length ? t('taskInboxNoMatch') : (reviewInboxError || myWorkItemsError || myTasksError ? t('priorityQueuePartial') : t('priorityQueueEmpty')) }}

{{ 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') }}
{{ taskInboxRangeLabel }}
{{ t('projectPageIndicator', {current: taskInboxView.page, total: taskInboxView.pageCount}) }}
{{ t('taskInboxTypeAssignment') }}

{{ t('priorityAssignmentsHeading') }}

{{ t('loading') }}
⚠️ {{ myTasksError }}
📝
{{ t('noMyTasks') }}
{{ task.projectName || ('#' + task.projectId) }}
{{ task.documentName }}
{{ task.sourceLang }} → {{ task.targetLang }} · {{ t('segmentUnit') }} {{ segDisplayLabel(task.segmentStart) }}-{{ segDisplayLabel(task.segmentEnd) }} · {{ task.doneCount }}/{{ task.segmentEnd - task.segmentStart + 1 }}
{{ t('assignedAt') }}: {{ task.assignedAt.substring(0,16) }}
{{ task.status }}
{{ t('loading') }}
{{ t('noSegments') }}
#{{ segDisplayLabel(seg.segIndex) }}{{ seg.fileName }} {{ seg.status }}
{{ seg.sourceText }}

⚖️ {{ t('compareTitle') }}

→
{{ compareError }}
{{ t('result') }}
{{ t('compareAccountingPending') }}
{{ compareResults.results.filter(function(r){return r.translation}).length }}/{{ compareResults.results.length }} {{ t('engineSuccess') }} · {{ t('best') }}:{{ compareResults.bestEngine.toUpperCase() }}
{{ r.engine.toUpperCase() }} {{ t('best') }} {{ r.error === 'BUDGET_RECONCILIATION_PENDING' ? t('pending') : t('error') }}
⏱ {{ (r.costMs/1000).toFixed(1) }}s
{{ r.translation }}
{{ r.error === 'BUDGET_POLICY_REJECTED' ? t('compareEngineBudgetRejected') : r.error === 'BUDGET_RECONCILIATION_PENDING' ? t('compareAccountingPending') : r.error }}

👥 {{ t('teamManagement') }}

{{ t('teamManagementHint') }}

👥

{{ t('noTeams') }}

{{ team.name }}
{{ t('members') }}: {{ team.memberCount || 0 }} · {{ team.createdAt ? team.createdAt.substring(0,10) : '' }}
{{ t('teamMembers') }}
{{ t('name') }}{{ t('email') }}{{ t('role') }}{{ t('action') }}
{{ member.userName }} {{ member.userEmail }} {{ t((member.role || '').toLowerCase()) }}
👥
{{ t('noMembers') }}
{{ t('languageAssetManagement') }} {{ t('languageAssetScopeHint') }}
{{ t('languageAssetEmpty') }}
{{ asset.name }}{{ asset.sourceLang }} → {{ asset.targetLang }} · {{ asset.latestRevision ? t('languageAssetRevision', { number: asset.latestRevision.revisionNumber || asset.latestRevision }) : t('languageAssetUnpublished') }}
{{ t('languageAssetViewPublished') }}
{{ t('languageAssetDetailLoading') }}
{{ t('languageAssetReadOnly') }}

💰 {{ t('tabBilling') }}

{{ p.name }}
¥{{ billingYuan(p.amountCents) }}/年
额度:{{ p.wordsLimit >= 100000 ? (p.wordsLimit/10000) + ' 万字' : p.wordsLimit + ' 字' }}
{{ code === 'FREE' ? '免费注册即用' : '付款后自动开通,支持支付宝/微信' }}
当前套餐
{{ t('myOrders') }}
订单号 套餐 金额 方式 状态 下单时间 操作
{{ o.orderNo }} {{ o.planName }} ¥{{ billingYuan(o.amountCents) }} {{ o.payMethod === 'ALIPAY' ? '支付宝' : '微信' }} {{ statusLabel(o.status) }} {{ (o.createdAt || '').replace('T',' ').slice(0,19) }}
{{ o.remark || '凭证不符' }}
暂无订单

套餐:{{ selectedPlan.name }}

金额:¥{{ billingYuan(selectedPlan.amountCents) }} / 年

付款后请提交支付凭证,管理员核销后自动开通套餐额度。

支付方式:
收款码
{{ qrEnabled ? '收款码未配置,请联系管理员' : '该支付方式未启用' }}

当前订单:{{ currentOrder ? currentOrder.orderNo : '' }} · 金额 ¥{{ currentOrder ? billingYuan(currentOrder.amountCents) : '0.00' }}

请支付
¥{{ currentOrder ? billingYuan(currentOrder.amountCents) : '0.00' }}
使用 {{ selectedMethod === 'WECHAT' ? '微信' : '支付宝' }} 扫上方收款码付款,转账时请务必备注订单号:
{{ currentOrder ? currentOrder.orderNo : '' }}
付款完成后点击下方「我已付款,提交凭证」,管理员确认后套餐自动开通。

付款完成后,点击下方「提交凭证」上传支付截图或填写交易单号

订单:{{ currentOrder ? currentOrder.orderNo : '' }}

✅ {{ t('tabAdminBilling') }}

{{ t('adminBillingOrdersHeading') }}

{{ t('adminBillingPendingHint', { count: adminBillingPendingCount() }) }}

{{ t('adminBillingOrderCount', { count: adminOrders.length }) }}
订单号 用户 套餐 金额 方式 状态 操作
{{ 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') }}
{{ t('adminBillingPageSummary', { count: adminBillingVisibleOrders().length, page: adminBillingPageCount() ? adminOrderPage + 1 : 0, pages: adminBillingPageCount() }) }}

套餐:{{ 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') }}

{{ cfg.method === 'ALIPAY' ? '支付宝' : '微信' }}

{{ cfg.enabled ? t('adminBillingEnabled') : t('adminBillingDisabled') }}
收款码 {{ t('adminBillingQrMissing') }}
{{ t('adminBillingEnabledQrMissing') }}
{{ t('adminBillingDisabledQrMissing') }}
{{ t('adminBillingDisabledQrConfigured') }}

{{ t('adminBillingReportsHeading') }}

{{ t('adminBillingReportsIntro') }}

{{ t('loading') }}

{{ t('adminReworkTitle') }}

{{ adminReworkError }}

{{ t('adminReworkQueueCap') }}

{{ t('loading') }}
{{ t('adminReworkEmpty') }}

{{ t('clientOrderStatus' + status) }} {{ adminReworkStatusCount(status) }}

{{ status === 'REWORK_REQUESTED' ? t('adminReworkRequestedHint') : t('adminReworkAssignedHint') }}

{{ t('adminReworkOldest') }}: {{ adminReworkOldestAt(status).replace('T',' ').slice(0,16) }}
{{ t('adminReworkStatusEmpty') }}
{{ t('adminReworkNoMatches') }}
{{ order.projectName || order.originalFileName }}
{{ order.clientName }} · {{ order.originalFileName }} · {{ order.sourceLang }} → {{ order.targetLang }}
{{ order.reworkNote }}
{{ t('adminReworkRequestedAt') }}: {{ (order.reworkRequestedAt || '').replace('T',' ').slice(0,16) }}

{{ t('adminUsersTitle') }}

{{ t('adminUsersCount', {total: adminUsersTotal}) }}

{{ t('loading') }}
{{ t('adminUsersEmpty') }}
{{ user.name || user.email }} {{ user.email }} {{ t('adminUsersAdmin') }} {{ t('adminUsersTestAccount') }}
{{ t('adminUsersPlanLabel') }} {{ user.plan || 'FREE' }}
{{ t('adminUsersStatusFilter') }} {{ user.disabled ? t('adminUsersDisabled') : t('adminUsersEnabled') }}
{{ t('adminUsersUsage') }}
{{ Number(user.wordsUsed || 0).toLocaleString() }} / {{ Number(user.wordsLimit || 0).toLocaleString() }}{{ t('wordsReserved') }} {{ Number(user.wordsReserved || 0).toLocaleString() }} · {{ t('wordsAvailable') }} {{ Number(user.wordsAvailable || 0).toLocaleString() }}
{{ t('adminUsersPage', {page: adminUsersPage + 1, pages: Math.max(1, Math.ceil(adminUsersTotal / adminUsersSize)), total: adminUsersTotal}) }}
{{ 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 || '-' }}
{{ t('adminUsersUserFilter') }}
{{ t('loading') }}
{{ t('adminUsersActivityEmpty') }}
{{ entry.action }} {{ entry.resourceType || '-' }} · {{ entry.resourceId || '-' }} · IP: {{ entry.ipAddress }}

{{ entry.details }}

{{ t('adminProviderBudgetTitle') }}

{{ adminProviderBudgetError }}
{{ t('adminProviderBudgetLoading') }}

{{ t('adminProviderBudgetReadinessTitle') }}

{{ adminProviderBudgetReadiness().ready ? t('adminProviderBudgetReadinessReady') : (adminProviderBudgetReadiness().checking ? t('adminProviderBudgetReadinessChecking') : t('adminProviderBudgetReadinessAttention')) }}

{{ adminProviderBudgetReadiness().ready ? t('adminProviderBudgetReadinessReadyLabel') : (adminProviderBudgetReadiness().checking ? t('adminProviderBudgetReadinessCheckingLabel') : t('adminProviderBudgetReadinessAttentionLabel')) }}
{{ t('adminProviderBudgetPolicy') }}{{ adminProviderBudgetPolicy ? t('adminProviderBudgetState' + adminProviderBudgetPolicy.state) : '—' }}
{{ t('adminProviderBudgetCapsReadiness') }}{{ adminProviderBudgetReadiness().policyKnown ? (adminProviderBudgetReadiness().capsConfigured ? t('adminProviderBudgetReadinessConfigured') : t('adminProviderBudgetReadinessMissing')) : '—' }}{{ t('adminProviderBudgetLimit') }} ¥{{ formatProviderMicros(adminProviderBudgetPolicy.limitMicros) }} · {{ t('adminProviderBudgetMonthLimit') }} ¥{{ formatProviderMicros(adminProviderBudgetPolicy.monthLimitMicros) }}
{{ t('adminProviderBudgetEnforced') }}{{ adminProviderBudgetReadiness().policyKnown ? t(adminProviderBudgetReadiness().enforced ? 'adminProviderBudgetYes' : 'adminProviderBudgetReadinessDisabled') : '—' }}
{{ t('adminQaRecoveryWorker') }}{{ adminProviderBudgetReadiness().recoveryKnown ? t(adminProviderBudgetReadiness().workerEnabled ? 'adminProviderBudgetYes' : 'adminProviderBudgetReadinessDisabled') : '—' }}
{{ t('adminProviderBudgetMonthRemaining') }}¥{{ formatProviderMicros(adminProviderBudgetPolicy.monthRemainingMicros) }}
  • {{ t('adminProviderBudgetReadinessPolicyInactive') }}
  • {{ t('adminProviderBudgetReadinessCapsMissing') }}
  • {{ t('adminProviderBudgetReadinessEnforcementOff') }}
  • {{ t('adminProviderBudgetReadinessWorkerOff') }}
  • {{ t('adminProviderBudgetReadinessUnknown') }}

{{ t('adminQaRecoveryTitle') }}

{{ adminQaRecoveryError }}
{{ t('adminQaRecoveryLoading') }}
{{ t('adminQaRecoveryWorker') }}: {{ t(adminQaRecoveryStatus.workerEnabled ? 'adminQaRecoveryEnabled' : 'adminQaRecoveryDisabled') }} {{ t('adminQaRecoveryQueued') }}: {{ adminQaRecoveryStatus.queued }} {{ t('adminQaRecoveryActiveCapacity') }}: {{ adminQaRecoveryStatus.active }} / {{ adminQaRecoveryStatus.activeCapacityLimit }} {{ t('adminQaRecoveryCapacityRejected') }}: {{ adminQaRecoveryStatus.capacityRejectedSegments }} {{ t('adminQaRecoveryLeased') }}: {{ adminQaRecoveryStatus.leased }} {{ t('adminQaRecoveryOldest') }}: {{ adminQaRecoveryStatus.oldestQueuedAgeSeconds }} {{ t('adminQaRecoverySeconds') }} {{ t('adminQaRecoveryAttempts') }}: {{ adminQaRecoveryStatus.totalAttempts }} {{ t('adminQaRecoveryReserved') }}: ¥{{ formatProviderMicros(adminQaRecoveryStatus.reservedMicros) }} {{ t('adminQaRecoverySettled') }}: ¥{{ formatProviderMicros(adminQaRecoveryStatus.settledMicros) }} {{ t('adminQaRecoveryState' + row.state) }}: {{ row.count }}

{{ t('adminProjectNotificationTitle') }}

{{ t('adminProjectNotificationHint') }}

{{ t('adminProjectNotificationCurrentPageSearchHint') }}
{{ adminProjectNotificationError }}
{{ t('adminProjectNotificationLoading') }}
{{ t('adminProjectNotificationEmpty') }}
{{ t('adminProjectNotificationNoMatches') }}
{{ t('adminProjectNotificationStatus' + row.status) }} {{ t('adminProjectNotificationRecipient') }}: {{ row.recipientEmail || '-' }} {{ t('adminProjectNotificationAttempts') }}: {{ row.attemptCount }}
{{ adminProjectNotificationShortId(row.deliveryId) }}
{{ t('adminProjectNotificationShowFullId') }}{{ row.deliveryId }}
{{ row.updatedAt || '-' }} · {{ row.errorCode || '-' }}
{{ t('adminProjectNotificationPageOf').replace('{page}', String(adminProjectNotificationCurrentPage + 1)).replace('{pages}', String(adminProjectNotificationPage.totalPages || 1)).replace('{total}', String(adminProjectNotificationPage.totalItems)) }}

🔑 {{ t('apiKeyManagement') }}

{{ t('apiKeyHint') }}

🔑

{{ t('noApiKeys') }}

{{ key.name }}
{{ t('permissions') }}: {{ key.permissions ? key.permissions.join(', ') : 'read' }}
{{ t('createdAt') }}: {{ key.createdAt ? key.createdAt.substring(0,10) : '' }}
{{ t('active') }} {{ t('revoked') }}
{{ key.revealedKey }}

{{ t('navDashboard') }}

{{ t('dashboardSubtitle') }}

{{ t('dashboardNewTranslation') }}

{{ t('dashboardRecentTitle') }}

{{ t('dashboardViewAllTasks') }}

{{ t('dashboardRecentDescription') }}

{{ t('loading') }}
{{ t('noRecentActivity') }} {{ t('dashboardNewTranslation') }}
{{ t('dashboardTaskNoMatch') }} {{ t('dashboardClearFilter') }}
{{ t('dashboardRecentTitle') }}
{{ 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) || '—' }} {{ retryingTranslationTasks[task.taskId] ? t('retryingTask') : (task.status === 'FAILED' ? t('retryTask') : documentWorkspace.category(task) === 'processing' ? t('openTask') : t('docOpen')) }}
{{ task.originalFileName || task.taskId }}{{ task.selectedModel || task.selectedProvider || 'LingFlow AI' }}
{{ documentWorkspace.category(task) === 'failed' ? t('dashboardTranslationFailed') : t(documentWorkspace.statusKey(task)) }}
{{ t('dashboardProgressColumn') }} · {{ task.completedSegments || 0 }} / {{ task.totalSegments || 0 }}
{{ task.errorMessage }} {{ retryingTranslationTasks[task.taskId] ? t('retryingTask') : (task.status === 'FAILED' ? t('retryTask') : documentWorkspace.category(task) === 'processing' ? t('openTask') : t('docOpen')) }}

{{ t('navProfile') }}

{{ t('pageProfileDesc') }}

{{ (currentUser.name || '?').slice(0,1).toUpperCase() }}
{{ currentUser.name }}
{{ t('planLabel') }}: {{ currentUser.plan === 'PRO' ? t('planPro') : t('planFree') }}
{{ currentUser.email }}
{{ t('projectEmailNotificationsNotice') }} {{ projectEmailPreferenceError }}
{{ profileError }}

{{ t('navImage') }}

{{ t('imageTranslateModeHint') }}

{{ t('imageDropHint') }}
{{ t('imageRequirementsLabel') }}
{{ translateProgress }}%
LingFlow · {{ t('footer') }}
{{ t('imageOcrSourcePreviewLoading') }}

{{ t('imageOcrSourcePage', {page: imageOcrSourcePreviewSegment.sourcePage}) }}

{{ t('qualityExceptionHint') }}
{{ t('qualityExceptionExpiry') }}
{{ t('qualityExceptionHistory') }}
{{ decision.status !== 'ACTIVE' ? t('qualityExceptionRevoked') : decision.expired ? t('qualityExceptionExpired') : decision.evidenceCurrent ? t('qualityExceptionActive') : decision.blockingReviewExists ? t('qualityExceptionEvidenceChanged') : t('qualityExceptionNoLongerRequired') }} {{ decision.createdAt }}
{{ decision.reason }}
{{ t('revoke') }}
{{ t('segmentInspector') }}
📝 {{ t('qaResult') }} · {{ t('segmentLabel') }} {{ qaActiveSegIndex }} {{ t('close') }}
{{ qaResults[qaActiveSegIndex].summary }}
{{ issue.severity === 'error' ? t('severityError') : issue.severity === 'warning' ? t('severityWarning') : t('severityUnclassified') }} {{ qaTypeLabel(issue.type) }}
{{ t('source') }}:{{ issue.sourceSpan }} {{ t('target') }}:{{ issue.targetSpan }}
{{ t('sourceOffset') }} [{{ issue.sourceStartOffset }}, {{ issue.sourceEndOffset }})
{{ t('targetOffset') }} [{{ issue.targetStartOffset }}, {{ issue.targetEndOffset }})
💡 {{ issue.suggestion }}
✅ {{ t('noIssuesFound') }}
💡 {{ t('aiSuggestion') }} · {{ t('segmentLabel') }} {{ activeSuggestionSegIndex }} {{ t('close') }}
{{ t('gettingAiSuggestions') }}
{{ t('noAiSuggestions') }}
{{ sug.text }}
{{ sug.reason }}
{{ t('apply') }}
{{ t('inspectorEmptyHint') }}
👥 {{ t('collaborate') }}
👥 {{ t('collaborate') }} {{ collaborationActive ? (collaborationConnected ? t('connected') : t('connecting')) : t('notConnected') }}
{{ initialsOf(user.userName) }} #{{ getUserEditingSegment(user.userId) }}
{{ initialsOf(currentUser.name) }} {{ t('you') }}
{{ info.userName }} {{ t('editingSegment', { index: info.segmentIndex }) }}
{{ initialsOf(msg.userName) }}
{{ msg.userName }} {{ formatChatTime(msg.timestamp) }}
{{ msg.text }}
{{ t('noChatHistory') }}
分段 #{{ commentSegmentIndex }}
源文
{{ commentSegmentPreview.source }}
译文
{{ commentSegmentPreview.target }}
暂无批注
{{ cm.userName }} {{ (cm.createdAt || '').replace('T',' ').slice(0,19) }}
{{ cm.content }}
✓ 已解决
Loading LingFlow...