* Add optional Pinterest pin title, description, and link. Expose title/description/link across web, API, and MCP; seed description from caption into meta on save, and publish description only from meta. Co-authored-by: Cursor <cursoragent@cursor.com> * Expand Pinterest title/description/link test coverage. Cover web draft persistence and validation bounds, API/MCP update merge and seed, and publisher payload fields on video and carousel pins. Co-authored-by: Cursor <cursoragent@cursor.com> * Simplify Pinterest: description is post content again. Keep optional title and link in meta/settings only. Remove the separate description textarea, seed logic, and meta.description path so Pinterest follows the shared caption pattern. Co-authored-by: Cursor <cursoragent@cursor.com> * Refactor Pinterest meta handling and validation. - Update CreatePost and UpdatePost actions to filter out null values from meta fields. - Introduce a new method in PinterestPublisher to resolve board IDs, ensuring required fields are validated. - Enhance PinterestSettings component to manage title and link inputs, including validation for HTTP URLs. - Update PostPlatformMetaRules to enforce URL validation for Pinterest links. - Add tests for clearing Pinterest title and link, and for rejecting invalid links during scheduling. This refactor improves the handling of Pinterest metadata and enhances user experience by ensuring proper validation and error handling. * Add validation messages and attributes for Pinterest meta fields - Introduced custom validation messages and friendly attribute names for Pinterest link and title fields in PostPlatformMetaRules. - Updated StorePostRequest, UpdatePostRequest, and related tools to utilize these new messages and attributes. - Enhanced tests to assert correct error messages for invalid Pinterest links and title length constraints. This update improves user feedback during post creation and editing, ensuring clarity in validation errors. * Remove click.prevent directive from Pinterest link in PinterestPreview component. This change simplifies the link behavior, allowing default click actions to occur, which may enhance user interaction with the Pinterest link. * Update validation error messages for Pinterest meta fields in tests - Refined the assertions in PostApiPlatformMetaTest to include localized validation messages for Pinterest title and link fields. - Ensured that error messages reflect the updated validation rules, enhancing clarity for users during post creation and editing. --------- Co-authored-by: Cursor <cursoragent@cursor.com>
690 lines
30 KiB
PHP
690 lines
30 KiB
PHP
<?php
|
|
|
|
return [
|
|
'title' => 'Posts',
|
|
'search' => 'Search posts...',
|
|
'all_posts' => 'All Posts',
|
|
'new_post' => 'New Post',
|
|
'no_posts' => 'No posts found',
|
|
'no_search_results' => 'No posts match your search',
|
|
'try_different_search' => 'Try a different keyword or clear the search.',
|
|
'start_creating' => 'Start by creating your first post.',
|
|
'filter_by_label' => 'Filter by label',
|
|
'label_search_placeholder' => 'Search labels...',
|
|
'no_labels' => 'No labels found.',
|
|
'clear_label_filter' => 'Clear label filter',
|
|
'table' => [
|
|
'post' => 'Post',
|
|
'status' => 'Status',
|
|
'content' => 'Content',
|
|
'platforms' => 'Platforms',
|
|
'labels' => 'Labels',
|
|
'scheduled_at' => 'Date',
|
|
'actions' => '',
|
|
],
|
|
'manage_posts' => 'Manage all your posts',
|
|
'delete_confirm' => 'Are you sure you want to delete this post?',
|
|
'by' => 'by',
|
|
|
|
'actions' => [
|
|
'view' => 'View post',
|
|
'delete' => 'Delete',
|
|
'duplicate' => 'Duplicate',
|
|
'copy_id' => 'Copy ID',
|
|
'copied' => 'ID copied to clipboard',
|
|
],
|
|
|
|
'form' => [
|
|
'post_type' => 'Post Type',
|
|
'board' => 'Board',
|
|
'select_board' => 'Select a board',
|
|
'search_board' => 'Search board...',
|
|
'no_board_found' => 'No board found',
|
|
'media' => 'Media',
|
|
'min' => 'Min',
|
|
'uploading' => 'Uploading...',
|
|
'drop_to_upload' => 'Drop to upload',
|
|
'drag_and_drop' => 'Drag & drop or click to upload',
|
|
'photos_and_videos' => 'Photos and videos',
|
|
'photos_only' => 'Photos only',
|
|
'videos_only' => 'Videos only',
|
|
'drag_to_reorder' => 'Drag to reorder',
|
|
'caption' => 'Caption',
|
|
'write_caption' => 'Write your caption...',
|
|
'content_exceeds_platform' => ':platform: too long by :over chars (max :limit).',
|
|
'tiktok' => [
|
|
'settings' => 'TikTok Settings',
|
|
'variant_label' => 'Post type',
|
|
'variant' => [
|
|
'video' => 'Video',
|
|
'photo' => 'Photo carousel',
|
|
],
|
|
'posting_to' => 'Posting to',
|
|
'privacy_level' => 'Who can see this video?',
|
|
'privacy_placeholder' => 'Select who can view this post',
|
|
'privacy' => [
|
|
'public' => 'Public to everyone',
|
|
'friends' => 'Mutual follow friends',
|
|
'followers' => 'Followers',
|
|
'private' => 'Only me',
|
|
'private_disabled_branded' => 'Branded content visibility cannot be set to private.',
|
|
],
|
|
'privacy_hint' => 'The available options depend on your TikTok account settings.',
|
|
'auto_add_music' => 'Auto add music',
|
|
'auto_add_music_hint' => 'This feature is available only for photos. It will add a default music that you can change later.',
|
|
'yes' => 'Yes',
|
|
'no' => 'No',
|
|
'allow_users' => 'Allow users to:',
|
|
'comments' => 'Comment',
|
|
'duet' => 'Duet',
|
|
'stitch' => 'Stitch',
|
|
'is_aigc' => 'Video made with AI',
|
|
'disclose' => 'Disclose video content',
|
|
'disclose_hint' => 'Turn on to disclose that this video promotes goods or services in exchange for something of value. Your video could promote yourself, a third party, or both.',
|
|
'promotional_organic_title' => 'Your photo/video will be labeled as "Promotional content".',
|
|
'promotional_paid_title' => 'Your photo/video will be labeled as "Paid partnership".',
|
|
'promotional_description' => 'This cannot be changed once your video is posted.',
|
|
'compliance_incomplete' => 'You need to indicate if your content promotes yourself, a third party, or both.',
|
|
'privacy_required' => 'TikTok privacy level is required when publishing.',
|
|
'branded_cleared_private' => 'Privacy was cleared because Branded Content cannot be private.',
|
|
'interaction_disabled_by_creator' => 'Turned off in your TikTok account settings',
|
|
'max_duration_exceeded' => 'Video is :duration s long but this account can only post videos up to :max s.',
|
|
'processing_hint' => 'After publishing, it may take a few minutes for the content to process and appear on your TikTok profile.',
|
|
'brand_organic' => 'Your brand',
|
|
'brand_organic_hint' => 'You are promoting yourself or your own brand. This video will be classified as Brand Organic.',
|
|
'brand_content' => 'Branded content',
|
|
'brand_content_hint' => 'You are promoting another brand or a third party. This video will be classified as Branded Content.',
|
|
'compliance' => [
|
|
'agree' => "By posting, you agree to TikTok's",
|
|
'music_usage' => 'Music Usage Confirmation',
|
|
'and' => 'and',
|
|
'branded_policy' => 'Branded Content Policy',
|
|
],
|
|
],
|
|
'instagram' => [
|
|
'settings' => 'Instagram Settings',
|
|
'posting_to' => 'Posting to',
|
|
'variant_label' => 'Post type',
|
|
'variant' => [
|
|
'feed' => 'Feed Post',
|
|
'reel' => 'Reel',
|
|
'story' => 'Story',
|
|
],
|
|
'aspect_label' => 'Aspect ratio',
|
|
'aspect' => [
|
|
'square' => 'Square (1:1)',
|
|
'portrait' => 'Portrait (4:5)',
|
|
'landscape' => 'Landscape (16:9)',
|
|
'original' => 'Original',
|
|
],
|
|
],
|
|
'facebook' => [
|
|
'settings' => 'Facebook Settings',
|
|
'posting_to' => 'Posting to',
|
|
'variant_label' => 'Post type',
|
|
'variant' => [
|
|
'post' => 'Post',
|
|
'reel' => 'Reel',
|
|
'story' => 'Story',
|
|
],
|
|
'aspect_label' => 'Aspect ratio',
|
|
'aspect' => [
|
|
'square' => 'Square (1:1)',
|
|
'portrait' => 'Portrait (4:5)',
|
|
'landscape' => 'Landscape (16:9)',
|
|
'original' => 'Original',
|
|
],
|
|
],
|
|
'linkedin' => [
|
|
'settings' => 'LinkedIn Settings',
|
|
'settings_page' => 'LinkedIn Page Settings',
|
|
'posting_to' => 'Posting to',
|
|
'document_title' => 'Document title',
|
|
'document_title_placeholder' => 'Shown on your PDF document post',
|
|
],
|
|
'pinterest' => [
|
|
'settings' => 'Pinterest Settings',
|
|
'posting_to' => 'Posting to',
|
|
'variant_label' => 'Pin type',
|
|
'variant' => [
|
|
'pin' => 'Pin',
|
|
'video_pin' => 'Video Pin',
|
|
'carousel' => 'Carousel',
|
|
],
|
|
'board' => 'Board',
|
|
'select_board' => 'Select a board',
|
|
'no_boards' => 'No Pinterest boards found. Create one in your Pinterest account first.',
|
|
'boards_truncated' => 'Some boards could not be loaded. If yours is missing, open Pinterest and try again.',
|
|
'search_board' => 'Search boards...',
|
|
'no_board_found' => 'No board matches your search.',
|
|
'board_required' => 'Select a Pinterest board to publish this post.',
|
|
'title' => 'Title',
|
|
'title_placeholder' => 'Optional pin title',
|
|
'link' => 'Destination link',
|
|
'link_placeholder' => 'https://example.com',
|
|
'link_invalid' => 'Enter a valid destination link (http or https).',
|
|
'title_max' => 'Title may not be longer than 100 characters.',
|
|
'link_max' => 'Destination link may not be longer than 2048 characters.',
|
|
],
|
|
'discord' => [
|
|
'settings' => 'Discord Settings',
|
|
'posting_to' => 'Posting to',
|
|
'channel' => 'Channel',
|
|
'select_channel' => 'Select a channel',
|
|
'loading_channels' => 'Loading channels…',
|
|
'search_channel' => 'Search channels…',
|
|
'no_channels' => 'No channels found.',
|
|
'channel_required' => 'Select a Discord channel to publish this post.',
|
|
'mentions' => 'Mentions',
|
|
'search_mention' => 'Mention a role or member…',
|
|
'embeds' => 'Embeds',
|
|
'embed' => 'Embed',
|
|
'add_embed' => 'Add embed',
|
|
'embed_title' => 'Embed title',
|
|
'embed_description' => 'Embed description',
|
|
'embed_url' => 'Embed URL',
|
|
'embed_image' => 'Image URL',
|
|
'embed_color' => 'Color',
|
|
],
|
|
'warnings' => [
|
|
'no_variant' => 'Pick a post type to continue.',
|
|
'requires_media' => 'This post type requires at least one image or video.',
|
|
'max_files_exceeded' => 'This post type accepts up to :max media files (you have :current).',
|
|
'min_files_required' => 'This post type requires at least :min media files (you have :current).',
|
|
'no_video_allowed' => 'This post type does not accept videos.',
|
|
'no_image_allowed' => 'This post type accepts only videos.',
|
|
'no_document_allowed' => 'This post type does not accept PDF documents.',
|
|
'no_mixed_media' => "Images and a video can't be combined in the same post.",
|
|
'document_not_alone' => 'A PDF must be posted on its own, without other images or videos.',
|
|
'gif_not_allowed' => 'This platform does not accept GIF. Remove the GIF or choose a different network.',
|
|
'image_too_large' => 'Image exceeds the :max limit for this post type (yours is :current).',
|
|
'video_too_large' => 'Video exceeds the :max limit for this post type (yours is :current).',
|
|
'document_too_large' => 'PDF exceeds the :max limit for this post type (yours is :current).',
|
|
'video_too_long' => 'Video is :current long, but this post type allows up to :max.',
|
|
'aspect_ratio_too_narrow' => 'Aspect ratio :current is too tall for this post type (min :min).',
|
|
'aspect_ratio_too_wide' => 'Aspect ratio :current is too wide for this post type (max :max).',
|
|
],
|
|
],
|
|
|
|
'status' => [
|
|
'pending' => 'Pending',
|
|
'draft' => 'Draft',
|
|
'scheduled' => 'Scheduled',
|
|
'publishing' => 'Publishing',
|
|
'retrying' => 'Retrying',
|
|
'published' => 'Published',
|
|
'partially_published' => 'Partially Published',
|
|
'failed' => 'Failed',
|
|
],
|
|
|
|
'descriptions' => [
|
|
'draft' => 'Posts waiting to be scheduled',
|
|
'scheduled' => 'Posts scheduled for publishing',
|
|
'published' => 'Posts already published',
|
|
],
|
|
|
|
'ai' => [
|
|
'generate' => [
|
|
'button_tooltip' => 'Generate with AI',
|
|
'title' => 'Generate post with AI',
|
|
'description' => 'Describe what the post should be about. The AI will use your brand context to write it.',
|
|
'prompt_label' => 'What is this post about?',
|
|
'prompt_placeholder' => 'e.g. Announce our new image-generation feature for carousels',
|
|
'preview_label' => 'Preview',
|
|
'start' => 'Generate',
|
|
'apply' => 'Use this content',
|
|
'retry' => 'Try again',
|
|
'cancel' => 'Cancel',
|
|
],
|
|
'review' => [
|
|
'button_tooltip' => 'Review with AI',
|
|
'title' => 'Review post with AI',
|
|
'description' => 'AI scans for grammar, spelling, and clarity. Apply the suggestions you agree with.',
|
|
'loading' => 'Reviewing your text...',
|
|
'no_issues' => 'No issues found. Looks good.',
|
|
'original' => 'Original',
|
|
'suggestion' => 'Suggestion',
|
|
'apply' => 'Apply',
|
|
'apply_all' => 'Apply all',
|
|
'applied' => 'Applied',
|
|
'cancel' => 'Cancel',
|
|
],
|
|
'image_regenerate' => [
|
|
'button' => 'Adjust',
|
|
'title' => 'Adjust AI image',
|
|
'description' => 'Describe the correction. The new image replaces the current one and keeps its position in the carousel.',
|
|
'instruction_label' => 'Instruction',
|
|
'instruction_placeholder' => 'e.g. Fix the typo in the headline and make the background lighter.',
|
|
'processing' => 'Regenerating image... this can take a few seconds.',
|
|
'submit' => 'Regenerate image',
|
|
'cancel' => 'Cancel',
|
|
'success' => 'Image updated. The new version replaced the previous one in your post.',
|
|
'fallback_title' => 'Improve this image copy',
|
|
'errors' => [
|
|
'required' => 'Instruction is required.',
|
|
'start_failed' => 'Failed to start regeneration.',
|
|
'unavailable' => 'Unable to regenerate this image right now.',
|
|
'timeout' => 'Regeneration is taking longer than expected. Try again in a moment.',
|
|
'media_not_found' => 'Media item not found.',
|
|
'not_ai_media' => 'Only AI-generated media can be regenerated.',
|
|
],
|
|
],
|
|
'templates' => [
|
|
'image_card' => [
|
|
'name' => 'Image post',
|
|
'description' => 'AI image with a headline and caption.',
|
|
],
|
|
'carousel' => [
|
|
'name' => 'Carousel',
|
|
'description' => 'Multi-slide carousel with a caption.',
|
|
],
|
|
'tweet_card' => [
|
|
'name' => 'Tweet card',
|
|
'description' => 'Your post styled as an X/Twitter post.',
|
|
],
|
|
'tweet_card_image' => [
|
|
'name' => 'Tweet card with photo',
|
|
'description' => 'Your post as an X/Twitter card over a blurred photo.',
|
|
],
|
|
],
|
|
],
|
|
|
|
'show' => [
|
|
'title' => 'Post Details',
|
|
'edit' => 'Edit',
|
|
'back' => 'Back',
|
|
'no_content' => 'No caption',
|
|
'platforms' => 'Platforms',
|
|
'no_platforms' => 'No platforms selected.',
|
|
'view_on_platform' => 'View on platform',
|
|
'published_on' => 'Published on :date',
|
|
'scheduled_for' => 'Scheduled for :date',
|
|
'draft' => 'Draft',
|
|
'status_pending' => 'Pending',
|
|
'metrics' => 'Metrics',
|
|
'metrics_loading' => 'Loading metrics…',
|
|
'metrics_unavailable' => 'Metrics unavailable for this platform yet.',
|
|
'metrics_empty' => 'No metrics returned.',
|
|
],
|
|
|
|
'edit' => [
|
|
'title' => 'Edit Post',
|
|
'view_title' => 'View Post',
|
|
'labels' => 'Labels',
|
|
'no_labels' => 'No labels created yet',
|
|
'schedule' => 'Schedule',
|
|
'pick_time' => 'Pick time',
|
|
'pick_time_past' => 'Pick a future date and time.',
|
|
'post_now' => 'Post now',
|
|
'time' => 'Time',
|
|
'cancel' => 'Cancel',
|
|
'delete' => 'Delete',
|
|
'schedule_for' => 'Schedule for',
|
|
'schedule_date' => 'Schedule date',
|
|
'unschedule' => 'Unschedule',
|
|
'saving' => 'Saving...',
|
|
'saved' => 'Saved',
|
|
'draft' => 'Draft',
|
|
'media' => 'Media',
|
|
'add_media' => 'Add media',
|
|
'caption' => 'Caption',
|
|
'caption_placeholder' => 'Write your caption...',
|
|
'compose_title' => 'Create a post',
|
|
'compose_subtitle' => 'Compose your message and add media',
|
|
'preview_empty' => [
|
|
'title' => 'No platform selected',
|
|
'description' => 'Select a platform to publish to see the preview.',
|
|
],
|
|
'drop_zone_title' => 'Add media',
|
|
'drop_zone_subtitle' => 'Drag & drop files or click to browse',
|
|
'add' => 'Add',
|
|
'publish_to' => 'Publish to',
|
|
'organize' => 'Organize',
|
|
'signatures' => 'Signatures',
|
|
'view_on_platform' => 'View on platform',
|
|
'platform_status' => 'Platform status',
|
|
'compliance_incomplete' => 'Some platform settings are incomplete or incompatible with the attached media.',
|
|
'compliance' => [
|
|
'requires_content_or_media' => 'Add text or media to publish.',
|
|
'requires_media' => 'Add an image or video to publish here.',
|
|
'too_many_files' => 'Only :max file(s) allowed for this format.',
|
|
'too_few_files' => 'Add at least :min files for this format.',
|
|
'no_videos' => 'Only images are allowed for this format.',
|
|
'no_images' => 'Only videos are allowed for this format.',
|
|
'no_mixed_media' => "Images and videos can't be combined in the same post.",
|
|
'no_gifs' => 'GIFs are not supported here.',
|
|
'no_documents' => 'PDF documents are not supported by this format.',
|
|
'document_not_alone' => 'A PDF must be posted on its own, without other images or videos.',
|
|
'video_too_large' => 'Video exceeds the size limit for this platform.',
|
|
'video_too_long' => 'Video must be under :seconds seconds for this format.',
|
|
'image_too_large' => 'Image exceeds the size limit for this platform.',
|
|
'document_too_large' => 'PDF exceeds the size limit for this platform.',
|
|
'aspect_ratio_invalid' => 'Aspect ratio is not supported by this format.',
|
|
'no_content_type' => 'Pick a content type for this platform.',
|
|
'requires_text' => 'Add text — this format needs a title.',
|
|
],
|
|
'publishing' => 'Publishing...',
|
|
'publishing_overlay_title' => 'Your post is being published',
|
|
'publishing_overlay_subtitle' => 'This can take a few moments. You can safely leave this page.',
|
|
'scheduled_overlay_title' => 'This post is scheduled',
|
|
'scheduled_overlay_subtitle' => 'Scheduled for :date. Unschedule it first to make changes.',
|
|
'unschedule_cta' => 'Unschedule to edit',
|
|
|
|
'tabs' => [
|
|
'compose' => 'Compose',
|
|
'preview' => 'Preview',
|
|
'channels' => 'Channels',
|
|
'comments' => 'Comments',
|
|
'comments_empty' => 'No comments yet.',
|
|
],
|
|
|
|
'media_picker' => [
|
|
'title' => 'Pick from gallery',
|
|
'search' => 'Search media...',
|
|
'empty' => 'No media in your gallery yet',
|
|
'cancel' => 'Cancel',
|
|
'add' => 'Add',
|
|
'add_count' => 'Add :count',
|
|
],
|
|
|
|
'alt_text' => [
|
|
'label' => 'Alt text',
|
|
'edit' => 'Edit alt text',
|
|
'placeholder' => 'Describe this image for people using screen readers',
|
|
'hint' => 'Published to platforms that support image descriptions.',
|
|
'save' => 'Save',
|
|
],
|
|
|
|
'emoji_picker' => [
|
|
'search' => 'Search emoji',
|
|
'empty' => 'No emojis found',
|
|
'recent' => 'Frequently used',
|
|
'smileys' => 'Smileys & emotion',
|
|
'people' => 'People & body',
|
|
'nature' => 'Animals & nature',
|
|
'food' => 'Food & drink',
|
|
'activities' => 'Activities',
|
|
'travel' => 'Travel & places',
|
|
'objects' => 'Objects',
|
|
'symbols' => 'Symbols',
|
|
'flags' => 'Flags',
|
|
],
|
|
|
|
'status' => [
|
|
'pending' => 'Pending',
|
|
'scheduled' => 'Scheduled',
|
|
'published' => 'Published',
|
|
'publishing' => 'Publishing...',
|
|
'retrying' => 'Retrying...',
|
|
'failed' => 'Failed',
|
|
],
|
|
|
|
'delete_modal' => [
|
|
'title' => 'Delete Post',
|
|
'description' => 'Are you sure you want to delete this post? This action cannot be undone.',
|
|
'action' => 'Delete',
|
|
'cancel' => 'Cancel',
|
|
],
|
|
|
|
'sync_enable' => [
|
|
'title' => 'Enable sync?',
|
|
'description' => 'All platforms will share the same content. Any custom edits made to individual platforms will be replaced with the current content.',
|
|
'cancel' => 'Cancel',
|
|
'action' => 'Enable sync',
|
|
],
|
|
|
|
'sync_disable' => [
|
|
'title' => 'Disable sync?',
|
|
'description' => 'Each platform will keep its current content, but future edits will only apply to the platform you\'re editing.',
|
|
'customize_note' => 'You\'ll be able to customize the content for each platform individually.',
|
|
'cancel' => 'Cancel',
|
|
'action' => 'Disable sync',
|
|
],
|
|
|
|
'platforms_dialog' => [
|
|
'title' => 'Select Platforms',
|
|
'description' => 'Choose which platforms to publish this post to.',
|
|
],
|
|
|
|
'signatures_modal' => [
|
|
'search' => 'Search signatures...',
|
|
'no_results' => 'No signatures found.',
|
|
],
|
|
|
|
'validation' => [
|
|
'select_board' => 'Select a board',
|
|
'images_not_supported' => 'Images not supported',
|
|
'videos_not_supported' => 'Videos not supported',
|
|
'max_images' => 'Max :count images',
|
|
'requires_media' => 'Requires media',
|
|
'requires_content' => 'Text content is required',
|
|
'exceeded' => ':count exceeded',
|
|
'does_not_support_images' => ':platform does not support images',
|
|
'supports_up_to_images' => ':platform supports up to :count images',
|
|
'does_not_support_videos' => ':platform does not support videos',
|
|
],
|
|
],
|
|
|
|
'content_types' => [
|
|
'instagram_feed' => [
|
|
'label' => 'Feed Post',
|
|
'description' => 'Appears in your feed and profile',
|
|
],
|
|
'instagram_reel' => [
|
|
'label' => 'Reel',
|
|
'description' => 'Short video up to 15 minutes',
|
|
],
|
|
'instagram_story' => [
|
|
'label' => 'Story',
|
|
'description' => 'Disappears after 24 hours',
|
|
],
|
|
'linkedin_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Standard post — single image, multi-image, video, or PDF',
|
|
],
|
|
'linkedin_page_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Standard post — single image, multi-image, video, or PDF',
|
|
],
|
|
'facebook_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Standard post on your page',
|
|
],
|
|
'facebook_reel' => [
|
|
'label' => 'Reel',
|
|
'description' => 'Short video up to 90 seconds',
|
|
],
|
|
'facebook_story' => [
|
|
'label' => 'Story',
|
|
'description' => 'Vertical video story, up to 60 seconds',
|
|
],
|
|
'tiktok_video' => [
|
|
'label' => 'Video',
|
|
'description' => 'Short-form video content',
|
|
],
|
|
'tiktok_photo' => [
|
|
'label' => 'Photo carousel',
|
|
'description' => 'Up to 35 photos as a swipeable carousel',
|
|
],
|
|
'youtube_short' => [
|
|
'label' => 'Short',
|
|
'description' => 'Vertical video up to 3 minutes',
|
|
],
|
|
'x_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Tweet with text and media',
|
|
],
|
|
'threads_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Text post with optional media',
|
|
],
|
|
'pinterest_pin' => [
|
|
'label' => 'Pin',
|
|
'description' => 'Standard image pin',
|
|
],
|
|
'pinterest_video_pin' => [
|
|
'label' => 'Video Pin',
|
|
'description' => 'Video pin (4s - 15min)',
|
|
],
|
|
'pinterest_carousel' => [
|
|
'label' => 'Carousel',
|
|
'description' => 'Multi-image carousel (2-5 images)',
|
|
],
|
|
'bluesky_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Text post with optional images',
|
|
],
|
|
'mastodon_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Text post with optional media',
|
|
],
|
|
'telegram_post' => [
|
|
'label' => 'Post',
|
|
'description' => 'Text post with optional media',
|
|
],
|
|
'discord_message' => [
|
|
'label' => 'Message',
|
|
'description' => 'Message to a Discord channel with optional media & embeds',
|
|
],
|
|
],
|
|
|
|
'platforms' => [
|
|
'linkedin' => 'LinkedIn',
|
|
'linkedin-page' => 'LinkedIn Page',
|
|
'x' => 'X',
|
|
'tiktok' => 'TikTok',
|
|
'youtube' => 'YouTube Shorts',
|
|
'facebook' => 'Facebook Page',
|
|
'instagram' => 'Instagram',
|
|
'threads' => 'Threads',
|
|
'pinterest' => 'Pinterest',
|
|
'bluesky' => 'Bluesky',
|
|
'mastodon' => 'Mastodon',
|
|
],
|
|
|
|
'flash' => [
|
|
'scheduled' => 'Post scheduled successfully!',
|
|
'deleted' => 'Post deleted successfully!',
|
|
'duplicated' => 'Post duplicated as a draft.',
|
|
'cannot_edit_finalized' => 'This post has already been processed and cannot be re-published. Duplicate it to try again.',
|
|
'cannot_delete_published' => 'Published posts cannot be deleted.',
|
|
'connect_first' => 'Connect at least one social network before creating a post.',
|
|
],
|
|
|
|
'errors' => [
|
|
'account_disconnected' => 'Social account is disconnected',
|
|
'account_inactive' => 'Social account is deactivated',
|
|
'account_token_expired' => 'Social account session expired — please reconnect',
|
|
],
|
|
|
|
'delete' => [
|
|
'title' => 'Delete post?',
|
|
'description' => 'This action can\'t be undone. The post and all its media will be permanently removed.',
|
|
'confirm' => 'Yes, delete',
|
|
'cancel' => 'Cancel',
|
|
],
|
|
|
|
'create' => [
|
|
'title' => 'Create a new post',
|
|
'description' => 'Choose how you want to start.',
|
|
'scratch_title' => 'Start from scratch',
|
|
'scratch_description' => 'Open a blank post and write everything yourself.',
|
|
'ai_title' => 'Generate with AI',
|
|
'ai_description' => 'Describe what you want and AI generates the content for you.',
|
|
'ai_configure_description' => 'Pick a format and describe the post you want to create.',
|
|
'ai_pick_template_description' => 'Choose a style for your AI-generated post.',
|
|
'template_title' => 'Use a template',
|
|
'template_description' => 'Pick from our curated templates and customize.',
|
|
'coming_soon' => 'Coming soon',
|
|
|
|
'preview' => [
|
|
'image_title' => 'Image title',
|
|
'image_body' => 'Image body',
|
|
],
|
|
|
|
'steps' => [
|
|
'template_picker_title' => 'Choose a style',
|
|
'format_title' => 'Choose a format',
|
|
'format_description' => 'Select the type of post you want to create.',
|
|
'account_title' => 'Choose an account',
|
|
'account_description' => 'Select the social account to publish to.',
|
|
'media_title' => 'Media options',
|
|
'media_carousel' => 'How many slides?',
|
|
'media_optional' => 'Include images?',
|
|
'media_optional_label' => 'How many images?',
|
|
'media_none' => 'None',
|
|
'media_count_label' => 'Number of images',
|
|
'brand_colors_label' => 'Brand colors',
|
|
'brand_colors_description' => 'Apply your workspace brand palette to the generated images. Turn it off to let the AI pick colors that fit the content.',
|
|
'prompt_title' => 'Describe your post',
|
|
'prompt_label' => 'What is this post about?',
|
|
'prompt_placeholder' => 'e.g. Announce our new carousel feature for Instagram',
|
|
'preview_error' => 'Something went wrong. Please try again.',
|
|
'loading_page_title' => 'Generating your post',
|
|
'loading_eta' => 'Estimated time: about :minutes.',
|
|
'loading_eta_minute_one' => '1 minute',
|
|
'loading_eta_minute_other' => ':count minutes',
|
|
'loading_leave_title' => 'You can keep working.',
|
|
'loading_leave_body' => 'We will notify you when the post is ready.',
|
|
'loading_leave_cta' => 'Go to calendar',
|
|
'loading_create_another_cta' => 'Create another post',
|
|
'loading_tip_credits' => 'Each AI image uses about 15 credits.',
|
|
'loading_tip_edit' => 'You will be able to edit everything once the post is ready.',
|
|
'loading_tip_draft' => 'Generated posts land in your drafts.',
|
|
'loading_tip_brand' => 'Tweak your brand settings to influence future posts.',
|
|
'loading_tip_carousel' => 'Carousels deliver one slide per uploaded image.',
|
|
'loading_tip_quality' => 'Image quality is set to balance speed and cost.',
|
|
'create' => 'Create post',
|
|
'back' => 'Back',
|
|
'next' => 'Continue',
|
|
'cancel' => 'Cancel',
|
|
'discard' => 'Discard',
|
|
'retry' => 'Try again',
|
|
'no_platforms' => 'No connected accounts',
|
|
'connect_first' => 'Connect at least one social account to use AI generation.',
|
|
'no_account_for_template' => 'Connect a compatible account to use this template.',
|
|
|
|
'format' => [
|
|
'instagram_feed' => 'Instagram Feed Post',
|
|
'instagram_carousel' => 'Instagram Carousel',
|
|
'linkedin_post' => 'LinkedIn Post',
|
|
'linkedin_page_post' => 'LinkedIn Page Post',
|
|
'x_post' => 'X Post',
|
|
'bluesky_post' => 'Bluesky Post',
|
|
'threads_post' => 'Threads Post',
|
|
'mastodon_post' => 'Mastodon Post',
|
|
'telegram_post' => 'Telegram Post',
|
|
'discord_message' => 'Discord Message',
|
|
'facebook_post' => 'Facebook Post',
|
|
'pinterest_pin' => 'Pinterest Pin',
|
|
'instagram_story' => 'Instagram Story',
|
|
'facebook_story' => 'Facebook Story',
|
|
],
|
|
],
|
|
],
|
|
|
|
'templates' => [
|
|
'browser_title' => 'Choose a template',
|
|
'browser_description' => 'Start from a curated template and adapt it.',
|
|
'search_placeholder' => 'Search templates…',
|
|
'no_search_results' => 'No templates match your search',
|
|
'try_different_search' => 'Try a different keyword or clear the search.',
|
|
'slides_count' => '{count} slide|{count} slides',
|
|
'all_platforms' => 'All platforms',
|
|
'platform_search_placeholder' => 'Search platform…',
|
|
'no_platform_match' => 'No platform matches.',
|
|
'use_this' => 'Use this template',
|
|
'no_templates' => 'No templates available.',
|
|
'applying' => 'Applying template…',
|
|
'category' => [
|
|
'product_launch' => 'Product launch',
|
|
'promotion' => 'Promotion',
|
|
'educational' => 'Educational',
|
|
'behind_the_scenes' => 'Behind the scenes',
|
|
'testimonial' => 'Testimonial',
|
|
'industry_tip' => 'Industry tip',
|
|
'event' => 'Event',
|
|
'engagement' => 'Engagement',
|
|
],
|
|
],
|
|
];
|