2026-04-01 00:58:42 +08:00
const enUS = {
app : {
name : "GEO Console" ,
loginIntro : "A workspace for brand assets and GEO content operations." ,
} ,
locale : {
"zh-CN" : "Simplified Chinese" ,
"en-US" : "English" ,
} ,
common : {
cancel : "Cancel" ,
close : "Close" ,
confirm : "Confirm" ,
create : "Create" ,
edit : "Edit" ,
delete : "Delete" ,
reset : "Reset" ,
refresh : "Refresh" ,
2026-04-07 16:07:21 +08:00
loading : "Loading" ,
2026-04-01 00:58:42 +08:00
search : "Search" ,
save : "Save" ,
2026-04-02 00:31:28 +08:00
back : "Back" ,
2026-04-01 00:58:42 +08:00
next : "Next" ,
previous : "Previous" ,
submit : "Submit" ,
submitGenerate : "Generate" ,
actions : "Actions" ,
title : "Title" ,
2026-04-17 15:11:07 +08:00
name : "Name" ,
2026-04-01 00:58:42 +08:00
description : "Description" ,
website : "Website" ,
wordCount : "Words" ,
createdAt : "Created At" ,
updatedAt : "Updated At" ,
status : "Status" ,
required : "Required" ,
noData : "No data" ,
optional : "Optional" ,
preview : "Preview" ,
details : "Details" ,
versions : "Versions" ,
total : "Total" ,
balance : "Balance" ,
used : "Used" ,
source : "Source" ,
templateType : "Template" ,
generateStatus : "Generation" ,
publishStatus : "Publish" ,
selectPlease : "Please select" ,
inputPlease : "Please input" ,
upgrade : "Upgrade" ,
2026-04-07 16:07:21 +08:00
copy : "Copy" ,
copySuccess : "Content copied" ,
2026-04-12 09:56:18 +08:00
yes : "Yes" ,
no : "No" ,
2026-04-16 20:40:41 +08:00
imageUploadProgress : {
title : "Processing image" ,
stages : {
idle : "Waiting to start" ,
validating : "Validating file" ,
decoding : "Decoding image" ,
encoding : "Converting to WebP" ,
uploading : "Uploading to server" ,
finishing : "Finishing" ,
} ,
} ,
2026-04-01 00:58:42 +08:00
} ,
nav : {
workspace : "Workspace" ,
articleCreation : "Article Creation" ,
templates : "Templates" ,
custom : "Custom Generation" ,
2026-04-06 22:18:55 +08:00
freeCreate : "Free Create" ,
2026-04-25 21:36:44 +08:00
imitation : "Imitation Create" ,
2026-04-01 00:58:42 +08:00
media : "Media" ,
brandManagement : "Brand Management" ,
brands : "Brand Library" ,
tracking : "Tracking" ,
trackingDetail : "Data Details" ,
contentManagement : "Content Management" ,
knowledge : "Knowledge Base" ,
2026-04-16 20:40:41 +08:00
images : "Image Management" ,
2026-04-18 15:01:40 +08:00
kolMarket : "Refined Template Marketplace" ,
kolMarketplace : "Refined Template Marketplace" ,
2026-04-17 09:02:39 +08:00
kolWorkspace : "KOL Workspace" ,
kolManage : "Prompt Management" ,
kolDashboard : "Dashboard" ,
2026-04-18 14:08:22 +08:00
kolProfile : "Profile" ,
2026-04-28 11:34:07 +08:00
personalCenter : "Personal Center" ,
aiPointUsage : "AI Point Usage" ,
2026-04-01 00:58:42 +08:00
} ,
auth : {
welcomeBack : "Welcome back" ,
tenantAdminLogin : "Tenant Admin Login" ,
loginAndEnter : "Sign in to workspace" ,
email : "Email" ,
password : "Password" ,
defaultTestAccount : "Default account" ,
defaultTestPassword : "Default password" ,
} ,
2026-04-18 20:56:05 +08:00
membershipBlocked : {
eyebrow : "Access Paused" ,
title : "This tenant plan is unavailable" ,
reasonTrialExpired : "The free trial's 3-day page access window has ended. All business pages are now locked. Please contact an administrator to reactivate trial access." ,
reasonRequired : "This tenant does not have an active plan. All business pages are now locked. Please contact an administrator." ,
reasonInactive : "This tenant plan has expired or been disabled. All business pages are now locked. Please contact an administrator to restore access." ,
plan : "Current Plan" ,
expiredAt : "Expired At" ,
articleLimit : "Article Limit" ,
companyLimit : "Company Limit" ,
contactAdmin : "Once the administrator reactivates access, refresh this page to continue." ,
logout : "Log out" ,
refresh : "Check again" ,
refreshing : "Checking…" ,
stillBlocked : "Access is still blocked. Please contact your administrator before checking again." ,
} ,
2026-04-01 00:58:42 +08:00
shell : {
localeLabel : "Language" ,
quotaTitle : "Plan & Quota" ,
quotaStatus : "Healthy" ,
remainingQuota : "Article quota" ,
2026-04-28 11:34:07 +08:00
aiPoints : "AI points" ,
2026-04-01 00:58:42 +08:00
resetAt : "Reset at" ,
userFallback : "Admin" ,
logout : "Logout" ,
planFallback : "Free Plan" ,
2026-04-28 11:34:07 +08:00
aiUsageTitle : "AI Point Usage" ,
aiUsageRecent : "Recent Usage" ,
aiUsageEmpty : "No AI point usage yet" ,
aiUsageBase : "Tiered every {base} chars" ,
aiUsageRule : "{chars} chars / base {base}" ,
aiUsagePendingHelp : "Points have been reserved. They will be confirmed once the AI task completes; if generation fails, the points are returned automatically." ,
aiUsageTypes : {
article_selection_optimize : "Article Selection Optimize" ,
template_analyze : "AI Analysis" ,
template_title_generate : "AI Title Generation" ,
template_outline_generate : "AI Outline Generation" ,
kol_prompt_generate : "KOL Prompt Generation" ,
kol_prompt_optimize : "KOL Prompt Optimize" ,
} ,
aiUsageStatus : {
pending : "Processing" ,
completed : "Charged" ,
refunded : "Refunded" ,
failed : "Failed" ,
} ,
2026-04-01 00:58:42 +08:00
} ,
route : {
login : {
title : "Welcome back" ,
description : "Sign in with a real tenant account." ,
} ,
workspace : {
title : "Workspace" ,
description : "Template shortcuts, overview data, and recent generations in one place." ,
} ,
templates : {
title : "Template Creation" ,
2026-04-18 13:47:32 +08:00
description : "Manage both general-purpose and refined templates, with all related generation records gathered here." ,
2026-04-02 00:31:28 +08:00
} ,
wizard : {
title : "Template Wizard" ,
description : "Follow the template-driven three-step flow to fill inputs, confirm structure, and generate the article." ,
} ,
articleEditor : {
title : "Article Editor" ,
description : "Edit titles, content, and publishing settings in a dedicated workspace." ,
2026-04-01 00:58:42 +08:00
} ,
custom : {
title : "Custom Generation" ,
2026-04-02 00:31:28 +08:00
description : "Generate articles with custom prompt rules, instant or scheduled." ,
2026-04-01 00:58:42 +08:00
} ,
2026-04-06 22:18:55 +08:00
freeCreate : {
title : "Free Create" ,
description : "Create and edit articles freely, no templates or AI generation required." ,
2026-04-01 00:58:42 +08:00
} ,
2026-04-25 21:36:44 +08:00
imitation : {
title : "Imitation Create" ,
description : "Manage rewritten articles generated from citation sources or external URLs." ,
} ,
imitationCreate : {
title : "Imitation Create" ,
description : "Extract an article from a URL, then generate a new article in one step." ,
} ,
2026-04-01 00:58:42 +08:00
media : {
title : "Media Management" ,
2026-04-20 09:52:48 +08:00
description : "Review desktop-managed media bindings, authorization state, and sync results in one place." ,
2026-04-01 00:58:42 +08:00
} ,
brands : {
title : "Brand Library" ,
description : "Manage keywords, question sets, and competitors around each brand." ,
} ,
tracking : {
title : "Data Details" ,
2026-04-12 09:56:18 +08:00
description : "Inspect plugin-sampled brand performance, platform coverage, hot questions, and citation attribution." ,
} ,
trackingQuestion : {
title : "Question Detail" ,
description : "Inspect answer content, citation sources, citation analysis, and content citations for a single question." ,
2026-04-01 00:58:42 +08:00
} ,
knowledge : {
title : "Knowledge Base" ,
description : "No matching backend APIs exist in this repository yet." ,
} ,
2026-04-16 20:40:41 +08:00
images : {
title : "Image Management" ,
description : "Manage image assets, including folders, reference analysis, and cover library usage." ,
} ,
2026-04-28 11:34:07 +08:00
aiPoints : {
title : "AI Point Usage" ,
description : "Review AI point balance, cycle rules, and recent usage records." ,
} ,
} ,
aiPoints : {
balance : "Available Points" ,
baseChars : "Base Characters" ,
ledgerTitle : "Usage Ledger" ,
ledgerLimit : "Latest {limit} records" ,
ledgerTotal : "{total} records" ,
table : {
usageType : "Usage" ,
points : "Points" ,
requestChars : "Metered Chars" ,
} ,
2026-04-01 00:58:42 +08:00
} ,
2026-04-17 09:02:39 +08:00
kol : {
marketplace : {
2026-04-18 13:47:32 +08:00
title : "Refined Templates" ,
2026-04-17 09:02:39 +08:00
filter : {
industry : "Industry" ,
keyword : "Keyword" ,
all : "All" ,
} ,
empty : "No published subscription packages yet" ,
subscribers : "{count} subscribed tenants" ,
2026-04-25 23:17:04 +08:00
prompts : "{count} refined templates" ,
2026-04-17 09:02:39 +08:00
} ,
package : {
subscribe : "Request subscription" ,
pending : "Pending" ,
subscribed : "Subscribed" ,
revoked : "Revoked" ,
expired : "Expired" ,
notSubscribed : "Not subscribed" ,
} ,
generate : {
2026-04-18 13:47:32 +08:00
title : "Refined Template Generation" ,
2026-04-17 09:02:39 +08:00
submit : "Generate" ,
2026-04-17 14:59:52 +08:00
fillVariables : "Please fill in the following variables and click generate" ,
2026-04-17 09:02:39 +08:00
} ,
manage : {
title : "KOL Prompt Management" ,
2026-04-25 21:38:45 +08:00
subtitle : "Manage refined template packages, prompts, platforms, variables, and publishing status." ,
2026-04-18 15:01:40 +08:00
packageTitle : "Packages" ,
promptTitle : "Prompts" ,
2026-04-17 09:02:39 +08:00
createPackage : "Create package" ,
editPackage : "Edit package" ,
publishPackage : "Publish" ,
archivePackage : "Archive" ,
createPrompt : "Create prompt" ,
2026-04-18 00:47:57 +08:00
activatePrompt : "Go live" ,
archivePrompt : "Take offline" ,
2026-04-18 15:01:40 +08:00
confirmDeletePackage : "Are you sure you want to delete this package?" ,
confirmDeletePrompt : "Are you sure you want to delete this prompt?" ,
emptyPromptSelection : "Select a package on the left to view its prompts" ,
2026-04-18 00:47:57 +08:00
platformHint : "Platform" ,
platformHintDefault : "General" ,
2026-04-18 15:01:40 +08:00
packageStatus : {
draft : "Draft" ,
published : "Published" ,
archived : "Archived" ,
} ,
messages : {
packageCreated : "Package created successfully" ,
packageUpdated : "Package updated successfully" ,
packagePublished : "Package published successfully" ,
packageArchived : "Package archived successfully" ,
packageDeleted : "Package deleted successfully" ,
promptCreated : "Prompt created successfully" ,
promptActivated : "Prompt is live" ,
promptArchived : "Prompt is offline" ,
promptDeleted : "Prompt deleted successfully" ,
} ,
packageForm : {
tags : "Tags" ,
tagsPlaceholder : "Type a tag and press Enter" ,
priceNote : "Price Note" ,
priceNotePlaceholder : "For example: Contact me for pricing" ,
cover : "Cover Image" ,
coverHint : "Choose from the image library or upload a local image and convert it to WebP automatically." ,
selectCover : "Select cover image" ,
changeCover : "Change cover image" ,
removeCover : "Remove cover image" ,
noCover : "No cover image selected" ,
nameRequired : "Package title is required" ,
coverPicker : {
title : "Select package cover" ,
localTab : "Local upload" ,
emptyTitle : "Choose an image for this package cover" ,
emptyHint : "Choose from the image library or upload a local image and convert it to WebP automatically." ,
} ,
} ,
2026-04-18 00:47:57 +08:00
status : {
draft : "Draft" ,
active : "Live" ,
archived : "Offline" ,
} ,
2026-04-17 09:02:39 +08:00
editor : {
2026-04-18 00:47:57 +08:00
basicInfo : "Basic info" ,
saveMeta : "Save basic info" ,
2026-04-17 09:02:39 +08:00
saveDraft : "Save draft" ,
publish : "Publish" ,
preview : "Preview form" ,
aiGenerate : "AI Generate" ,
aiOptimize : "AI Optimize" ,
2026-04-25 22:41:40 +08:00
aiPlaceholder : "Describe the prompt effect you want, and AI will generate it..." ,
aiOptimizePromptPlaceholder : "For example: make this prompt clearer, keep variable placeholders, and reduce ambiguity." ,
aiOptimizeDisclaimer : "AI output is for reference only. Review it before replacing the selected prompt text." ,
aiOptimizeReplace : "Replace selection" ,
2026-04-17 09:02:39 +08:00
} ,
variable : {
input : "Input" ,
textarea : "Textarea" ,
select : "Select" ,
number : "Number" ,
checkbox : "Checkbox" ,
key : "Variable key" ,
label : "Label" ,
required : "Required" ,
placeholder : "Placeholder" ,
options : "Options (comma separated)" ,
2026-04-18 15:01:40 +08:00
maxLength : "Max length" ,
defaultValue : "Default value" ,
minValue : "Min number" ,
maxValue : "Max number" ,
defaultNumber : "Default number" ,
2026-04-17 09:02:39 +08:00
} ,
} ,
dashboard : {
title : "KOL Dashboard" ,
2026-04-25 21:38:45 +08:00
subtitle : "Track subscriptions and generation metrics in real time." ,
2026-04-17 09:02:39 +08:00
totalSubs : "Total subscribed tenants" ,
monthSubs : "New this month" ,
totalUsage : "Total usage" ,
monthUsage : "Usage this month" ,
failRate : "Failure rate" ,
byPackage : "By package" ,
trend : "Trend" ,
} ,
2026-04-18 14:08:22 +08:00
profile : {
title : "KOL Profile" ,
subtitle : "These fields are shown in the KOL Marketplace and are separate from your account settings." ,
persona : {
displayNameLabel : "Display name" ,
displayNamePlaceholder : "Enter your public display name" ,
bioLabel : "Bio" ,
bioPlaceholder : "A short intro for your subscribers" ,
avatarLabel : "Avatar" ,
avatarHint : "PNG/JPG/GIF/WebP, up to 2 MB" ,
avatarUploading : "Uploading avatar…" ,
saveSuccess : "Updated" ,
saveError : "Failed to update" ,
displayNameRequired : "Display name is required" ,
displayNameTooLong : "Display name must be at most 40 characters" ,
bioTooLong : "Bio must be at most 500 characters" ,
avatarInvalidType : "Only PNG/JPG/GIF/WebP are supported" ,
avatarTooLarge : "Avatar size cannot exceed 2 MB" ,
notActive : "You are not an active KOL" ,
} ,
} ,
2026-04-17 09:02:39 +08:00
} ,
2026-04-01 00:58:42 +08:00
workspace : {
eyebrow : "Dashboard" ,
metrics : {
articles : "Generated" ,
published : "Published" ,
brands : "Brands" ,
platforms : "Platforms" ,
} ,
sections : {
2026-04-18 13:47:32 +08:00
generalTemplates : "General-Purpose Templates" ,
2026-04-01 00:58:42 +08:00
recent : "Recent Generations" ,
overview : "Overview" ,
quota : "Plan & Quota" ,
} ,
actions : {
enterTemplates : "Open Templates" ,
} ,
quota : {
remaining : "Remaining quota" ,
total : "Total quota" ,
used : "Used quota" ,
} ,
emptyTemplates : "No template cards available yet" ,
noRecentArticles : "No recent generations yet" ,
} ,
2026-04-12 09:56:18 +08:00
tracking : {
eyebrow : "AI Brand Monitoring" ,
brandPlaceholder : "Select brand" ,
keywordPlaceholder : "Select keyword" ,
collectNow : "Collect Now" ,
2026-04-20 19:10:35 +08:00
collectBrandRequired : "Select a brand before collecting." ,
2026-04-12 09:56:18 +08:00
collectKeywordRequired : "Select a keyword before collecting the current question set." ,
2026-04-23 09:11:53 +08:00
collectTodayOnly : "Collect Now only supports today's data. Switch back to today to continue." ,
2026-04-20 19:10:35 +08:00
collectClientChecking : "Checking whether the current account's desktop client is online." ,
collectClientOnlineRequired : "The current account's desktop client must be online before collecting." ,
2026-04-24 22:21:01 +08:00
noDesktopClientCollectReason : "This account has no registered desktop client, so collection cannot start." ,
noAuthorizedPlatformsCollectReason : "This account has no authorized AI platforms, so collection cannot start." ,
collectPlatformUnauthorized : "The selected platform is not authorized for this account." ,
2026-04-12 09:56:18 +08:00
pluginMode : "Plugin sampling" ,
pluginHint : "Plugin-mode data depends on device uptime. Low coverage should be treated as directional only." ,
awaitingSnapshot : "Waiting for the next valid snapshot" ,
infoStrip :
"{mode} · target {desired} · planned {planned} · sampled {actual} · coverage {coverage} · updated {updatedAt} · {trigger}" ,
latestSnapshot : "Latest Snapshot" ,
coverage : "Coverage" ,
coverageTitle : "Sampling Coverage" ,
coverageSummary : "Target {desired} · Sampled {actual} · Coverage {coverage}" ,
platformMatrix : "Platform Matrix" ,
platformMatrixTitle : "Platform Comparison Matrix" ,
hotQuestions : "Hot Questions" ,
hotQuestionsTitle : "Hot Questions" ,
hotQuestionsHint : "Questions come from the brand library under the selected keyword." ,
questionSearchPlaceholder : "Search questions under the selected keyword" ,
questionDetailEyebrow : "Question Detail" ,
questionDetailCollectedAt : "Collected at {time}" ,
questionDetailFallback : "Question Detail" ,
backToQuestions : "Back to questions" ,
citationRanking : "Citation Ranking" ,
citationRankingTitle : "Citation Ranking" ,
citationRankingHint : "Track how often content published from this system appears across model answers." ,
citedArticles : "Cited Articles" ,
citedArticlesTitle : "Cited Articles" ,
answerContent : "Answer Content" ,
citationSources : "Citation Sources" ,
citationSourcesTitle : "Citation Sources" ,
citationAnalysis : "Citation Analysis" ,
citationAnalysisTitle : "Citation Analysis" ,
contentCitations : "Content Citations" ,
contentCitationsTitle : "Content Citations" ,
2026-04-25 21:36:44 +08:00
imitationAction : "Imitation create" ,
2026-04-12 09:56:18 +08:00
taskDebugTitle : "Async Task Debug" ,
taskDebugHint : "For troubleshooting the callback -> queue -> worker flow only. The four main content sections above stay unchanged." ,
contentCitationBadge : "Content Citation" ,
noQuestions : "No hot questions for the current filters" ,
noCitationRanking : "No attributable citations in the current window" ,
noCitedArticles : "No content citations in the current window" ,
noAnswer : "No sampled answer for this platform" ,
noCitations : "No citations for this platform" ,
noCitationAnalysis : "No citation analysis for this platform" ,
noContentCitations : "No content citations for the active platform" ,
noTaskDebug : "No async task debug data for the current filters" ,
2026-04-24 22:21:01 +08:00
noPlatformBreakdown : "No platform data is available for the current filters" ,
selectedPlatformUnauthorizedTitle : "Selected Platform Not Authorized" ,
selectedPlatformUnauthorizedDescription : "This AI platform has no active authorization for the current account. Switch to an authorized platform or authorize it in the desktop client." ,
noDetailPlatformsTitle : "No Platforms Available" ,
noDetailPlatformsDescription : "No AI platform data is available for the current filters." ,
platformAuthorization : {
authorized : {
title : "AI Platform Authorization Active" ,
description : "This account has AI platform authorization available for monitoring collection." ,
} ,
no_desktop_client : {
title : "No Desktop Client Detected" ,
description : "This account has not registered a desktop client. Daily tasks will wait for an eligible client before dispatch, and the dashboard will not show collection as available." ,
} ,
no_authorized_platforms : {
title : "No Authorized AI Platforms" ,
description : "This account has no bound or authorized AI platform accounts. The system will not generate or dispatch collection tasks for unauthorized platforms." ,
} ,
} ,
2026-04-12 09:56:18 +08:00
samples : "samples" ,
citations : "citations" ,
citedArticleMeta : "{count} cited articles" ,
contentCitationMeta : "{count} content references" ,
manual : "Manual" ,
automatic : "Automatic" ,
noChange : "Flat" ,
metrics : {
mentionRate : "Mention Rate" ,
top1MentionRate : "Top-1 Mention Rate" ,
firstRecommendRate : "First Recommendation Rate" ,
positiveMentionRate : "Positive Mention Rate" ,
} ,
columns : {
platform : "Platform" ,
appearances : "Appearances" ,
citedAnswers : "Cited Answers" ,
citedArticles : "Cited Articles" ,
citationRate : "Citation Rate" ,
citations : "Citations" ,
sourcePlatform : "Source" ,
2026-04-22 00:24:21 +08:00
channelName : "Channel" ,
2026-04-12 09:56:18 +08:00
domain : "Domain" ,
share : "Share" ,
contentName : "Content" ,
publishPlatform : "Publish Platform" ,
distinctSites : "Distinct Sites" ,
brandContent : "Has Brand Content" ,
} ,
status : {
sampled : "Sampled" ,
partial : "Partially Sampled" ,
unsampled : "Unsampled" ,
pending : "Pending" ,
not_logged_in : "Not Logged In" ,
unavailable : "Unavailable" ,
} ,
confidence : {
high : "High confidence" ,
medium : "Medium confidence" ,
low : "Low confidence" ,
} ,
taskDebug : {
labels : {
plannedAt : "Planned At" ,
leasedAt : "Leased At" ,
callbackReceivedAt : "Callback Received At" ,
queueEnqueuedAt : "Queued At" ,
completedAt : "Completed At" ,
leaseExpiresAt : "Lease Expires At" ,
runId : "Run ID" ,
runStatus : "Run Status" ,
providerModel : "Model" ,
requestId : "Request ID" ,
providerRequestId : "Provider Request ID" ,
receivedAlertCount : "Received Alert Count" ,
receivedAlertedAt : "Last Alerted At" ,
skipReason : "Skip Reason" ,
errorMessage : "Task Error" ,
lastQueuePublishError : "Queue Publish Error" ,
} ,
taskStatus : {
pending : "Pending" ,
leased : "Leased" ,
received : "Received" ,
completed : "Completed" ,
failed : "Failed" ,
skipped : "Skipped" ,
expired : "Expired" ,
} ,
queueStatus : {
pending : "Pending Queue" ,
queued : "Queued" ,
publish_failed : "Publish Failed" ,
invalid_payload : "Invalid Payload" ,
} ,
} ,
} ,
2026-04-01 00:58:42 +08:00
templateMeta : {
top_x_article : {
eyebrow : "Ranked Content" ,
helper : "Good for listicles, comparisons, and recommendation-driven output." ,
accent : "Top X" ,
action : "Create ranking" ,
} ,
product_review : {
eyebrow : "Product Review" ,
helper : "Good for benefits, trade-offs, and suitability analysis." ,
accent : "Review" ,
action : "Start review" ,
} ,
research_report : {
eyebrow : "Research Report" ,
helper : "Good for longer analysis, trends, and market insight." ,
accent : "Report" ,
action : "Create report" ,
} ,
brand_search_expansion : {
eyebrow : "Brand Expansion" ,
helper : "Expand brand plus search intent into a richer GEO article." ,
accent : "GEO" ,
action : "Expand" ,
} ,
default : {
eyebrow : "Content Template" ,
helper : "This template is already usable and can go straight into generation." ,
accent : "Ready" ,
action : "Open template" ,
} ,
} ,
status : {
generate : {
draft : "Draft" ,
2026-04-02 21:16:12 +08:00
queued : "Queued" ,
2026-04-01 00:58:42 +08:00
generating : "Generating" ,
running : "Running" ,
completed : "Completed" ,
failed : "Failed" ,
} ,
publish : {
unpublished : "Unpublished" ,
publishing : "Publishing" ,
2026-04-03 00:39:15 +08:00
success : "Published" ,
failed : "Failed" ,
partial_success : "Partial Success" ,
2026-04-01 00:58:42 +08:00
published : "Published" ,
publish_success : "Published" ,
publish_failed : "Failed" ,
pending_review : "Pending Review" ,
} ,
sourceType : {
template : "Template generation" ,
2026-04-02 21:16:12 +08:00
custom_generation : "Custom generation" ,
instant_task : "Instant task" ,
schedule_task : "Scheduled task" ,
2026-04-06 22:18:55 +08:00
free_create : "Free create" ,
2026-04-25 21:36:44 +08:00
imitation : "Imitation create" ,
2026-04-18 13:47:32 +08:00
kol : "Refined template generation" ,
2026-04-06 22:18:55 +08:00
} ,
} ,
2026-04-25 21:36:44 +08:00
imitation : {
actions : {
create : "New Rewrite" ,
submit : "Submit and generate" ,
} ,
filters : {
publishStatus : "Publish status" ,
generateStatus : "Generation status" ,
keyword : "Search" ,
createdTime : "Created time" ,
createdTimeStart : "Start time" ,
createdTimeEnd : "End time" ,
keywordPlaceholder : "Search by article title" ,
} ,
list : {
eyebrow : "Imitation Create" ,
count : "{count} articles" ,
sourceArticle : "Source" ,
empty : "No rewritten articles yet. Start from a citation source or create one manually." ,
deleteConfirm : "Delete this rewritten article?" ,
deleteSuccess : "Article deleted." ,
deleteError : "Failed to delete article." ,
} ,
create : {
title : "Create rewritten article" ,
subtitle : "The backend fetches the source article first, then generates a new original article from your settings." ,
sourceSection : "Source article" ,
settingsSection : "Rewrite settings" ,
sourceURL : "Article URL" ,
sourceTitle : "Source title" ,
language : "Article language" ,
industry : "Industry / scenario" ,
brandName : "Brand / subject" ,
region : "Region" ,
targetAudience : "Target audience" ,
contentGoal : "Content goal" ,
tone : "Tone" ,
lengthGoal : "Length" ,
keywords : "Keywords" ,
preservePoints : "Keep / emphasize" ,
avoidPoints : "Avoid" ,
extraRequirements : "Extra requirements" ,
enableWebSearch : "Allow web search supplement" ,
webSearchHint : "When enabled, generation can reference live web information for newer facts or industry context." ,
knowledgeBase : "Reference knowledge base" ,
knowledgeBasePlaceholder : "Optional. Add facts, brand material, and industry background." ,
knowledgeBaseHint : "Selected groups are retrieved in the backend and passed to generation as reference context." ,
sourceURLPlaceholder : "https://example.com/article" ,
sourceTitlePlaceholder : "Optional. Citation titles are prefilled automatically." ,
industryPlaceholder : "For example: home improvement, education, SaaS, healthcare" ,
brandNamePlaceholder : "Optional. Helps the article fit a specific brand or subject." ,
regionPlaceholder : "For example: Shanghai, East China, nationwide, North America" ,
targetAudiencePlaceholder : "For example: first-time buyers, channel partners, procurement leads" ,
contentGoalPlaceholder : "For example: education, conversion, brand trust, selection advice" ,
tonePlaceholder : "For example: professional, conversational, comparative, news analysis" ,
lengthGoalPlaceholder : "For example: around 1200 words, short post, long-form guide" ,
keywordsPlaceholder : "Type keywords and press Enter" ,
preservePointsPlaceholder : "List facts, data, arguments, or examples that must be kept." ,
avoidPointsPlaceholder : "List claims, competitors, compliance risks, or wording to avoid." ,
extraRequirementsPlaceholder : "Add channel, structure, title style, or industry-specific instructions." ,
queued : "Rewrite task submitted and queued." ,
sourceURLRequired : "Enter the source article URL first." ,
submitError : "Failed to submit rewrite task." ,
backToList : "Back to rewrites" ,
} ,
} ,
2026-04-06 22:18:55 +08:00
freeCreate : {
actions : {
create : "New Article" ,
} ,
filters : {
publishStatus : "Publish Status" ,
keyword : "Search" ,
createdTime : "Created Time" ,
createdTimeStart : "Start" ,
createdTimeEnd : "End" ,
keywordPlaceholder : "Search by title" ,
2026-04-01 00:58:42 +08:00
} ,
2026-04-06 22:18:55 +08:00
list : {
eyebrow : "Free Create" ,
count : "{count} articles" ,
empty : "No articles yet. Click \"New Article\" to start creating." ,
edit : "Edit article" ,
deleteConfirm : "Are you sure you want to delete this article?" ,
deleteSuccess : "Article deleted" ,
deleteError : "Failed to delete article" ,
} ,
createError : "Failed to create article" ,
2026-04-01 00:58:42 +08:00
} ,
templates : {
eyebrow : "Article Creation" ,
2026-04-18 13:47:32 +08:00
sections : {
generalTemplates : "General-Purpose Templates" ,
refinedTemplates : "Refined Templates" ,
records : "Template Creation Records" ,
} ,
2026-04-01 00:58:42 +08:00
actions : {
batchGenerate : "Batch generate" ,
chooseTemplate : "Choose template" ,
} ,
filters : {
template : "Template" ,
publishStatus : "Publish status" ,
generateStatus : "Generation status" ,
keyword : "Search" ,
2026-04-02 00:31:28 +08:00
generationTime : "Generation time" ,
generationTimeStart : "Start time" ,
generationTimeEnd : "End time" ,
2026-04-01 00:58:42 +08:00
keywordPlaceholder : "Search by article title" ,
} ,
list : {
2026-04-18 13:47:32 +08:00
eyebrow : "Template Creation Records" ,
2026-04-01 00:58:42 +08:00
count : "{count} articles" ,
empty : "No articles have been created yet." ,
preview : "Preview" ,
2026-04-02 00:31:28 +08:00
edit : "Edit article" ,
editDisabled : "Only draft, failed, or completed articles can be edited" ,
2026-04-03 00:39:15 +08:00
publishDisabled : "Only completed articles can be published" ,
2026-04-01 00:58:42 +08:00
versions : "Versions" ,
deleteConfirm : "Delete this article?" ,
deleteSuccess : "Article deleted." ,
deleteError : "Failed to delete article." ,
} ,
picker : {
title : "Choose the template you want to use" ,
2026-04-18 13:47:32 +08:00
empty : "Choose either general-purpose templates or refined template generation first" ,
generalDescription : "Choose a general-purpose template to start creating" ,
refinedDescription : "Choose a refined template and start refined generation directly" ,
2026-04-01 00:58:42 +08:00
viewExample : "View example" ,
} ,
wizard : {
drawerTitle : "Template generation" ,
steps : {
basic : "Basic info" ,
basicDesc : "Language, template fields, and brand context" ,
structure : "Structure" ,
2026-04-02 00:31:28 +08:00
structureDesc : "Title and outline" ,
2026-04-01 00:58:42 +08:00
generate : "Generate" ,
2026-04-02 00:31:28 +08:00
generateDesc : "Confirm the outline, add key points, and submit the task" ,
2026-04-01 00:58:42 +08:00
} ,
sections : {
templateFields : "Template fields" ,
brandContext : "Brand context" ,
language : "Language" ,
brandInfo : "Brand" ,
2026-04-02 00:31:28 +08:00
brandLibrary : "Brand library" ,
brandName : "Brand name" ,
website : "Official website" ,
brandSummary : "AI brand summary" ,
2026-04-01 00:58:42 +08:00
keywords : "Keywords" ,
competitors : "Competitors" ,
chooseTitle : "Choose a title" ,
customTitle : "Custom title" ,
structure : "Article structure" ,
2026-04-02 00:31:28 +08:00
customOutline : "Custom section" ,
preview : "Article preview" ,
generatedOutline : "Confirm outline" ,
outlinePreview : "Outline preview" ,
2026-04-01 00:58:42 +08:00
keyPoints : "Key points" ,
review : "Review" ,
notes : "Notes" ,
inputParams : "Input params" ,
} ,
hints : {
brandContext : "Optional. Selecting a brand pulls in keywords and competitor context." ,
2026-04-02 00:31:28 +08:00
brandFlow : "You can pick a brand from the library or type one manually. AI analysis will expand keywords, competitors, and title options." ,
brandSummaryPlaceholder : "After analysis, AI will summarize the brand angle, positioning, and content opportunities here." ,
keywords : "Type keywords directly or reuse brand-library keywords. AI results will be merged into this list." ,
competitors : "Competitors stay editable. You can add rows manually and save useful ones back into the competitor library." ,
competitorEmptyEditable : "No competitors yet. Add one manually or let AI fill the list first." ,
templateFields : "Keep any extra template-specific fields here to constrain the writing direction." ,
titleSelection : "AI will return 5 better title options before you move forward. Choose one or rewrite it." ,
structure : "Keep the default outline or trim sections for this draft." ,
preview : "The panel on the right updates the article frame in real time." ,
previewEmpty : "Select one or more sections to preview the article frame here." ,
generatedOutline : "AI generates the full article outline first. You can edit, add, or delete nodes before creating the final article." ,
outlinePreview : "The panel on the right updates from the current outline in real time." ,
outlineEmpty : "Generate the outline first to edit the article structure here." ,
review : "Check the final setup before creating the generation task." ,
2026-04-01 00:58:42 +08:00
competitorEmpty : "No competitors are available under this brand yet." ,
customTitle : "Use this field if you want to override the title manually." ,
keyPoints : "Add any key messages, angles, or style notes here." ,
async : "The backend creates the article and task first, then completes content generation asynchronously." ,
} ,
2026-04-02 00:31:28 +08:00
actions : {
analyze : "Analyze" ,
addCompetitor : "Add competitor" ,
addSection : "Add section" ,
addOutlineNode : "Add node" ,
addOutlineChild : "Add child" ,
favorite : "Save" ,
saved : "Saved" ,
submit : "Submit and generate" ,
} ,
2026-04-01 00:58:42 +08:00
review : {
templateName : "Template" ,
articleTitle : "Article title" ,
brandContext : "Brand context" ,
outline : "Outline" ,
currentTemplate : "Current template" ,
promptVisibility : "Prompt visibility" ,
selectedKeywords : "Selected keywords" ,
selectedCompetitors : "Selected competitors" ,
} ,
localeOptions : {
zh : "Simplified Chinese" ,
en : "English" ,
} ,
2026-04-02 00:31:28 +08:00
table : {
website : "Website" ,
name : "Name" ,
description : "Description" ,
actions : "Actions" ,
} ,
placeholders : {
brandLibrary : "Choose an existing brand from the library" ,
brandName : "Enter a brand name, or refine the selected library brand" ,
website : "Official website, optional" ,
keywords : "Type keywords and press Enter" ,
customTitle : "Override the AI title here if needed" ,
customOutline : "Add another section, for example “Buying advice”" ,
keyPoints : "Add any extra instructions, key angles, or constraints for the article" ,
competitorWebsite : "Official site or landing page" ,
competitorName : "Competitor name" ,
competitorDescription : "One-line positioning or summary" ,
outlineNode : "Enter a title" ,
} ,
2026-04-01 00:58:42 +08:00
promptVisible : "Prompt visible" ,
promptSealed : "Prompt sealed" ,
2026-04-02 00:31:28 +08:00
assist : {
analyzeTitle : "AI is analyzing keywords and competitors. Please wait…" ,
titleTitle : "AI is generating titles. Please wait…" ,
outlineTitle : "AI is generating the article outline. Please wait…" ,
analyzeStages : {
brand : "Analyzing the brand context…" ,
keywords : "Extracting keyword opportunities…" ,
competitors : "Mapping competitors and websites…" ,
} ,
titleStages : {
context : "Preparing the current brief…" ,
strategy : "Generating title directions from keywords and competitors…" ,
finalize : "Returning 5 title options…" ,
} ,
outlineStages : {
context : "Preparing the title, keywords, and competitor context…" ,
structure : "Generating the article outline from the selected structure…" ,
finalize : "Returning the editable outline result…" ,
} ,
} ,
2026-04-01 00:58:42 +08:00
messages : {
requiredField : "Please fill in {field} first." ,
2026-04-02 00:31:28 +08:00
missingBrand : "Choose a brand from the library or enter a brand name first." ,
2026-04-01 00:58:42 +08:00
missingTitle : "Please choose or enter an article title." ,
missingOutline : "Please select at least one outline section." ,
2026-04-02 00:31:28 +08:00
missingGeneratedOutline : "Please generate and confirm the article outline first." ,
missingCompetitorName : "Enter a competitor name before saving it to the library." ,
savedCompetitor : "Competitor saved to the brand library." ,
assistReady : "AI analysis is ready. You can keep refining the draft." ,
assistFailed : "AI analysis failed. Please try again." ,
assistTimeout : "AI analysis timed out. Please try again." ,
titleFailed : "Title generation failed. Please try again." ,
titleTimeout : "Title generation timed out. Please try again." ,
outlineFailed : "Outline generation failed. Please try again." ,
outlineTimeout : "Outline generation timed out. Please try again." ,
draftSaved : "Draft saved. Returning to the template list." ,
draftSaveFailed : "Failed to save the draft. Please try again." ,
queued : "Task submitted. The article is now waiting in the generation queue." ,
2026-04-01 00:58:42 +08:00
submitted : "Generation task submitted. Refreshing article data." ,
} ,
} ,
} ,
article : {
drawerTitle : "Article details" ,
preview : "Content preview" ,
versionHistory : "Version history" ,
2026-04-03 00:39:15 +08:00
publishedDetails : "Published details" ,
2026-04-01 00:58:42 +08:00
untitled : "Untitled article" ,
noContent : "This article does not have generated content yet." ,
2026-04-02 00:31:28 +08:00
editor : {
publish : "Publish" ,
titlePlaceholder : "Enter article title" ,
leaveConfirm : {
title : "Unsaved changes" ,
description : "This article has unsaved edits. Leave now to discard them, or save first before going back." ,
discard : "Discard changes" ,
saveAndLeave : "Save and leave" ,
} ,
platformsTitle : "Publish platforms" ,
2026-04-06 15:41:49 +08:00
platformsHint : "This stays in sync with Media Management so you can edit the article's publish platforms directly." ,
2026-04-02 00:31:28 +08:00
coverTitle : "Cover image" ,
2026-04-07 09:19:03 +08:00
coverHint : "Off by default. Once uploaded, the cover is saved with the article." ,
coverRequired : "Baijiahao is selected, so the cover image becomes required." ,
2026-04-02 00:31:28 +08:00
coverUpload : "Upload cover image" ,
2026-04-07 09:19:03 +08:00
coverReplace : "Choose again" ,
coverRemove : "Remove cover" ,
coverSaved : "Cover asset saved" ,
coverOff : "Cover image is currently off. Turn it on to upload and crop a cover asset." ,
coverTagRequired : "Required" ,
coverTagOptional : "Optional" ,
2026-04-02 00:31:28 +08:00
imagePrompt : "Enter image URL" ,
2026-04-05 22:10:05 +08:00
tablePicker : {
empty : "Drag to choose a table size" ,
hint : "Keep dragging near the edge to expand the grid" ,
} ,
2026-04-05 22:41:48 +08:00
tableMenu : {
addRowBefore : "Insert row above" ,
addRowAfter : "Insert row below" ,
deleteRow : "Delete row" ,
addColBefore : "Insert left column" ,
addColAfter : "Insert right column" ,
deleteCol : "Delete column" ,
alignLeft : "Align left" ,
alignCenter : "Align center" ,
alignRight : "Align right" ,
deleteTable : "Delete table" ,
} ,
imageMenu : {
replace : "Replace image" ,
caption : "Toggle caption" ,
2026-04-05 23:41:58 +08:00
alignLeft : "Align left" ,
alignCenter : "Align center" ,
alignRight : "Align right" ,
2026-04-05 22:41:48 +08:00
resetSize : "Reset size" ,
delete : "Delete image" ,
} ,
2026-04-16 20:40:41 +08:00
imagePicker : {
title : "Select image" ,
emptyTitle : "Choose an image for the article body" ,
emptyHint : "Pick from the image library or upload locally. Local uploads are converted to WebP before upload." ,
} ,
2026-04-06 22:18:55 +08:00
aiOptimize : {
title : "AI Optimize" ,
subtitle : "Supports contiguous multi-block selections and generates a rewrite from your instruction" ,
originalLabel : "Selected text" ,
previewLabel : "Preview" ,
previewPlaceholder : "After you enter an instruction, the AI rewrite will stream here." ,
generating : "Generating..." ,
streamingHint : "Building a stronger version of the selected text in real time..." ,
disclaimer : "AI output is for reference only. Review it before replacing the original text." ,
promptLabel : "Instruction" ,
promptPlaceholder : "For example: make it more natural, classroom-friendly, and persuasive while keeping the facts unchanged." ,
generate : "Generate" ,
regenerate : "Regenerate" ,
stop : "Stop" ,
replace : "Replace selection" ,
close : "Keep original" ,
messages : {
selectionRequired : "Select one block or multiple contiguous blocks of article text first." ,
promptRequired : "Enter an instruction first." ,
selectionChanged : "The original selection changed. Please select it again before replacing." ,
empty : "There is no AI content ready to replace yet." ,
failed : "AI optimization failed. Please try again later." ,
} ,
} ,
2026-04-02 00:31:28 +08:00
messages : {
saved : "Article saved." ,
generating : "This article is still generating. Try editing it later." ,
locked : "Only completed articles can be edited." ,
2026-04-03 00:39:15 +08:00
publishPending : "Save the article first, then choose the target platforms." ,
2026-04-02 00:31:28 +08:00
} ,
platforms : {
zhihu : "Zhihu" ,
} ,
} ,
2026-04-01 00:58:42 +08:00
meta : {
templateType : "Template" ,
currentVersion : "Current version" ,
source : "Source label" ,
2026-04-25 21:36:44 +08:00
sourceArticle : "Source article" ,
2026-04-01 00:58:42 +08:00
wordCount : "Word count" ,
} ,
versionUntitled : "Untitled version" ,
} ,
2026-04-03 00:39:15 +08:00
media : {
hero : {
eyebrow : "Publisher" ,
} ,
plugin : {
title : "Browser Publisher" ,
ready : "Extension connected" ,
notInstalled : "Extension not connected" ,
installTitle : "Install and open the GEO Publisher extension first" ,
installDesc : "Binding and publishing depend on the browser's local platform sessions. The extension stores its own installation identity so future background checks can continue after the SaaS page is closed." ,
backgroundHint : "The extension should not reuse the web app's access token directly. This implementation already registers a dedicated installation identity for future background scanning and inclusion checks." ,
versionLabel : "Extension version" ,
installationLabel : "Installation ID" ,
connectedSummary : "Locally signed-in platforms" ,
registerRequired : "The extension installation is not registered yet. Please re-detect first." ,
} ,
actions : {
redetect : "Re-detect" ,
bind : "Bind" ,
rebind : "Rebind" ,
unbind : "Unbind" ,
} ,
card : {
bound : "Bound" ,
unbound : "Unbound" ,
unboundHint : "{platform} has not been bound to this tenant yet." ,
needsAttention : "Needs attention" ,
expiredHint : "This account is no longer healthy. Rebind it to restore publishing." ,
localMissing : "Local session missing" ,
localMismatch : "Local account mismatch" ,
readyHint : "The correct local account is available and ready for publish or future background checks." ,
accountLabel : "SaaS account" ,
uidLabel : "Platform UID" ,
localLabel : "Local state" ,
localConnected : "Session detected" ,
localDisconnected : "No session detected" ,
updatedAt : "Last sync" ,
multiAccount : "{count} accounts bound" ,
openPlatform : "Open platform" ,
} ,
account : {
localMissing : "The tenant account is bound, but this browser does not currently have the matching local session." ,
localMismatch : "This browser is signed in to a different account. Rebind or switch the local account first." ,
ready : "Ready" ,
selectable : "Selectable" ,
unavailable : "Unavailable" ,
} ,
empty : {
accounts : "No publishable media accounts are bound yet." ,
} ,
messages : {
bindSuccess : "{platform} bound successfully." ,
2026-04-03 17:48:30 +08:00
bindSuccessTitle : "Binding successful" ,
bindSuccessDetail : "Bound account [{account}] on [{platform}]" ,
2026-04-03 00:39:15 +08:00
bindPending : "The extension did not detect a local session for this platform yet. Sign in via the extension and retry." ,
2026-04-03 17:48:30 +08:00
bindPendingTitle : "Binding incomplete" ,
bindFailureTitle : "Binding failed" ,
2026-04-03 00:39:15 +08:00
unbindSuccess : "Account unbound." ,
2026-04-03 17:48:30 +08:00
unbindSuccessTitle : "Unbind successful" ,
unbindFailureTitle : "Unbind failed" ,
2026-04-03 00:39:15 +08:00
unbindConfirm : "Unbind this platform account? Publishing will no longer be available until it is bound again." ,
} ,
publish : {
title : "Publish" ,
subtitle : "Multi-platform Dispatch" ,
description : "Choose tenant-bound accounts that are currently signed in locally. The extension executes the real publish flow and writes back the resulting links." ,
platformsTitle : "Target platforms" ,
2026-04-06 15:41:49 +08:00
platformsHint : "Previously selected and bound accounts are prefilled first. Unbound or locally unavailable platforms stay disabled." ,
2026-04-03 00:39:15 +08:00
coverTitle : "Cover image" ,
2026-04-07 09:19:03 +08:00
coverHint : "Off by default. Uploading opens the cover picker and cropper." ,
coverUpload : "Upload cover image" ,
2026-04-03 00:39:15 +08:00
coverPlaceholder : "Enter an optional cover asset URL" ,
messages : {
success : "{count} publish tasks submitted." ,
2026-04-03 17:48:30 +08:00
successTitle : "Publish successful" ,
2026-04-03 00:39:15 +08:00
partial : "Publish finished with {success} succeeded and {failed} failed." ,
2026-04-03 17:48:30 +08:00
partialTitle : "Partial publish failure" ,
2026-04-03 00:39:15 +08:00
selectPlatform : "Choose at least one available platform first." ,
2026-04-07 09:19:03 +08:00
coverRequired : "Baidu Baijiahao is selected. Please upload a cover image first." ,
2026-04-03 17:48:30 +08:00
failureTitle : "Publish failed" ,
failureItem : "Publishing to [{platform}] failed: [{reason}]" ,
unknownFailure : "Unknown error" ,
2026-04-03 00:39:15 +08:00
} ,
} ,
records : {
tabTitle : "Published details" ,
platform : "Platform" ,
status : "Status" ,
publishedAt : "Published at" ,
link : "Published link" ,
open : "Open" ,
copy : "Copy" ,
empty : "No publish records yet" ,
linkEmpty : "No link is available for this record yet." ,
copySuccess : "Link copied." ,
} ,
} ,
2026-04-07 09:19:03 +08:00
coverPicker : {
title : "Select cover image" ,
tabs : {
local : "Body / Local Upload" ,
ai : "AI Cover" ,
} ,
2026-04-16 20:40:41 +08:00
dropzoneTitle : "Upload image" ,
dropzoneHint : "Supports PNG, JPG, GIF, and WebP up to 10MB. Uploads are converted to WebP in the browser first." ,
2026-04-07 09:19:03 +08:00
previewTitle : "Cover crop preview" ,
previewHintLocked : "Baijiahao is selected, so the cover will be exported as 16:9 when you confirm." ,
previewHintFree : "There is no forced cover ratio right now. You can upload the original image directly or adjust framing before confirming." ,
requirementsTitle : "Platform requirements" ,
requirementsHint : "Requirements switch automatically based on the selected publish platforms. Baijiahao is mandatory." ,
recommendedRatio : "Recommended ratio" ,
recommendedSize : "Recommended size" ,
required : "Required" ,
optional : "Optional" ,
zoom : "Zoom" ,
fileLabel : "Current cover" ,
emptyTitle : "No publish platform selected" ,
emptyPlatforms : "Choose publish platforms first and each platform's cover requirements will appear here." ,
2026-04-16 20:40:41 +08:00
emptyHint : "Supports PNG, JPG, JPEG, GIF, WebP, BMP, SVG, and AVIF up to 10MB." ,
2026-04-07 09:19:03 +08:00
aiTitle : "AI cover is coming soon" ,
aiHint : "For now this flow supports local upload and cropping. AI cover generation can be plugged in here later." ,
actions : {
upload : "Local upload" ,
reset : "Reset framing" ,
remove : "Remove cover" ,
} ,
notes : {
required : "This platform currently requires a cover image in the publish flow. Publishing is blocked until one is uploaded." ,
optional : "This platform already supports standalone covers and reuses the current crop when publishing." ,
unsupported : "This platform's current integration does not consume a standalone cover yet and falls back to body content or the platform default." ,
} ,
messages : {
2026-04-16 20:40:41 +08:00
invalidType : "Only PNG, JPG, JPEG, GIF, WebP, BMP, SVG, and AVIF images are supported." ,
2026-04-07 09:19:03 +08:00
tooLarge : "Image size cannot exceed 10MB." ,
missingImage : "Select a cover image first." ,
missingArticle : "The article is not ready yet. Refresh and try again." ,
imageLoadFailed : "Failed to load the cover image. Please choose another image." ,
} ,
} ,
2026-04-01 00:58:42 +08:00
brands : {
eyebrow : "Brand Library" ,
title : "Brand Library" ,
description : "Manage keywords, question sets, and competitor assets around each brand." ,
railTitle : "Brands" ,
selectBrand : "Pick a brand to continue managing keywords and question sets." ,
newBrand : "New brand" ,
editBrand : "Edit brand" ,
deleteBrand : "Delete brand" ,
tabs : {
keywords : "Keywords" ,
competitors : "Competitors" ,
} ,
2026-04-16 21:01:40 +08:00
quota : {
plan : "Current plan" ,
planHint : "Brand library limits are enforced from the active plan." ,
brands : "Brand companies" ,
brandsHint : "Free defaults to 1 and paid defaults to 2." ,
keywords : "Total keywords" ,
keywordsHint : "The total number of keywords this account can bind." ,
questions : "Questions per keyword" ,
questionsHint : "The maximum number of questions allowed under one keyword." ,
} ,
meta : {
keywordCount : "{count} keywords" ,
questionCount : "{count} questions" ,
brandKeywordCount : "{count} keywords under this brand" ,
globalKeywordUsage : "Total keywords used {used} / {total}" ,
keywordQuestionUsage : "Questions {used} / {total}" ,
} ,
2026-04-01 00:58:42 +08:00
sections : {
keywords : "Keywords" ,
questions : "Question set" ,
competitors : "Competitor library" ,
versions : "Version history" ,
} ,
actions : {
newKeyword : "New keyword" ,
newQuestion : "New question" ,
newCompetitor : "New competitor" ,
viewVersions : "View versions" ,
} ,
empty : {
brands : "No brand data yet. Create your first brand to start." ,
questions : "No questions under this keyword yet." ,
competitors : "No competitors under this brand yet." ,
} ,
form : {
brandName : "Brand name" ,
2026-04-02 11:38:08 +08:00
brandWebsite : "Company website (optional)" ,
2026-04-01 00:58:42 +08:00
brandDescription : "Brand description" ,
keywordName : "Keyword" ,
questionText : "Question text" ,
competitorName : "Competitor name" ,
competitorWebsite : "Competitor website" ,
competitorDescription : "Competitor description" ,
competitorLines : "Product lines" ,
competitorLinesHint : "Separate multiple product lines with commas." ,
} ,
messages : {
createBrand : "Brand created." ,
updateBrand : "Brand updated." ,
deleteBrand : "Brand deleted." ,
createKeyword : "Keyword created." ,
updateKeyword : "Keyword updated." ,
deleteKeyword : "Keyword deleted." ,
createQuestion : "Question created." ,
updateQuestion : "Question updated." ,
deleteQuestion : "Question deleted." ,
createCompetitor : "Competitor created." ,
updateCompetitor : "Competitor updated." ,
deleteCompetitor : "Competitor deleted." ,
chooseBrand : "Please choose a brand first." ,
chooseKeyword : "Please choose a keyword first." ,
2026-04-16 21:01:40 +08:00
brandLimitReached : "Your current plan allows up to {limit} brand companies." ,
keywordLimitReached : "This account allows up to {limit} keywords." ,
questionLimitReached : "This keyword allows up to {limit} questions." ,
2026-04-01 00:58:42 +08:00
} ,
} ,
2026-04-02 00:31:28 +08:00
custom : {
eyebrow : "Custom Generation" ,
title : "Custom Generation" ,
description : "Generate articles with custom prompt rules, instant or scheduled." ,
cards : {
instantTitle : "Instant Generation" ,
instantDesc : "Quickly create custom content tasks" ,
scheduleTitle : "Scheduled Generation" ,
scheduleDesc : "Set up automated content generation plans" ,
} ,
tabs : {
articles : "Articles" ,
instantTasks : "Instant Tasks" ,
scheduleTasks : "Scheduled Tasks" ,
promptRules : "Prompt Rules" ,
} ,
promptRule : {
name : "Rule name" ,
namePlaceholder : "Enter prompt name" ,
content : "Prompt content" ,
scene : "Scene" ,
tone : "Default tone" ,
wordCount : "Default word count" ,
status : "Status" ,
articleCount : "Article count" ,
createTitle : "Create Prompt Rule" ,
editTitle : "Edit Prompt Rule" ,
deleteConfirm : "Delete this rule?" ,
enabled : "Enabled" ,
disabled : "Disabled" ,
ungrouped : "Ungrouped" ,
groupPlaceholder : "Select a prompt group" ,
contentPlaceholder : "Enter prompt content, variables supported" ,
} ,
task : {
basicSection : "I Basic Information" ,
advancedSection : "I Advanced Settings" ,
name : "Task name" ,
namePlaceholder : "Use a simple name so the task is easy to identify later." ,
prompt : "Select Prompt" ,
promptPlaceholder : "Select a prompt" ,
createPrompt : "New Prompt" ,
platforms : "Publish platforms" ,
2026-04-06 15:41:49 +08:00
platformsHint : "Synced from Media Management. This field is optional and supports multiple selection." ,
2026-04-02 00:31:28 +08:00
platformConnected : "Connected" ,
2026-04-06 15:41:49 +08:00
platformUnauthorized : "Unauthorized" ,
platformEmptyTitle : "No publish platforms" ,
platformEmptyHint : "No platform data is available yet. Please verify the Media Management setup first." ,
2026-04-02 00:31:28 +08:00
cover : "Cover image" ,
coverHint : "Keep the cover clear, complete, and visually polished." ,
coverUpload : "Upload cover image" ,
coverUploadHint : "Local preview only for now" ,
scheduleTime : "Schedule article generation" ,
scheduleEveryDay : "Every day" ,
enableWebSearch : "Enable web search for generation" ,
generateCount : "Article count" ,
submit : "Create task" ,
} ,
group : {
title : "Rule Groups" ,
createTitle : "Create Group" ,
editTitle : "Edit Group" ,
deleteConfirm : "Deleting this group will move its rules to ungrouped. Continue?" ,
name : "Group name" ,
allRules : "All Rules" ,
} ,
schedule : {
name : "Task name" ,
rule : "Prompt rule" ,
cron : "Frequency" ,
platform : "Target platform" ,
nextRun : "Next run" ,
startAt : "Start time" ,
endAt : "End time" ,
brand : "Brand" ,
createTitle : "Create Scheduled Task" ,
editTitle : "Edit Scheduled Task" ,
deleteConfirm : "Delete this scheduled task?" ,
enabled : "Enabled" ,
disabled : "Disabled" ,
cronOptions : {
daily : "Once daily" ,
twiceDaily : "Twice daily" ,
weekly : "Once weekly" ,
custom : "Custom Cron" ,
} ,
} ,
instant : {
title : "Instant Generate" ,
createTitle : "Create Instant Task" ,
selectRule : "Select prompt rule" ,
selectBrand : "Select brand" ,
selectPlatform : "Target platform" ,
submit : "Generate now" ,
extraParams : "Extra parameters" ,
2026-04-02 21:16:12 +08:00
name : "Task name" ,
executionStatus : "Execution status" ,
executionTime : "Execution time" ,
createdTime : "Created time" ,
empty : "No instant tasks yet." ,
2026-04-02 00:31:28 +08:00
} ,
filters : {
promptRule : "Prompt rule" ,
publishStatus : "Publish status" ,
generateStatus : "Generation status" ,
title : "Title" ,
generateTime : "Generation time" ,
2026-04-02 21:16:12 +08:00
status : "Status" ,
name : "Name" ,
namePlaceholder : "Search by task name" ,
createdTime : "Created time" ,
} ,
article : {
titleColumn : "Article title" ,
titleGenerating : "Generating title" ,
2026-04-02 00:31:28 +08:00
} ,
messages : {
ruleCreated : "Rule created." ,
ruleUpdated : "Rule updated." ,
ruleDeleted : "Rule deleted." ,
ruleEnabled : "Rule enabled." ,
ruleDisabled : "Rule disabled." ,
groupCreated : "Group created." ,
groupUpdated : "Group updated." ,
groupDeleted : "Group deleted." ,
scheduleCreated : "Scheduled task created." ,
scheduleUpdated : "Scheduled task updated." ,
scheduleDeleted : "Scheduled task deleted." ,
scheduleEnabled : "Scheduled task enabled." ,
scheduleDisabled : "Scheduled task disabled." ,
generateSubmitted : "Generation task submitted." ,
missingTaskName : "Enter a task name first." ,
missingPromptRule : "Choose a prompt first." ,
invalidGenerateCount : "Article count must be at least 1." ,
invalidScheduleTime : "Choose a valid schedule time." ,
missingPromptName : "Enter a prompt name first." ,
missingPromptContent : "Enter prompt content first." ,
} ,
} ,
2026-04-01 00:58:42 +08:00
featureStub : {
eyebrow : "Feature Placeholder" ,
currentStatus : "Current status" ,
nextPriority : "Next priority" ,
integrationStrategy : "Integration strategy" ,
currentStatusText : "The page shell is ready with navigation and auth guard support." ,
integrationStrategyText : "Keep the UI aligned with tenant-api envelopes and wire real read flows before write flows." ,
} ,
2026-04-16 20:40:41 +08:00
images : {
title : "Image Management" ,
description : "Manage image library with folder organization and reference analysis." ,
uploadBtn : "Upload Image" ,
folders : "Folders" ,
uncategorized : "Uncategorized" ,
searchPlaceholder : "Search image name..." ,
newFolder : "New Folder" ,
folderName : "Folder Name" ,
rename : "Rename" ,
move : "Move" ,
deleteImage : "Delete Image" ,
deleteFolder : "Delete Folder" ,
forceDelete : "Force Delete" ,
confirmDeleteTitle : "Confirm Delete" ,
confirmDeleteImage : "Are you sure you want to delete this image? This action cannot be undone." ,
confirmDeleteFolder : "Confirm delete folder {name}?" ,
imageInUse : "Image is in use" ,
folderHasRefs : "This folder contains {count} images. They may already be referenced by articles. Deleting the folder will also delete these images permanently." ,
refArticleBody : "Body reference" ,
refArticleCover : "Cover reference" ,
storageUsage : "Storage Usage" ,
storageUsageDetail : "{used} / {total} ({percent}%)" ,
quotaExceeded : "Storage is full, please clean up before uploading more." ,
uploadSuccess : "Image uploaded successfully" ,
uploadReusedSuccess : "Matching image already exists in the library and was reused" ,
uploadFailed : "Image upload failed" ,
deleteSuccess : "Deleted successfully" ,
folderCreated : "Folder created successfully" ,
folderRenamed : "Folder renamed successfully" ,
folderDeleted : "Folder deleted" ,
imageRenamed : "Image renamed successfully" ,
imageMoved : "Image moved successfully" ,
noImages : "No images yet. Click upload to start." ,
allFolders : "All Folders" ,
selectImage : "Select Image" ,
libraryTab : "Library" ,
} ,
2026-04-01 00:58:42 +08:00
} as const ;
export default enUS ;