en.ts 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. export default {
  2. nav: {
  3. feed: 'Feed',
  4. compose: 'New Post',
  5. media: 'Media',
  6. scheduler: 'Scheduler',
  7. analytics: 'Analytics',
  8. settings: 'Settings',
  9. },
  10. analytics: {
  11. title: 'Analytics',
  12. subtitle: 'Publishing activity across all connected platforms',
  13. refresh: 'Refresh',
  14. loading: 'Loading analytics…',
  15. empty: 'No posts yet.',
  16. emptyHint: 'Start publishing to see analytics here.',
  17. totalPosts: 'Total Posts',
  18. last7Days: 'Last 7 Days',
  19. platformsReached: 'Platforms Reached',
  20. successRate: 'Success Rate',
  21. postsPerDay: 'Posts per Day',
  22. postsPerDaySubtitle: 'Last 30 days',
  23. noActivity: 'No activity in the last 30 days.',
  24. platformBreakdown: 'Platform Breakdown',
  25. successfulPosts: 'successful posts',
  26. statusBreakdown: 'Status Breakdown',
  27. published: 'Published',
  28. partial: 'Partial',
  29. failed: 'Failed',
  30. recentPosts: 'Recent Posts',
  31. colContent: 'Content',
  32. colPlatforms: 'Platforms',
  33. colDate: 'Date',
  34. colStatus: 'Status',
  35. statusPublished: 'Published',
  36. statusPartial: 'Partial',
  37. statusFailed: 'Failed',
  38. typeScheduled: 'Scheduled',
  39. typeImmediate: 'Immediate',
  40. noRecentPosts: 'No posts to show.',
  41. loadMore: 'Load more',
  42. noContent: 'Content not available for older posts',
  43. filterBy: 'Filter:',
  44. filterAll: 'All',
  45. crawlMetrics: 'Crawl Metrics',
  46. crawling: 'Crawling…',
  47. crawlDone: 'Crawled {count} posts',
  48. insightsTitle: 'Advanced Insights',
  49. insightsSubtitle: 'Engagement metrics from connected platforms',
  50. insightsEmpty: 'No engagement data yet.',
  51. insightsEmptyHint: 'Click "Crawl Metrics" to fetch engagement data from your connected platforms.',
  52. bestTimeTitle: 'Best Posting Times',
  53. bestTimeSubtitle: 'Average engagement score by time (UTC)',
  54. byHourTitle: 'By Hour of Day',
  55. byDayTitle: 'By Day of Week',
  56. heatmapTitle: 'Engagement Heatmap',
  57. heatmapSubtitle: 'Day × hour (UTC) — darker = higher avg engagement',
  58. topPostsTitle: 'Top Performing Posts',
  59. noTopPosts: 'No top posts yet.',
  60. platformCompTitle: 'Platform Comparison',
  61. colAvgEngagement: 'Avg Engagement',
  62. colAvgLikes: 'Avg Likes',
  63. colAvgComments: 'Avg Comments',
  64. colAvgShares: 'Avg Shares',
  65. colTracked: 'Posts Tracked',
  66. dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
  67. },
  68. media: {
  69. title: 'Media Library',
  70. fileCount: '{count} files',
  71. upload: 'Upload',
  72. uploading: 'Uploading…',
  73. dropZoneTitle: 'Drop files here or click Upload',
  74. dropZoneHint: 'Supports JPEG, PNG, GIF, WebP, MP4, MOV — up to 100 MB each',
  75. useInPost: 'Use in Post',
  76. copyUrl: 'Copy URL',
  77. copied: 'Copied!',
  78. deleteConfirmTitle: 'Delete this file?',
  79. deleteConfirmHint: 'This cannot be undone. Any posts using this file will lose the media.',
  80. cancel: 'Cancel',
  81. delete: 'Delete',
  82. deleting: 'Deleting…',
  83. },
  84. dashboard: {
  85. platforms: 'Platforms',
  86. tags: 'Tags',
  87. allTags: 'All',
  88. searchPlaceholder: 'Search content or user...',
  89. refresh: 'Refresh',
  90. refreshing: 'Refreshing...',
  91. newPost: '+ New Post',
  92. loading: 'Loading feed...',
  93. empty: 'No content to show.',
  94. emptyHint: 'Check platform connections or refresh the feed.',
  95. },
  96. compose: {
  97. title: 'New Post',
  98. destinationsLabel: 'Post to',
  99. placeholder: "What's on your mind?",
  100. cancel: 'Cancel',
  101. schedule: 'Schedule',
  102. send: 'Post Now →',
  103. sending: 'Posting...',
  104. successMessage: 'Post sent successfully.',
  105. scheduleTitle: 'Schedule post (leave empty to post now)',
  106. timezoneLabel: 'Timezone',
  107. timezoneAutoFrom: 'Auto from account',
  108. preview: 'Preview',
  109. addMedia: 'Photo / Video',
  110. uploadFile: 'Upload a photo or video from your device',
  111. uploading: 'Uploading…',
  112. uploadFailed: 'Upload failed. Please try again.',
  113. pasteUrl: 'or paste a URL',
  114. cancelUrl: 'cancel',
  115. mediaUrlPlaceholder: 'Paste image or video URL, then press Enter…',
  116. mediaLoadError: 'Could not load this URL — check it is publicly accessible.',
  117. igImageRequired: 'Instagram requires an image or video.',
  118. noDestinations: 'No platforms configured.',
  119. goToSettings: 'Go to Settings →',
  120. saveDraft: 'Save Draft',
  121. updateDraft: 'Update Draft',
  122. savingDraft: 'Saving…',
  123. draftSaved: 'Draft saved.',
  124. suggestedTimes: 'Suggested times',
  125. suggestionsFromHistory: 'based on your history',
  126. suggestionsFromDefaults: 'industry best practices',
  127. suggestionsLoading: 'Loading suggestions…',
  128. hashtagSuggestions: 'Suggested hashtags',
  129. hashtagsLoading: 'Suggesting…',
  130. hashtagsRefresh: 'Refresh',
  131. aiButton: 'AI',
  132. aiPanelTitle: 'Generate with AI',
  133. aiTopic: 'Topic',
  134. aiTopicPlaceholder: 'What should this post be about?',
  135. aiGoal: 'Goal',
  136. aiGoals: {
  137. promote: 'Promote',
  138. engage: 'Engage',
  139. inform: 'Inform',
  140. entertain: 'Entertain',
  141. announce: 'Announce',
  142. },
  143. aiTone: 'Tone',
  144. aiToneDefault: 'From profile',
  145. aiGenerate: 'Generate',
  146. aiGenerating: 'Generating…',
  147. aiStop: 'Stop',
  148. aiContextFrom: 'Context: {account}',
  149. aiNoContext: 'No profile — set one in Settings',
  150. aiNotConfigured: 'AI not configured — check Settings → AI Integration',
  151. aiError: 'Generation failed',
  152. captionGenerate: '✨ Generate caption',
  153. captionGenerating: 'Generating caption…',
  154. captionError: 'Caption generation failed',
  155. },
  156. scheduler: {
  157. title: 'Scheduler',
  158. newSchedule: '+ New Post',
  159. noJobs: 'No scheduled posts.',
  160. statuses: {
  161. pending: 'Pending',
  162. completed: 'Completed',
  163. failed: 'Failed',
  164. cancelled: 'Cancelled',
  165. },
  166. cancel: 'Cancel',
  167. scheduledTab: 'Scheduled',
  168. calendarTab: 'Calendar',
  169. draftsTab: 'Drafts',
  170. noDrafts: 'No saved drafts.',
  171. editDraft: 'Edit',
  172. deleteDraft: 'Delete',
  173. goToToday: 'Today',
  174. noJobsDay: 'No posts scheduled for this day.',
  175. weekDaysShort: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
  176. months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
  177. },
  178. settings: {
  179. title: 'Platform Connections',
  180. subtitle: 'Edit the {env} file to connect platforms, then restart the relevant service.',
  181. connected: 'Connected',
  182. notConnected: 'Not connected',
  183. refreshStatus: '↻ Refresh Status',
  184. envHint: 'Configuration required',
  185. profiles: {
  186. sectionTitle: 'Account Profiles',
  187. sectionSubtitle: 'Business context used to personalise AI-generated content.',
  188. edit: 'Edit',
  189. close: 'Close',
  190. save: 'Save Profile',
  191. saving: 'Saving…',
  192. saved: 'Saved!',
  193. noAccounts: 'No connected accounts. Connect platforms above first.',
  194. businessName: 'Business Name',
  195. businessNameHint: 'e.g. Acme Coffee Roasters',
  196. description: 'Description',
  197. descriptionHint: 'What does this account represent? What do you do?',
  198. websiteUrl: 'Website URL',
  199. industry: 'Industry',
  200. industryHint: 'e.g. Food & Beverage, SaaS, Retail',
  201. targetAudience: 'Target Audience',
  202. targetAudienceHint: 'e.g. Coffee enthusiasts aged 25–45',
  203. toneOfVoice: 'Tone of Voice',
  204. toneSelect: 'Select a tone…',
  205. keywords: 'Keywords',
  206. keywordsHint: 'Comma-separated, e.g. organic, specialty, single-origin',
  207. hashtags: 'Preferred Hashtags',
  208. hashtagsHint: 'e.g. #specialtycoffee #coffeelovers',
  209. postingGuidelines: 'Posting Guidelines',
  210. postingGuidelinesHint: 'Any specific rules, e.g. always mention opening hours on Fridays',
  211. timezone: 'Timezone',
  212. timezoneHint: 'Used to schedule posts at the correct local time for this account.',
  213. timezoneAuto: 'Use browser timezone',
  214. },
  215. pinterest: {
  216. sectionTitle: 'Pinterest',
  217. sectionSubtitle: 'Connect your Pinterest account to create pins on your boards.',
  218. clientIdLabel: 'Client ID',
  219. clientSecretLabel: 'Client Secret',
  220. clientIdPlaceholder: 'Your Pinterest App Client ID',
  221. clientSecretPlaceholder: 'Your Pinterest App Client Secret',
  222. saveApp: 'Save App Credentials',
  223. saving: 'Saving...',
  224. appConfigured: 'App credentials saved',
  225. connectButton: 'Connect with Pinterest',
  226. connecting: 'Redirecting to Pinterest...',
  227. reconnect: 'Reconnect',
  228. disconnect: 'Disconnect',
  229. disconnectConfirm: 'This will disconnect your Pinterest account and all boards. Continue?',
  230. boardsTitle: 'Your Boards',
  231. noBoards: 'No boards found.',
  232. saveBoards: 'Save Board Selection',
  233. savingBoards: 'Saving...',
  234. boardsSaved: 'Saved!',
  235. getAppHelp: 'Get your credentials from',
  236. devPortal: 'developers.pinterest.com',
  237. errorTitle: 'Pinterest OAuth Error',
  238. },
  239. meta: {
  240. sectionTitle: 'Facebook & Instagram',
  241. sectionSubtitle: 'Both platforms share a single Facebook Developer App. Connect once to manage all your Pages and Instagram accounts.',
  242. appIdLabel: 'App ID',
  243. appSecretLabel: 'App Secret',
  244. appIdPlaceholder: 'Your Facebook App ID',
  245. appSecretPlaceholder: 'Your Facebook App Secret',
  246. saveApp: 'Save App Credentials',
  247. saving: 'Saving...',
  248. appConfigured: 'App credentials saved',
  249. connectButton: 'Connect with Facebook & Instagram',
  250. connecting: 'Redirecting to Facebook...',
  251. reconnect: 'Reconnect',
  252. disconnect: 'Disconnect all',
  253. disconnectConfirm: 'This will disconnect all Facebook Pages and Instagram accounts. Continue?',
  254. discoveryTitle: 'Choose Pages & Accounts to Connect',
  255. discoverySubtitle: 'Select any combination of Facebook Pages and Instagram accounts below.',
  256. pagesHeading: 'Facebook Pages',
  257. igHeading: 'Instagram Accounts',
  258. noPages: 'No Facebook Pages found for this account.',
  259. noIgAccounts: 'No Instagram Business accounts found.',
  260. igLinkedTo: 'Linked to',
  261. confirmSelection: 'Connect Selected',
  262. confirmingSelection: 'Connecting...',
  263. nothingSelected: 'Select at least one Page or Instagram account.',
  264. connectedPages: 'Connected Pages',
  265. connectedAccounts: 'Connected Accounts',
  266. errorTitle: 'OAuth Error',
  267. getAppHelp: 'Get your App ID and Secret from',
  268. devPortal: 'developers.facebook.com',
  269. expiryWarningTitle: 'Instagram token expiring soon',
  270. expiryWarningBody: '{username} expires in {days} day | {username} expires in {days} days',
  271. expiryRefreshToken: 'Refresh Token',
  272. expiryRefreshing: 'Refreshing…',
  273. expiryRefreshDone: 'Token refreshed',
  274. expiryAutoNote: 'Tokens are refreshed automatically when ≤ 7 days remain.',
  275. expiryReconnect: 'Reconnect',
  276. expiryDismiss: 'Dismiss',
  277. },
  278. },
  279. ai: {
  280. sectionTitle: 'AI Integration',
  281. sectionSubtitle: 'Connect a local Ollama instance to generate post content with AI.',
  282. endpointLabel: 'Ollama Endpoint',
  283. endpointPlaceholder: 'http://localhost:11434',
  284. endpointHint: 'Inside Docker the default is http://ollama:11434',
  285. modelLabel: 'Model',
  286. modelPlaceholder: 'Select a model…',
  287. testConnection: 'Test Connection',
  288. testing: 'Testing…',
  289. saveConfig: 'Save',
  290. saving: 'Saving…',
  291. saved: 'Saved!',
  292. noModels: 'No models found — is Ollama running?',
  293. connected: 'Connected',
  294. connectionFailed: 'Connection failed',
  295. modelsAvailable: '{count} model available | {count} models available',
  296. visionModelLabel: 'Vision Model',
  297. visionModelPlaceholder: 'e.g. llava, llama3.2-vision',
  298. visionModelHint: 'Used for image captioning. Pull with: ollama pull llava',
  299. },
  300. feed: {
  301. openOriginal: '↗ Open',
  302. },
  303. platforms: {
  304. twitter: 'Twitter/X',
  305. linkedin: 'LinkedIn',
  306. mastodon: 'Mastodon',
  307. bluesky: 'Bluesky',
  308. instagram: 'Instagram',
  309. facebook: 'Facebook',
  310. reddit: 'Reddit',
  311. youtube: 'YouTube',
  312. pinterest: 'Pinterest',
  313. },
  314. }