Core changes:
- Replace Unsplash slide pipeline with gpt-image-2 via Laravel AI SDK.
New AiImageClient builds prompts from a Blade template seeded by the
workspace's ImageStyle enum, content language, brand color (mapped to a
human-readable name via HexColorName helper) and brand description.
- Drop Template B from TemplateImageGenerator: every slide now renders as
Template A (full-bleed photo + bottom gradient + white/grey overlay).
Removes renderTemplateB, roundCorners, blendHex, ensureContrast and the
closing-slide pipeline.
- StreamPostCreation creates the Post directly and dispatches
PostCreationReady with post_id; the wizard kills its preview step and
redirects straight to the post editor on completion. Finalize endpoint
removed.
- New Workspace.image_style enum field with an 8-option visual picker
shared by /workspaces/create and /settings/workspace/brand via a single
BrandForm component (autofill is a prop). 8 sample webp thumbs ship
under public/images/branding/image-styles/.
- Media items gain optional source ('ai'|'unsplash'|'giphy') and
source_meta (recipe needed to regenerate AI images later); the gallery
picker tags Unsplash/Giphy attachments.
- Brand-color autofill: new CssColorFrequencyExtractor parses every
hex/rgb/hsl value in the homepage CSS, clusters perceptually similar
shades in CIE LAB (Delta E 76 < 12), filters neutrals and returns the
most frequent cluster. Solves Tailwind/utility-CSS sites where no
semantic --primary variable is exposed.
- Credits: gpt-image-2 metered at 15 credits/image (low quality default).
- Layout: AuthSplitLayout right column is sticky/h-svh so the form
textarea growth no longer stretches the marketing slider.
- i18n cleanup: localized labels follow the no-em-dash convention.
319 lines
14 KiB
PHP
319 lines
14 KiB
PHP
<?php
|
|
|
|
return [
|
|
'title' => 'Configurações',
|
|
'description' => 'Gerencie seu perfil e configurações da conta',
|
|
|
|
'hub' => [
|
|
'title' => 'Configurações',
|
|
'description' => 'Escolha o que você quer gerenciar.',
|
|
'profile' => [
|
|
'title' => 'Perfil',
|
|
'description' => 'Atualize suas informações pessoais, senha e preferências de notificações.',
|
|
],
|
|
'workspace' => [
|
|
'title' => 'Workspace',
|
|
'description' => 'Configure seu workspace, marca, membros e chaves de API.',
|
|
],
|
|
'account' => [
|
|
'title' => 'Conta',
|
|
'description' => 'Gerencie informações da conta, uso e faturamento.',
|
|
],
|
|
],
|
|
|
|
'nav' => [
|
|
'profile' => 'Perfil',
|
|
'authentication' => 'Autenticação',
|
|
'workspace' => 'Workspace',
|
|
'members' => 'Membros',
|
|
'notifications' => 'Notificações',
|
|
'billing' => 'Faturamento',
|
|
],
|
|
|
|
'notifications' => [
|
|
'title' => 'Preferências de notificações',
|
|
'heading' => 'Notificações por e-mail',
|
|
'description' => 'Escolha quais notificações por e-mail deseja receber',
|
|
'post_published' => 'Post publicado',
|
|
'post_published_description' => 'Receber um e-mail quando seu post for publicado com sucesso',
|
|
'post_failed' => 'Post falhou',
|
|
'post_failed_description' => 'Receber um e-mail quando seu post falhar ao publicar',
|
|
'account_disconnected' => 'Conta desconectada',
|
|
'account_disconnected_description' => 'Receber um e-mail quando uma conta social for desconectada',
|
|
'save' => 'Salvar preferências',
|
|
],
|
|
|
|
'profile' => [
|
|
'title' => 'Configurações do perfil',
|
|
'photo_heading' => 'Foto do perfil',
|
|
'photo_description' => 'Envie uma foto de perfil',
|
|
'heading' => 'Informações do perfil',
|
|
'description' => 'Atualize seu nome e endereço de e-mail',
|
|
'avatar' => 'Avatar',
|
|
'name' => 'Nome',
|
|
'name_placeholder' => 'Nome completo',
|
|
'email' => 'Endereço de e-mail',
|
|
'email_placeholder' => 'Endereço de e-mail',
|
|
'email_unverified' => 'Seu endereço de e-mail não foi verificado.',
|
|
'resend_verification' => 'Clique aqui para reenviar o e-mail de verificação.',
|
|
'verification_sent' => 'Um novo link de verificação foi enviado para seu endereço de e-mail.',
|
|
'save' => 'Salvar',
|
|
],
|
|
|
|
'authentication' => [
|
|
'title' => 'Autenticação',
|
|
'page_title' => 'Configurações de autenticação',
|
|
'sessions' => [
|
|
'title' => 'Sessões ativas',
|
|
'description' => 'Se você notar algo suspeito, encerre as sessões em outros dispositivos.',
|
|
'unknown_browser' => 'Navegador desconhecido',
|
|
'unknown_ip' => 'IP desconhecido',
|
|
'on' => 'em',
|
|
'active_now' => 'Ativa agora',
|
|
'log_out_others' => 'Encerrar outras sessões',
|
|
'modal_title' => 'Encerrar outras sessões',
|
|
'modal_description_password' => 'Digite sua senha atual para confirmar o encerramento das outras sessões.',
|
|
'modal_description_email' => 'Digite seu e-mail para confirmar o encerramento das outras sessões.',
|
|
'password_placeholder' => 'Senha atual',
|
|
'email_placeholder' => 'Seu e-mail',
|
|
'cancel' => 'Cancelar',
|
|
'submit' => 'Encerrar outras sessões',
|
|
'email_mismatch' => 'O e-mail não corresponde à sua conta.',
|
|
'flash_logged_out' => 'Outras sessões foram encerradas.',
|
|
],
|
|
'password' => [
|
|
'update_title' => 'Atualizar senha',
|
|
'set_title' => 'Definir uma senha',
|
|
'update_description' => 'Use uma senha longa e aleatória para manter sua conta segura.',
|
|
'set_description' => 'Adicione uma senha para entrar sem precisar de um provedor conectado.',
|
|
'current_password' => 'Senha atual',
|
|
'new_password' => 'Nova senha',
|
|
'confirm_password' => 'Confirmar senha',
|
|
'save' => 'Salvar senha',
|
|
'set' => 'Definir senha',
|
|
],
|
|
'providers' => [
|
|
'title' => 'Contas conectadas',
|
|
'description' => 'Faça login mais rápido usando esses provedores conectados.',
|
|
'connected' => 'Conectada',
|
|
'not_connected' => 'Não conectada',
|
|
'connect' => 'Conectar',
|
|
'disconnect' => 'Desconectar',
|
|
'flash_disconnected' => ':provider desconectada com sucesso.',
|
|
'flash_connected' => ':provider conectada com sucesso.',
|
|
'flash_already_linked' => 'Essa conta do :provider já está vinculada a outro usuário.',
|
|
'flash_cannot_disconnect' => 'Você não pode desconectar seu único método de login. Defina uma senha ou conecte outro provedor primeiro.',
|
|
],
|
|
],
|
|
|
|
'delete_account' => [
|
|
'heading' => 'Excluir conta',
|
|
'description' => 'Exclua sua conta e todos os seus recursos',
|
|
'warning' => 'Atenção',
|
|
'warning_message' => 'Por favor, prossiga com cuidado, isso não pode ser desfeito.',
|
|
'button' => 'Excluir conta',
|
|
'modal_title' => 'Tem certeza que deseja excluir sua conta?',
|
|
'modal_description_password' => 'Uma vez excluída, todos os seus recursos e dados também serão permanentemente removidos. Digite sua senha para confirmar.',
|
|
'modal_description_email' => 'Uma vez excluída, todos os seus recursos e dados também serão permanentemente removidos. Digite o seu e-mail :email para confirmar.',
|
|
'password' => 'Senha',
|
|
'password_placeholder' => 'Senha',
|
|
'email_placeholder' => 'Seu e-mail',
|
|
'email_mismatch' => 'O e-mail não corresponde à sua conta.',
|
|
'cancel' => 'Cancelar',
|
|
'confirm' => 'Excluir conta',
|
|
],
|
|
|
|
'workspace' => [
|
|
'tabs' => [
|
|
'workspace' => 'Workspace',
|
|
'brand' => 'Marca',
|
|
'users' => 'Membros',
|
|
'api_keys' => 'API Keys',
|
|
],
|
|
'title' => 'Configurações do workspace',
|
|
'logo_heading' => 'Logo do workspace',
|
|
'logo_description' => 'Envie um logo para o workspace',
|
|
'heading' => 'Nome do workspace',
|
|
'description' => 'Atualize o nome do workspace',
|
|
'members_heading' => 'Membros',
|
|
'members_description' => 'Gerencie membros e convites do workspace',
|
|
'name' => 'Nome',
|
|
'name_placeholder' => 'Meu Workspace',
|
|
'save' => 'Salvar',
|
|
],
|
|
|
|
'brand' => [
|
|
'title' => 'Marca',
|
|
'description' => 'Configure a identidade da sua marca para os conteúdos gerados por AI.',
|
|
'name' => 'Nome do workspace',
|
|
'name_placeholder' => 'Minha marca',
|
|
'website' => 'Site',
|
|
'website_placeholder' => 'https://suamarca.com',
|
|
'brand_description' => 'Descrição',
|
|
'brand_description_placeholder' => 'Conte sobre sua marca, o que você faz e quem é seu público...',
|
|
'tone' => 'Tom de voz',
|
|
'tone_professional' => 'Profissional',
|
|
'tone_casual' => 'Casual',
|
|
'tone_friendly' => 'Amigável',
|
|
'tone_bold' => 'Ousado',
|
|
'tone_inspirational' => 'Inspirador',
|
|
'tone_humorous' => 'Bem-humorado',
|
|
'tone_educational' => 'Educacional',
|
|
'voice_notes' => 'Notas de voz',
|
|
'voice_notes_placeholder' => 'Diretrizes adicionais de escrita, palavras a evitar, preferências de estilo...',
|
|
'brand_color' => 'Cor da marca',
|
|
'background_color' => 'Cor de fundo',
|
|
'text_color' => 'Cor do texto',
|
|
'font' => 'Fonte',
|
|
'image_style' => 'Estilo das imagens',
|
|
'image_style_description' => 'Estilo visual aplicado ao gerar imagens de slides e capas para posts com AI.',
|
|
'image_style_cinematic' => 'Cinematográfico',
|
|
'image_style_illustration' => 'Ilustração',
|
|
'image_style_isometric_3d' => 'Isométrico',
|
|
'image_style_cartoon' => 'Cartoon',
|
|
'image_style_typographic' => 'Tipográfico',
|
|
'image_style_infographic' => 'Infográfico',
|
|
'image_style_minimalist' => 'Minimalista',
|
|
'image_style_mockup' => 'Mockup',
|
|
'content_language' => 'Idioma do conteúdo',
|
|
'content_language_description' => 'Idioma usado nas legendas, hashtags e em qualquer texto dentro de imagens ou vídeos gerados por AI.',
|
|
],
|
|
|
|
'members' => [
|
|
'title' => 'Membros',
|
|
'heading' => 'Membros da equipe',
|
|
'description' => 'Gerencie membros e convites deste workspace',
|
|
|
|
'cancel' => 'Cancelar',
|
|
'remove' => 'Remover',
|
|
'make_admin' => 'Tornar administrador',
|
|
'make_member' => 'Tornar membro',
|
|
|
|
'invite' => [
|
|
'title' => 'Convidar Membro',
|
|
'description' => 'Envie um convite por e-mail para adicionar colaboradores',
|
|
'email' => 'E-mail',
|
|
'email_placeholder' => 'colaborador@email.com',
|
|
'role' => 'Função',
|
|
'role_placeholder' => 'Selecione uma função',
|
|
'submit' => 'Enviar Convite',
|
|
],
|
|
|
|
'pending' => [
|
|
'title' => 'Convites Pendentes',
|
|
'description' => 'Convites aguardando aceitação',
|
|
'empty' => 'Nenhum convite pendente',
|
|
],
|
|
|
|
'list' => [
|
|
'title' => 'Membros',
|
|
'description' => 'Pessoas com acesso a este workspace',
|
|
'empty' => 'Nenhum membro além do proprietário',
|
|
],
|
|
|
|
'remove_modal' => [
|
|
'title' => 'Remover membro',
|
|
'description' => 'Tem certeza que deseja remover este membro do workspace? Ele perderá acesso a todos os recursos do workspace.',
|
|
'action' => 'Remover membro',
|
|
],
|
|
|
|
'cancel_invite_modal' => [
|
|
'title' => 'Cancelar convite',
|
|
'description' => 'Tem certeza que deseja cancelar este convite?',
|
|
'action' => 'Cancelar convite',
|
|
],
|
|
|
|
'roles' => [
|
|
'owner' => 'Proprietário',
|
|
'admin' => 'Administrador',
|
|
'member' => 'Membro',
|
|
'viewer' => 'Visualizador',
|
|
],
|
|
|
|
'flash' => [
|
|
'invite_sent' => 'Convite enviado com sucesso!',
|
|
'invite_deleted' => 'Convite excluído.',
|
|
'member_removed' => 'Membro removido com sucesso.',
|
|
'role_updated' => 'Função do membro atualizada.',
|
|
'wrong_email' => 'Este convite é para um endereço de e-mail diferente.',
|
|
'already_member' => 'Você já é membro deste workspace.',
|
|
'invite_accepted' => 'Bem-vindo! Você agora é membro do workspace.',
|
|
'invite_declined' => 'Convite recusado.',
|
|
],
|
|
],
|
|
|
|
'account' => [
|
|
'tabs' => [
|
|
'account' => 'Conta',
|
|
'usage' => 'Uso',
|
|
'billing' => 'Faturamento',
|
|
],
|
|
'title' => 'Configurações da conta',
|
|
'description' => 'Gerencie o nome da conta e o e-mail de cobrança',
|
|
'name' => 'Nome da conta',
|
|
'name_placeholder' => 'Minha Empresa',
|
|
'billing_email' => 'E-mail de cobrança',
|
|
'billing_email_placeholder' => 'cobranca@empresa.com',
|
|
'billing_email_hint' => 'Este e-mail será usado para faturas e comunicações de cobrança do Stripe.',
|
|
'submit' => 'Salvar',
|
|
],
|
|
|
|
'flash' => [
|
|
'account_updated' => 'Conta atualizada com sucesso!',
|
|
'profile_updated' => 'Perfil atualizado com sucesso!',
|
|
'language_updated' => 'Idioma atualizado com sucesso!',
|
|
'password_updated' => 'Senha atualizada com sucesso!',
|
|
'workspace_updated' => 'Configurações atualizadas com sucesso!',
|
|
'photo_updated' => 'Foto atualizada com sucesso!',
|
|
'photo_deleted' => 'Foto removida com sucesso!',
|
|
'logo_updated' => 'Logo enviado com sucesso!',
|
|
'logo_deleted' => 'Logo removido com sucesso!',
|
|
'notifications_updated' => 'Preferências de notificações atualizadas!',
|
|
],
|
|
|
|
'api_keys' => [
|
|
'title' => 'Chaves API',
|
|
'page_title' => 'Chaves API',
|
|
'heading' => 'Chaves API',
|
|
'description' => 'Gerencie chaves API para acesso programático ao seu workspace.',
|
|
'create' => 'Criar chave API',
|
|
'copy' => 'Copiar',
|
|
'new_token_message' => 'Sua nova chave API foi criada. Copie agora — você não poderá vê-la novamente.',
|
|
'table' => [
|
|
'name' => 'Nome',
|
|
'key' => 'Chave',
|
|
'status' => 'Status',
|
|
'expires' => 'Expira',
|
|
'last_used' => 'Último uso',
|
|
'never' => 'Nunca',
|
|
],
|
|
'actions' => [
|
|
'copy_id' => 'Copiar ID da chave API',
|
|
'copy_id_success' => 'ID da chave API copiado',
|
|
'delete' => 'Excluir',
|
|
],
|
|
'empty' => [
|
|
'title' => 'Nenhuma chave API',
|
|
'description' => 'Crie uma chave API para acessar seu workspace programaticamente.',
|
|
],
|
|
'delete_modal' => [
|
|
'title' => 'Excluir chave API',
|
|
'description' => 'Tem certeza que deseja excluir esta chave API? Aplicações que a usam perderão acesso imediatamente.',
|
|
'action' => 'Excluir chave API',
|
|
],
|
|
'create_dialog' => [
|
|
'title' => 'Criar chave API',
|
|
'description' => 'Crie uma nova chave API para acesso programático ao seu workspace.',
|
|
'name' => 'Nome',
|
|
'name_placeholder' => 'ex. Chave API de Produção',
|
|
'expires' => 'Data de expiração (opcional)',
|
|
'expires_placeholder' => 'Sem expiração',
|
|
'submit' => 'Criar',
|
|
'cancel' => 'Cancelar',
|
|
],
|
|
'flash' => [
|
|
'created' => 'Chave de API criada com sucesso!',
|
|
'deleted' => 'Chave de API excluída com sucesso!',
|
|
],
|
|
],
|
|
];
|