en.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. export default {
  2. nav: {
  3. feed: 'Feed',
  4. compose: 'New Post',
  5. media: 'Media',
  6. scheduler: 'Scheduler',
  7. analytics: 'Analytics',
  8. competitors: 'Competitors',
  9. settings: 'Settings',
  10. },
  11. analytics: {
  12. title: 'Analytics',
  13. subtitle: 'Publishing activity across all connected platforms',
  14. refresh: 'Refresh',
  15. loading: 'Loading analytics…',
  16. empty: 'No posts yet.',
  17. emptyHint: 'Start publishing to see analytics here.',
  18. totalPosts: 'Total Posts',
  19. last7Days: 'Last 7 Days',
  20. platformsReached: 'Platforms Reached',
  21. successRate: 'Success Rate',
  22. postsPerDay: 'Posts per Day',
  23. postsPerDaySubtitle: 'Last 30 days',
  24. noActivity: 'No activity in the last 30 days.',
  25. platformBreakdown: 'Platform Breakdown',
  26. successfulPosts: 'successful posts',
  27. statusBreakdown: 'Status Breakdown',
  28. published: 'Published',
  29. partial: 'Partial',
  30. failed: 'Failed',
  31. recentPosts: 'Recent Posts',
  32. colContent: 'Content',
  33. colPlatforms: 'Platforms',
  34. colDate: 'Date',
  35. colStatus: 'Status',
  36. statusPublished: 'Published',
  37. statusPartial: 'Partial',
  38. statusFailed: 'Failed',
  39. typeScheduled: 'Scheduled',
  40. typeImmediate: 'Immediate',
  41. noRecentPosts: 'No posts to show.',
  42. loadMore: 'Load more',
  43. noContent: 'Content not available for older posts',
  44. filterBy: 'Filter:',
  45. filterAll: 'All',
  46. crawlMetrics: 'Crawl Metrics',
  47. crawling: 'Crawling…',
  48. crawlDone: 'Crawled {count} posts',
  49. insightsTitle: 'Advanced Insights',
  50. insightsSubtitle: 'Engagement metrics from connected platforms',
  51. insightsEmpty: 'No engagement data yet.',
  52. insightsEmptyHint: 'Click "Crawl Metrics" to fetch engagement data from your connected platforms.',
  53. bestTimeTitle: 'Best Posting Times',
  54. bestTimeSubtitle: 'Average engagement score by time (UTC)',
  55. byHourTitle: 'By Hour of Day',
  56. byDayTitle: 'By Day of Week',
  57. heatmapTitle: 'Engagement Heatmap',
  58. heatmapSubtitle: 'Day × hour (UTC) — darker = higher avg engagement',
  59. topPostsTitle: 'Top Performing Posts',
  60. noTopPosts: 'No top posts yet.',
  61. platformCompTitle: 'Platform Comparison',
  62. colAvgEngagement: 'Avg Engagement',
  63. colAvgLikes: 'Avg Likes',
  64. colAvgComments: 'Avg Comments',
  65. colAvgShares: 'Avg Shares',
  66. colTracked: 'Posts Tracked',
  67. dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  68. },
  69. media: {
  70. title: 'Media Library',
  71. fileCount: '{count} files',
  72. upload: 'Upload',
  73. uploading: 'Uploading…',
  74. dropZoneTitle: 'Drop files here or click Upload',
  75. dropZoneHint: 'Supports JPEG, PNG, GIF, WebP, MP4, MOV — up to 100 MB each',
  76. useInPost: 'Use in Post',
  77. copyUrl: 'Copy URL',
  78. copied: 'Copied!',
  79. deleteConfirmTitle: 'Delete this file?',
  80. deleteConfirmHint: 'This cannot be undone. Any posts using this file will lose the media.',
  81. cancel: 'Cancel',
  82. delete: 'Delete',
  83. deleting: 'Deleting…',
  84. allFiles: 'All Files',
  85. unorganized: 'Unorganized',
  86. accounts: 'Accounts',
  87. folders: 'Folders',
  88. newFolder: 'New Folder',
  89. folderNamePlaceholder: 'Folder name…',
  90. moveToFolder: 'Move to folder',
  91. removeFolderAssign: 'Remove from folder',
  92. },
  93. dashboard: {
  94. platforms: 'Platforms',
  95. tags: 'Tags',
  96. allTags: 'All',
  97. searchPlaceholder: 'Search content or user...',
  98. refresh: 'Refresh',
  99. refreshing: 'Refreshing...',
  100. newPost: '+ New Post',
  101. loading: 'Loading feed...',
  102. empty: 'No content to show.',
  103. emptyHint: 'Check platform connections or refresh the feed.',
  104. },
  105. compose: {
  106. title: 'New Post',
  107. destinationsLabel: 'Post to',
  108. placeholder: "What's on your mind?",
  109. cancel: 'Cancel',
  110. schedule: 'Schedule',
  111. send: 'Post Now →',
  112. sending: 'Posting...',
  113. successMessage: 'Post sent successfully.',
  114. scheduleTitle: 'Schedule post (leave empty to post now)',
  115. timezoneLabel: 'Timezone',
  116. timezoneAutoFrom: 'Auto from account',
  117. preview: 'Preview',
  118. addMedia: 'Photo / Video',
  119. uploadFile: 'Upload a photo or video from your device',
  120. uploading: 'Uploading…',
  121. uploadFailed: 'Upload failed. Please try again.',
  122. pasteUrl: 'or paste a URL',
  123. cancelUrl: 'cancel',
  124. mediaUrlPlaceholder: 'Paste image or video URL, then press Enter…',
  125. mediaLoadError: 'Could not load this URL — check it is publicly accessible.',
  126. igImageRequired: 'Instagram requires an image or video.',
  127. noDestinations: 'No platforms configured.',
  128. goToSettings: 'Go to Settings →',
  129. saveDraft: 'Save Draft',
  130. updateDraft: 'Update Draft',
  131. savingDraft: 'Saving…',
  132. draftSaved: 'Draft saved.',
  133. suggestedTimes: 'Suggested times',
  134. suggestionsFromHistory: 'based on your history',
  135. suggestionsFromDefaults: 'industry best practices',
  136. suggestionsLoading: 'Loading suggestions…',
  137. hashtagSuggestions: 'Suggested hashtags',
  138. hashtagsLoading: 'Suggesting…',
  139. hashtagsRefresh: 'Refresh',
  140. hashtagGroups: 'Hashtag groups',
  141. aiButton: 'AI',
  142. aiPanelTitle: 'Generate with AI',
  143. aiTopic: 'Topic',
  144. aiTopicPlaceholder: 'What should this post be about?',
  145. aiGoal: 'Goal',
  146. aiGoals: {
  147. promote: 'Promote',
  148. engage: 'Engage',
  149. inform: 'Inform',
  150. entertain: 'Entertain',
  151. announce: 'Announce',
  152. },
  153. aiTone: 'Tone',
  154. aiToneDefault: 'From profile',
  155. aiGenerate: 'Generate',
  156. aiGenerating: 'Generating…',
  157. aiStop: 'Stop',
  158. aiContextFrom: 'Context: {account}',
  159. aiNoContext: 'No profile — set one in Settings',
  160. aiNotConfigured: 'AI not configured — check Settings → AI Integration',
  161. aiError: 'Generation failed',
  162. aiUseCompetitors: 'Use competitor context',
  163. aiUseCompetitorsHint: 'differentiate from {names}',
  164. captionGenerate: '✨ Generate caption',
  165. captionGenerating: 'Generating caption…',
  166. captionError: 'Caption generation failed',
  167. firstCommentToggle: 'First Comment',
  168. firstCommentPlaceholder: 'Add a first comment (hashtags, links, extra context)…',
  169. firstCommentHint: 'Supported on Instagram, Facebook, Mastodon, and Bluesky.',
  170. },
  171. scheduler: {
  172. title: 'Scheduler',
  173. newSchedule: '+ New Post',
  174. noJobs: 'No scheduled posts.',
  175. statuses: {
  176. pending: 'Pending',
  177. completed: 'Completed',
  178. failed: 'Failed',
  179. cancelled: 'Cancelled',
  180. },
  181. cancel: 'Cancel',
  182. scheduledTab: 'Scheduled',
  183. calendarTab: 'Calendar',
  184. draftsTab: 'Drafts',
  185. noDrafts: 'No saved drafts.',
  186. editDraft: 'Edit',
  187. deleteDraft: 'Delete',
  188. goToToday: 'Today',
  189. noJobsDay: 'No posts scheduled for this day.',
  190. weekDaysShort: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
  191. months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  192. bulkDraft: {
  193. openButton: 'Bulk Generate',
  194. title: 'Bulk AI Draft Generation',
  195. subtitle: 'Generate draft posts for multiple topics at once.',
  196. topicsLabel: 'Topics (one per line)',
  197. topicsPlaceholder: 'New product launch\nWeekly tips roundup\nBehind the scenes...',
  198. topicsHint: 'Each line becomes one AI-generated draft saved to your Drafts tab.',
  199. toneLabel: 'Tone',
  200. destinationsLabel: 'Destinations',
  201. noDestinations: 'No platforms connected. Connect platforms in Settings first.',
  202. progress: 'Generation progress',
  203. generate: 'Generate Drafts',
  204. generating: 'Starting…',
  205. generateMore: 'Generate More',
  206. viewDrafts: 'View Drafts',
  207. runInBackground: 'Run in background',
  208. statusDone: '{completed} draft created | {completed} drafts created ({failed} failed)',
  209. statusFailed: 'Batch failed unexpectedly. Please try again.',
  210. statusGenerating: 'Generating — {count} remaining…',
  211. tones: {
  212. professional: 'Professional',
  213. casual: 'Casual',
  214. engaging: 'Engaging',
  215. informative: 'Informative',
  216. humorous: 'Humorous',
  217. inspirational: 'Inspirational',
  218. },
  219. },
  220. },
  221. settings: {
  222. title: 'Platform Connections',
  223. subtitle: 'Edit the {env} file to connect platforms, then restart the relevant service.',
  224. connected: 'Connected',
  225. notConnected: 'Not connected',
  226. refreshStatus: '↻ Refresh Status',
  227. envHint: 'Configuration required',
  228. profiles: {
  229. sectionTitle: 'Account Profiles',
  230. sectionSubtitle: 'Business context used to personalise AI-generated content.',
  231. edit: 'Edit',
  232. close: 'Close',
  233. save: 'Save Profile',
  234. saving: 'Saving…',
  235. saved: 'Saved!',
  236. noAccounts: 'No connected accounts. Connect platforms above first.',
  237. businessName: 'Business Name',
  238. businessNameHint: 'e.g. Acme Coffee Roasters',
  239. description: 'Description',
  240. descriptionHint: 'What does this account represent? What do you do?',
  241. websiteUrl: 'Website URL',
  242. industry: 'Industry',
  243. industryHint: 'e.g. Food & Beverage, SaaS, Retail',
  244. targetAudience: 'Target Audience',
  245. targetAudienceHint: 'e.g. Coffee enthusiasts aged 25–45',
  246. toneOfVoice: 'Tone of Voice',
  247. toneSelect: 'Select a tone…',
  248. keywords: 'Keywords',
  249. keywordsHint: 'Comma-separated, e.g. organic, specialty, single-origin',
  250. hashtags: 'Preferred Hashtags',
  251. hashtagsHint: 'e.g. #specialtycoffee #coffeelovers',
  252. postingGuidelines: 'Posting Guidelines',
  253. postingGuidelinesHint: 'Any specific rules, e.g. always mention opening hours on Fridays',
  254. timezone: 'Timezone',
  255. timezoneHint: 'Used to schedule posts at the correct local time for this account.',
  256. timezoneAuto: 'Use browser timezone',
  257. },
  258. hashtags: {
  259. sectionTitle: 'Hashtag Groups',
  260. sectionSubtitle: 'Save hashtag presets and analyse performance from your published posts.',
  261. addGroup: 'Add Group',
  262. createGroup: 'Create Group',
  263. noGroups: 'No hashtag groups yet.',
  264. edit: 'Edit',
  265. delete: 'Delete',
  266. deleteConfirm: 'Delete this hashtag group?',
  267. save: 'Save',
  268. cancel: 'Cancel',
  269. groupNamePlaceholder: 'Group name (e.g. Photography)',
  270. hashtagsPlaceholder: '#photography #nature #travel — space or comma separated',
  271. showStats: 'Show Stats',
  272. hideStats: 'Hide Stats',
  273. statsTitle: 'Hashtag Performance',
  274. sortByUsage: 'By Usage',
  275. sortByEngagement: 'By Engagement',
  276. scanPosts: 'Scan Posts',
  277. scanning: 'Scanning…',
  278. loadingStats: 'Loading stats…',
  279. noStats: 'No hashtag stats yet — scan your posts to analyse performance.',
  280. allAccounts: 'All accounts',
  281. aiSuggest: 'AI Suggest',
  282. suggesting: 'Generating…',
  283. selectToGroup: 'Click tags to select, then save as a group:',
  284. colHashtag: 'Hashtag',
  285. colUses: 'Uses',
  286. colEngagement: 'Avg Engagement',
  287. colGrade: 'Grade',
  288. colPlatforms: 'Platforms',
  289. },
  290. tiktok: {
  291. sectionTitle: 'TikTok',
  292. sectionSubtitle: 'Connect your TikTok account to publish videos.',
  293. clientKeyLabel: 'Client Key',
  294. clientSecretLabel: 'Client Secret',
  295. clientKeyPlaceholder: 'Your TikTok App Client Key',
  296. clientSecretPlaceholder: 'Your TikTok App Client Secret',
  297. saveApp: 'Save App Credentials',
  298. saving: 'Saving...',
  299. appConfigured: 'App credentials saved',
  300. connectButton: 'Connect with TikTok',
  301. connecting: 'Redirecting to TikTok...',
  302. reconnect: 'Reconnect',
  303. disconnect: 'Disconnect',
  304. disconnectConfirm: 'This will disconnect your TikTok account. Continue?',
  305. connectedAs: 'Connected as',
  306. videoOnly: 'TikTok only supports video posts. Select a video in Compose to publish.',
  307. errorTitle: 'TikTok OAuth Error',
  308. getAppHelp: 'Get your credentials from',
  309. devPortal: 'developers.tiktok.com',
  310. },
  311. pinterest: {
  312. sectionTitle: 'Pinterest',
  313. sectionSubtitle: 'Connect your Pinterest account to create pins on your boards.',
  314. clientIdLabel: 'Client ID',
  315. clientSecretLabel: 'Client Secret',
  316. clientIdPlaceholder: 'Your Pinterest App Client ID',
  317. clientSecretPlaceholder: 'Your Pinterest App Client Secret',
  318. saveApp: 'Save App Credentials',
  319. saving: 'Saving...',
  320. appConfigured: 'App credentials saved',
  321. connectButton: 'Connect with Pinterest',
  322. connecting: 'Redirecting to Pinterest...',
  323. reconnect: 'Reconnect',
  324. disconnect: 'Disconnect',
  325. disconnectConfirm: 'This will disconnect your Pinterest account and all boards. Continue?',
  326. boardsTitle: 'Your Boards',
  327. noBoards: 'No boards found.',
  328. saveBoards: 'Save Board Selection',
  329. savingBoards: 'Saving...',
  330. boardsSaved: 'Saved!',
  331. getAppHelp: 'Get your credentials from',
  332. devPortal: 'developers.pinterest.com',
  333. errorTitle: 'Pinterest OAuth Error',
  334. },
  335. meta: {
  336. sectionTitle: 'Facebook & Instagram',
  337. sectionSubtitle: 'Both platforms share a single Facebook Developer App. Connect once to manage all your Pages and Instagram accounts.',
  338. appIdLabel: 'App ID',
  339. appSecretLabel: 'App Secret',
  340. appIdPlaceholder: 'Your Facebook App ID',
  341. appSecretPlaceholder: 'Your Facebook App Secret',
  342. saveApp: 'Save App Credentials',
  343. saving: 'Saving...',
  344. appConfigured: 'App credentials saved',
  345. connectButton: 'Connect with Facebook & Instagram',
  346. connecting: 'Redirecting to Facebook...',
  347. reconnect: 'Reconnect',
  348. disconnect: 'Disconnect all',
  349. disconnectConfirm: 'This will disconnect all Facebook Pages and Instagram accounts. Continue?',
  350. discoveryTitle: 'Choose Pages & Accounts to Connect',
  351. discoverySubtitle: 'Select any combination of Facebook Pages and Instagram accounts below.',
  352. pagesHeading: 'Facebook Pages',
  353. igHeading: 'Instagram Accounts',
  354. noPages: 'No Facebook Pages found for this account.',
  355. noIgAccounts: 'No Instagram Business accounts found.',
  356. igLinkedTo: 'Linked to',
  357. confirmSelection: 'Connect Selected',
  358. confirmingSelection: 'Connecting...',
  359. nothingSelected: 'Select at least one Page or Instagram account.',
  360. connectedPages: 'Connected Pages',
  361. connectedAccounts: 'Connected Accounts',
  362. errorTitle: 'OAuth Error',
  363. getAppHelp: 'Get your App ID and Secret from',
  364. devPortal: 'developers.facebook.com',
  365. expiryWarningTitle: 'Instagram token expiring soon',
  366. expiryWarningBody: '{username} expires in {days} day | {username} expires in {days} days',
  367. expiryRefreshToken: 'Refresh Token',
  368. expiryRefreshing: 'Refreshing…',
  369. expiryRefreshDone: 'Token refreshed',
  370. expiryAutoNote: 'Tokens are refreshed automatically when ≤ 7 days remain.',
  371. expiryReconnect: 'Reconnect',
  372. expiryDismiss: 'Dismiss',
  373. },
  374. },
  375. ai: {
  376. sectionTitle: 'AI Integration',
  377. sectionSubtitle: 'Connect a local Ollama instance to generate post content with AI.',
  378. endpointLabel: 'Ollama Endpoint',
  379. endpointPlaceholder: 'http://localhost:11434',
  380. endpointHint: 'Inside Docker the default is http://ollama:11434',
  381. modelLabel: 'Model',
  382. modelPlaceholder: 'Select a model…',
  383. testConnection: 'Test Connection',
  384. testing: 'Testing…',
  385. saveConfig: 'Save',
  386. saving: 'Saving…',
  387. saved: 'Saved!',
  388. noModels: 'No models found — is Ollama running?',
  389. connected: 'Connected',
  390. connectionFailed: 'Connection failed',
  391. modelsAvailable: '{count} model available | {count} models available',
  392. visionModelLabel: 'Vision Model',
  393. visionModelPlaceholder: 'e.g. llava, llama3.2-vision',
  394. visionModelHint: 'Used for image captioning. Pull with: ollama pull llava',
  395. activeProvider: 'Active Provider',
  396. setActive: 'Set as Active',
  397. active: 'Active',
  398. disconnect: 'Disconnect',
  399. disconnectConfirm: 'Remove this provider and its API key?',
  400. apiKeyLabel: 'API Key',
  401. apiKeyPlaceholder: 'Paste your API key…',
  402. apiKeyConfigured: 'API key saved',
  403. connectAndActivate: 'Connect & Set Active',
  404. saveProvider: 'Save',
  405. providerSaved: 'Saved!',
  406. openai: {
  407. sectionTitle: 'OpenAI',
  408. sectionSubtitle: 'GPT-4o and GPT-4o-mini via the OpenAI API.',
  409. getKeyHint: 'Get an API key at platform.openai.com',
  410. },
  411. groq: {
  412. sectionTitle: 'Groq',
  413. sectionSubtitle: 'Ultra-fast inference with Llama and Mixtral models.',
  414. getKeyHint: 'Get an API key at console.groq.com',
  415. },
  416. gemini: {
  417. sectionTitle: 'Google Gemini',
  418. sectionSubtitle: 'Gemini 2.0 Flash and 1.5 Pro with native vision support.',
  419. getKeyHint: 'Get an API key at aistudio.google.com',
  420. },
  421. },
  422. feed: {
  423. openOriginal: '↗ Open',
  424. },
  425. competitors: {
  426. sectionTitle: 'Competitor Intelligence',
  427. sectionSubtitle: 'Track up to 2 competitors and use their content to improve your AI-generated posts.',
  428. addCompetitor: 'Add Competitor',
  429. addButton: 'Add',
  430. namePlaceholder: 'Competitor name',
  431. websitePlaceholder: 'https://competitor.com',
  432. socialUrls: 'Social profile URLs',
  433. scrapeNow: 'Scrape Now',
  434. scraping: 'Scraping…',
  435. summarizeAi: 'Summarise with AI',
  436. summarizing: 'Summarising…',
  437. extractKeywords: 'Extract Keywords',
  438. extractingKeywords: 'Extracting…',
  439. aiSummaryLabel: 'AI Summary',
  440. aiAnalysisLabel: 'AI Analysis',
  441. analysisTone: 'Tone',
  442. analysisPositioning: 'Positioning',
  443. analysisThemes: 'Content themes',
  444. analysisGaps: 'Gaps & opportunities',
  445. analysisMoves: 'Differentiation moves',
  446. keywordsLabel: 'Competitor Keywords',
  447. lastScraped: 'Last scraped',
  448. scrapeSuccess: 'Scraped {count} source(s) successfully',
  449. scrapeNoContent: 'No content found — check the URL and try again',
  450. emptyState: 'No competitors added yet. Add up to 2 to track their content.',
  451. maxReached: 'Maximum 2 competitors reached.',
  452. edit: 'Edit',
  453. save: 'Save',
  454. cancel: 'Cancel',
  455. delete: 'Remove',
  456. confirmDelete: 'Remove this competitor?',
  457. },
  458. platforms: {
  459. twitter: 'Twitter/X',
  460. linkedin: 'LinkedIn',
  461. mastodon: 'Mastodon',
  462. bluesky: 'Bluesky',
  463. instagram: 'Instagram',
  464. facebook: 'Facebook',
  465. reddit: 'Reddit',
  466. youtube: 'YouTube',
  467. pinterest: 'Pinterest',
  468. tiktok: 'TikTok',
  469. },
  470. }