diff --git a/frontend/src/i18n/config.ts b/frontend/src/i18n/config.ts index 343b1581..8883fdf8 100644 --- a/frontend/src/i18n/config.ts +++ b/frontend/src/i18n/config.ts @@ -8,6 +8,7 @@ import deTranslations from './locales/de.json'; import ruTranslations from './locales/ru.json'; import ptTranslations from './locales/pt.json'; import nlTranslations from './locales/nl.json'; +import ptBrTranslations from './locales/pt-br.json'; i18n .use(HttpBackend) @@ -33,19 +34,22 @@ i18n nl: { translation: nlTranslations, }, + 'pt-BR': { + translation: ptBrTranslations, + }, }, - + interpolation: { escapeValue: false, }, // Use v4 format for pluralization (_one/_other instead of _plural suffix) compatibilityJSON: 'v4', - + detection: { order: ['localStorage', 'cookie', 'navigator', 'htmlTag'], caches: ['localStorage', 'cookie'], }, }); -export default i18n; \ No newline at end of file +export default i18n; diff --git a/frontend/src/i18n/locales/pt-br.json b/frontend/src/i18n/locales/pt-br.json new file mode 100644 index 00000000..2b84ee3c --- /dev/null +++ b/frontend/src/i18n/locales/pt-br.json @@ -0,0 +1,2287 @@ +{ + "userManagement": { + "title": "Gerenciamento de Usuários", + "subtitle": "Gerenciar usuários administradores e convites", + "loading": "Carregando usuários...", + "loadError": "Falha ao carregar usuários. Tente novamente.", + "inviteUser": "Convidar Usuário", + "createInvitation": "Criar Convite", + "email": "Endereço de E-mail", + "emailPlaceholder": "usuario@exemplo.com", + "role": "Função", + "selectRole": "Selecione uma função", + "sendInvitation": "Enviar Convite", + "editUser": "Editar Usuário", + "editingUser": "Editando usuário", + "saveChanges": "Salvar Alterações", + "deactivateUser": "Desativar Usuário", + "cancelInvitation": "Cancelar Convite", + "invitationSent": "Convite enviado com sucesso", + "invitationError": "Falha ao enviar convite", + "invitationCancelled": "Convite cancelado", + "cancelInvitationError": "Falha ao cancelar convite", + "userUpdated": "Usuário atualizado com sucesso", + "updateUserError": "Falha ao atualizar usuário", + "userDeactivated": "Usuário desativado com sucesso", + "deactivateUserError": "Falha ao desativar usuário", + "noRole": "Sem Função", + "neverLoggedIn": "Nunca acessou", + "expired": "Expirado", + "deactivate": "Desativar", + "cancel": "Cancelar", + "tabs": { + "users": "Usuários", + "invitations": "Convites" + }, + "stats": { + "totalUsers": "Total de Usuários", + "activeUsers": "Usuários Ativos", + "pendingInvitations": "Convites Pendentes", + "inactiveUsers": "Usuários Inativos" + }, + "status": { + "active": "Ativo", + "inactive": "Inativo" + }, + "table": { + "user": "Usuário", + "email": "E-mail", + "role": "Função", + "status": "Status", + "lastLogin": "Último Acesso", + "actions": "Ações", + "invitedBy": "Convidado por", + "expires": "Expira em" + }, + "validation": { + "emailRequired": "O e-mail é obrigatório", + "emailInvalid": "Formato de e-mail inválido", + "roleRequired": "A função é obrigatória" + }, + "searchUsersPlaceholder": "Buscar usuários...", + "searchInvitationsPlaceholder": "Buscar convites...", + "noUsers": "Nenhum usuário encontrado", + "noUsersFound": "Nenhum usuário corresponde à sua busca", + "noInvitations": "Nenhum convite pendente", + "noInvitationsFound": "Nenhum convite corresponde à sua busca", + "confirmDeactivate": { + "title": "Desativar Usuário", + "message": "Tem certeza que deseja desativar {{name}}? Eles não poderão mais fazer login." + }, + "confirmCancelInvitation": { + "title": "Cancelar Convite", + "message": "Tem certeza que deseja cancelar o convite para {{email}}?" + } + }, + "common": { + "loading": "Carregando...", + "error": "Erro", + "save": "Salvar", + "cancel": "Cancelar", + "delete": "Excluir", + "edit": "Editar", + "add": "Adicionar", + "search": "Buscar", + "filter": "Filtrar", + "sortBy": "Ordenar por", + "yes": "Sim", + "no": "Não", + "back": "Voltar", + "next": "Próximo", + "previous": "Anterior", + "close": "Fechar", + "logout": "Sair", + "menu": "Menu", + "change": "Alterar", + "remove": "Remover", + "download": "Baixar", + "downloadAll": "Baixar Todos", + "uploading": "Enviando...", + "uploaded": "Enviado", + "photo": "foto", + "photos": "fotos", + "video": "vídeo", + "videos": "vídeos", + "media": "mídia", + "restore": "Restaurar", + "actions": "Ações", + "refresh": "Atualizar", + "preview": "Prévia", + "processing": "Processando...", + "upload": "Enviar", + "days": "dias", + "customize": "Customizar", + "hide": "Ocultar", + "unknown": "Desconhecido", + "notSet": "Não definido", + "of": "de", + "up": "Cima", + "select": "Selecionar", + "selected": "Selecionado", + "chunk": "Fragmento", + "optional": "opcional" + }, + "upload": { + "photoCategory": "Categoria da Foto", + "noCategory": "Sem categoria", + "eventSpecific": "(Específico do evento)", + "clickToUpload": "Clique para enviar ou arraste e solte", + "fileRequirements": "JPEG, PNG ou WebP (máx. 50MB por arquivo, {{limit}} arquivos por envio)", + "fileRequirementsMedia": "Imagens JPEG, PNG ou WebP, além de vídeos MP4/MOV/WEBM (máx. 50MB por arquivo, {{limit}} arquivos por envio)", + "unsupportedFiles": "Alguns arquivos foram ignorados pois o formato não é suportado (use JPEG/PNG/WebP/MP4/MOV/WEBM).", + "selectedFiles": "Arquivos selecionados", + "uploading": "Enviando...", + "uploadComplete": "Envio concluído!", + "uploadFailed": "Falha no envio", + "someFilesFailed": "Falha ao enviar alguns arquivos", + "uploadPhotos": "Enviar Fotos", + "uploadMedia": "Enviar Fotos e Vídeos", + "importExternal": "Importar de Pasta Externa", + "externalImportInfo": "Todas as imagens da pasta selecionada serão importadas.", + "selectExternalFolder": "Selecione a pasta externa em /external-media", + "importFromSelectedFolder": "Importar da pasta selecionada", + "maxFilesReached": "Máximo de {{limit}} arquivos permitido", + "someFilesSkipped": "Apenas {{allowed}} arquivos adicionais podem ser adicionados (limite {{limit}})", + "tooManyFiles": "O limite máximo é de {{limit}} arquivos por vez", + "limitInfo": "{{selected}} de {{limit}} arquivos selecionados ({{remaining}} restantes)", + "limitReached": "Limite de envio atingido ({{limit}} arquivos por lote)", + "uploadingChunks": "Enviando {{count}} arquivos em {{total}} lotes...", + "mediaCategory": "Categoria de mídia", + "uploadAction": "Enviar {{count}} arquivos" + }, + "navigation": { + "dashboard": "Painel", + "events": "Eventos", + "archives": "Arquivos", + "settings": "Configurações", + "eventTypes": "Tipos de Evento", + "branding": "Identidade Visual", + "analytics": "Análise", + "emailSettings": "Configurações de E-mail", + "backup": "Backup e Restauração", + "cmsPages": "Páginas CMS", + "users": "Usuários" + }, + "archives": { + "title": "Arquivos", + "subtitle": "Gerenciar galerias de fotos arquivadas", + "loadingArchives": "Carregando arquivos...", + "totalArchives": "Total de Arquivos", + "storageUsed": "Espaço Utilizado", + "totalPhotos": "Total de Fotos", + "avgArchiveSize": "Tamanho Médio do Arquivo", + "searchPlaceholder": "Buscar arquivos...", + "allTypes": "Todos os Tipos", + "wedding": "Casamento", + "birthday": "Aniversário", + "corporate": "Corporativo", + "other": "Outro", + "sortByDate": "Ordenar por Data", + "sortByName": "Ordenar por Nome", + "sortBySize": "Ordenar por Tamanho", + "tableHeaders": { + "event": "Evento", + "type": "Tipo", + "archivedDate": "Data de Arquivamento", + "size": "Tamanho", + "photos": "Fotos", + "actions": "Ações" + }, + "noArchivesFound": "Nenhum arquivo encontrado", + "eventDateNA": "Data do evento: N/A", + "processing": "Processando...", + "download": "Baixar", + "restore": "Restaurar", + "delete": "Excluir", + "showing": "Mostrando de {{from}} a {{to}} de {{total}} arquivos", + "page": "Página {{current}} de {{total}}", + "storageManagement": "Gerenciamento de Armazenamento", + "storageInfo": "Arquivos são armazenados permanentemente, a menos que sejam excluídos manualmente. Considere implementar uma política de retenção para gerenciar custos.", + "confirmRestore": "Tem certeza que deseja restaurar este arquivo? O evento ficará ativo novamente.", + "confirmDelete": "Tem certeza que deseja excluir permanentemente este arquivo? Esta ação não pode ser desfeita.", + "restoreSuccess": "Arquivo restaurado com sucesso", + "deleteSuccess": "Arquivo excluído permanentemente" + }, + "auth": { + "login": "Entrar", + "password": "Senha", + "enterPassword": "Digite a Senha da Galeria", + "passwordPlaceholder": "Digite a senha da galeria", + "invalidPassword": "Senha inválida", + "wrongPassword": "Senha incorreta. Verifique e tente novamente.", + "tooManyAttempts": "Muitas tentativas falhas. Tente novamente mais tarde.", + "sessionExpired": "Sessão expirada", + "pleaseEnterPassword": "Por favor, digite uma senha", + "passwordHint": "A senha foi fornecida pelo organizador do evento. Entre em contato se não a tiver." + }, + "gallery": { + "title": "Galeria de Fotos", + "welcomeMessage": "Mensagem de Boas-vindas", + "expiresOn": "Expira em", + "expires": "Expira", + "expired": "Expirada", + "daysRemaining": "{{days}} dias restantes", + "dayRemaining": "1 dia restante", + "hoursRemaining": "{{hours}} horas restantes", + "expiredMessage": "Esta galeria expirou em {{date}}", + "contactOrganizer": "Entre em contato com o organizador do evento se precisar de acesso a estas fotos", + "searchPhotos": "Buscar fotos por nome de arquivo...", + "sortByDate": "Ordenar por Data", + "sortByName": "Ordenar por Nome", + "sortBySize": "Ordenar por Tamanho", + "allPhotos": "Todas as Fotos", + "filter": "Filtrar", + "feedbackFilter": "Filtro de Feedback", + "all": "Todos", + "liked": "Curtidas", + "favorited": "Favoritadas", + "favorites": "Favoritas", + "downloadSelected": "Baixar Selecionadas", + "shareGallery": "Compartilhar Galeria", + "needHelp": "Precisa de ajuda? Contate-nos em", + "noPhotosFound": "Nenhuma foto encontrada", + "failedToLoad": "Falha ao carregar fotos", + "tryAgain": "Tentar Novamente", + "loading": "Carregando galeria...", + "expiredOn": "Esta galeria expirou em {{date}}.", + "expiresIn": "A galeria expira em {{count}} dia", + "expiresIn_plural": "A galeria expira em {{count}} dias", + "downloadBefore": "Baixe suas fotos antes que fiquem indisponíveis.", + "publicGalleryTitle": "Esta galeria é acessível ao público", + "publicGallerySubtitle": "Carregando as fotos agora...", + "viewGallery": "Ver Galeria", + "downloadAll": "Baixar Todas", + "downloading": "Baixando {{count}} foto...", + "downloading_plural": "Baixando {{count}} fotos...", + "downloadedPhotos": "{{count}} foto baixada!", + "downloadedPhotos_plural": "{{count}} fotos baixadas!", + "downloadError": "Algumas fotos não puderam ser baixadas", + "selectPhotos": "Selecionar Fotos", + "cancelSelection": "Cancelar Seleção", + "photosSelected": "{{count}} selecionadas", + "selectAll": "Selecionar Todas", + "deselectAll": "Desmarcar Todas", + "downloadSelected": "Baixar {{count}} Selecionadas", + "deleteSelected": "Excluir Selecionadas", + "photosCount": "{{count}} foto", + "photosCount_plural": "{{count}} fotos", + "searchByFilename": "Buscar por nome do arquivo...", + "uncategorized": "Sem categoria", + "sortAscending": "Ordem crescente", + "sortDescending": "Ordem decrescente", + "remaining": "restantes", + "selectPhotosHint": "Dica: Use Ctrl+Clique (Cmd+Clique no Mac) para selecionar várias fotos rapidamente", + "filters": "Filtros", + "openFilters": "Abrir filtros", + "toggleSidebar": "Alternar barra lateral", + "toggleMenu": "Alternar menu", + "allCategories": "Todas as Categorias", + "categories": "Categorias", + "mediaType": "Mídia", + "allMedia": "Toda a mídia", + "photosOnly": "Apenas Fotos", + "videosOnly": "Apenas Vídeos", + "download": "Baixar", + "noMedia": "Nenhuma mídia enviada ainda", + "searchPlaceholder": "Buscar fotos...", + "sortBy": "Ordenar Por", + "sortByCaptureDate": "Ordenar por Data de Captura", + "sortByRating": "Ordenar por Avaliação", + "photoGallery": "Galeria de Fotos", + "photos": "Fotos", + "allRightsReserved": "Todos os direitos reservados", + "searchMemories": "Buscar lembranças...", + "thankYou": "Obrigado", + "thankYouMessage": "Por fazer parte da nossa história e tornar nosso dia especial inesquecível.", + "feedback": { + "title": "Feedback", + "shareThoughts": "Compartilhe sua opinião sobre \"{{name}}\"", + "rateThisMoment": "Avalie este momento", + "comments": "Comentários", + "noComments": "Ainda sem comentários. Seja o primeiro!", + "yourName": "Seu nome", + "yourEmail": "Seu e-mail", + "writeLovelyNote": "Escreva uma mensagem carinhosa...", + "postComment": "Postar Comentário", + "anonymous": "Anônimo" + } + }, + "categories": { + "title": "Categorias de Fotos", + "global": "Categorias Globais", + "eventSpecific": "Categorias Específicas do Evento", + "addCategory": "Adicionar Categoria", + "organizationInfo": "Organize suas fotos em categorias. Elas ajudam os convidados a navegar e encontrar tipos específicos de fotos.", + "eventSpecificCategories": "Categorias Específicas do Evento", + "noEventSpecificCategories": "Sem categorias específicas. As categorias globais estão disponíveis por padrão.", + "globalCategoriesAlwaysAvailable": "Categorias Globais (sempre disponíveis):", + "deleteCategoryTitle": "Excluir categoria", + "categoryCreatedSuccess": "Categoria criada com sucesso", + "categoryDeletedSuccess": "Categoria excluída com sucesso", + "failedToCreateCategory": "Falha ao criar categoria", + "failedToDeleteCategory": "Falha ao excluir categoria", + "categoryName": "Nome da categoria", + "noCategory": "Sem categoria", + "noCategoriesYet": "Ainda não há categorias. Crie sua primeira categoria para organizar as fotos.", + "deleteConfirm": "Tem certeza que deseja excluir \"{{name}}\"?", + "cannotDelete": "Não é possível excluir uma categoria com fotos. Reatribua as fotos primeiro.", + "setCoverPhoto": "Definir Foto de Capa", + "removeCoverPhoto": "Remover Foto de Capa", + "coverPhotoSet": "Foto de capa definida com sucesso", + "coverPhotoRemoved": "Foto de capa removida", + "failedToSetCoverPhoto": "Falha ao definir foto de capa", + "categoryHeroHint": "Se nenhuma foto de capa for definida, a foto de destaque padrão será usada." + }, + "events": { + "title": "Eventos", + "create": "Criar", + "createEvent": "Criar Evento", + "totalViews": "Visualizações Totais", + "totalDownloads": "Downloads Totais", + "uniqueVisitors": "Visitantes Únicos", + "createNewEvent": "Criar Novo Evento", + "setupNewGallery": "Configure uma nova galeria para seu evento", + "createNewEventSubtitle": "Configure uma nova galeria de fotos para seu evento", + "eventNamePlaceholder": "ex: Casamento de João e Maria", + "welcomeMessageOptional": "Mensagem de Boas-vindas (Opcional)", + "welcomeMessagePlaceholder": "Bem-vindo ao nosso dia especial! Sinta-se à vontade para baixar e compartilhar...", + "hostEmailPlaceholder": "cliente@exemplo.com", + "adminEmailPlaceholder": "admin@exemplo.com", + "securityAndAccess": "Segurança e Acesso", + "accessAndSecurity": "Acesso e Segurança", + "enterPassword": "Digite a senha", + "passwordPlaceholder": "Digite uma senha segura", + "confirmPasswordPlaceholder": "Confirme a senha", + "galleryExpiresOn": "A galeria expirará em {{date}}", + "guestsWillReceiveWarning": "Os convidados receberão um e-mail de aviso 7 dias antes da expiração.", + "types": { + "wedding": "Casamento", + "birthday": "Aniversário", + "corporate": "Corporativo", + "other": "Outro" + }, + "themes": { + "default": "Padrão", + "oceanBlue": "Azul Oceano", + "royalPurple": "Roxo Real", + "roseGold": "Rosa Ouro", + "sunsetAmber": "Âmbar Pôr do Sol" + }, + "eventDetails": "Detalhes do Evento", + "eventName": "Nome do Evento", + "eventType": "Tipo de Evento", + "eventDate": "Data do Evento", + "hostEmail": "E-mail do Cliente", + "hostName": "Nome do Cliente", + "hostNamePlaceholder": "João Silva", + "adminEmail": "E-mail do Administrador", + "adminNotificationEmail": "E-mail de Notificação do Admin", + "expirationDate": "Data de Expiração", + "active": "Ativo", + "archived": "Arquivado", + "photoCount": "{{count}} fotos", + "totalSize": "Tamanho Total", + "shareLink": "Link de Compartilhamento", + "copyLink": "Copiar Link", + "linkCopied": "Link copiado!", + "viewGallery": "Ver Galeria", + "uploadPhotos": "Enviar Fotos", + "archiveEvent": "Arquivar Evento", + "archiveConfirm": "Tem certeza que deseja arquivar este evento? Esta ação não pode ser desfeita.", + "extendExpiration": "Estender {{days}} Dias", + "backToEvents": "Voltar para Eventos", + "loadingEventDetails": "Carregando detalhes do evento...", + "saveChanges": "Salvar Alterações", + "eventExpired": "Este evento expirou", + "eventExpiresIn": "Este evento expira em {{days}} dias", + "guestsNoAccess": "Convidados não podem mais acessar a galeria. Considere arquivar este evento.", + "warningEmailsSent": "E-mails de aviso foram enviados para o cliente.", + "overview": "Visão Geral", + "photos": "Fotos", + "categories": "Categorias", + "eventInformation": "Informações do Evento", + "sourceMode": "Modo de Origem", + "sourceModeManaged": "Gerenciado (upload para o PicPeak)", + "sourceModeReference": "Referenciar pasta externa", + "sourceModeHelp": "Use o modo gerenciado para uploads diretos ou aponte para uma pasta /external-media montada ao usar armazenamento local.", + "externalFolder": "Pasta Externa", + "externalFolderHint": "Estas pastas são lidas da montagem /external-media no seu contêiner ou host.", + "externalFolderRequired": "Selecione uma pasta externa antes de salvar.", + "welcomeMessage": "Mensagem de Boas-vindas", + "noWelcomeMessage": "Nenhuma mensagem definida", + "created": "Criado", + "expires": "Expira", + "shareWithGuests": "Compartilhe este link com os convidados. Eles precisarão da senha para acessar.", + "shareWithGuestsPublic": "Compartilhe este link com os convidados. Nenhuma senha é necessária para esta galeria.", + "resetGalleryPassword": "Redefinir Senha da Galeria", + "resendCreationEmail": "Reenviar E-mail de Criação", + "creationEmailResent": "O e-mail de criação foi enfileirado para envio", + "failedToResendEmail": "Falha ao reenviar e-mail de criação", + "photoStatistics": "Estatísticas de Fotos", + "totalPhotos": "Total de Fotos", + "managePhotos": "Gerenciar Fotos", + "actions": "Ações", + "archivingInfo": "O arquivamento criará um arquivo ZIP de todas as fotos e removerá a galeria do acesso público.", + "statistics": "Estatísticas", + "views": "Visualizações", + "downloads": "Downloads", + "noStatistics": "Nenhuma estatística disponível ainda", + "archiveStatus": "Status do Arquivamento", + "archivedOn": "Arquivado em", + "downloadArchive": "Baixar Arquivo", + "loadingPhotos": "Carregando fotos...", + "photoCategories": "Categorias de Fotos", + "organizeCategoriesInfo": "Organize suas fotos em categorias para ajudar na navegação.", + "categoriesTip": "Dica: Categorias são específicas para cada evento. Você também pode criar categorias globais nas Configurações.", + "contactInformation": "Informações de Contato", + "hostEmailHelp": "O cliente receberá notificações de criação e expiração da galeria", + "adminEmailHelp": "Receberá notificações do sistema e confirmações de arquivamento", + "securityAccess": "Segurança e Acesso", + "galleryPassword": "Senha da Galeria", + "requirePasswordToggle": "Exigir senha para esta galeria", + "requirePasswordToggleHelp": "Desative se quiser compartilhar a galeria sem senha. Qualquer pessoa com o link poderá ver as fotos.", + "publicGalleryWarning": "Galerias públicas são acessíveis a qualquer pessoa com o link. Considere ativar marcas d'água.", + "passwordHelperText": "Você pode usar datas como \"04.07.2025\" ou qualquer texto com mais de 6 caracteres", + "confirmPassword": "Confirmar Senha", + "showPasswords": "Mostrar senhas", + "newPasswordLabel": "Nova Senha da Galeria", + "gallerySettings": "Configurações da Galeria", + "themeAndStyle": "Tema e Estilo", + "colorTheme": "Tema de Cores", + "galleryExpiration": "Expiração da Galeria", + "galleryExpiresIn": "Galeria Expira Em", + "daysAfterEvent": "dias após a data do evento", + "galleryWillExpireOn": "A galeria expirará em {{date}}", + "expirationWarning": "Os convidados receberão um e-mail de aviso 7 dias antes da expiração.", + "noExpiration": "Sem Expiração", + "noExpirationHelp": "Esta galeria permanecerá ativa até ser arquivada manualmente.", + "userUploads": "Configurações de Upload do Usuário", + "allowUserUploads": "Permitir que convidados enviem fotos", + "allowUserUploadsHelp": "Habilite convidados a enviarem suas próprias fotos para esta galeria", + "allowUserUploadsDescription": "Permite que os convidados façam upload de suas próprias fotos", + "uploadCategory": "Categoria de Upload", + "selectCategory": "Selecione uma categoria para os uploads dos usuários", + "uploadCategoryHelp": "Todas as fotos enviadas por usuários serão adicionadas a esta categoria", + "userUploadWarning": "Uploads de usuários podem ser removidos pelos admins a qualquer momento.", + "allowDownloads": "Permitir download de fotos", + "allowDownloadsHelp": "Permitir que convidados baixem fotos desta galeria", + "downloadPermissions": "Permissões de Download", + "downloadsEnabled": "Downloads Ativados", + "downloadsDisabled": "Downloads Desativados", + "downloadProtection": "Proteção de Download", + "disableRightClick": "Bloquear menu do botão direito", + "watermarkDownloads": "Adicionar marca d'água aos downloads", + "enableDevtoolsProtection": "Detectar ferramentas de desenvolvedor", + "useCanvasRendering": "Renderização em Canvas (proteção avançada)", + "protectionInfo": "Recursos de proteção ajudam a evitar downloads não autorizados, mas não bloqueiam todos os métodos.", + "protectionLevelBasic": "Básico - Apenas bloqueio de botão direito", + "protectionLevelStandard": "Padrão - Atalhos de teclado bloqueados", + "protectionLevelEnhanced": "Aprimorado - Detecção de Print Screen", + "protectionLevelMaximum": "Máximo - Detecção de DevTools e renderização em Canvas", + "heroLogoSettings": "Configurações da Logo de Destaque (Hero)", + "heroLogoVisible": "Exibir logo na seção de destaque", + "heroLogoSize": "Tamanho da Logo", + "heroLogoSizeSmall": "Pequena", + "heroLogoSizeMedium": "Média", + "heroLogoSizeLarge": "Grande", + "heroLogoSizeXLarge": "Extra Grande", + "heroLogoPosition": "Posição da Logo", + "heroLogoPositionTop": "Topo (acima do título)", + "heroLogoPositionCenter": "Centro (entre título e datas)", + "heroLogoPositionBottom": "Base (abaixo das datas)", + "heroLogoInfo": "Estas configurações se aplicam ao layout Hero. Você pode ocultar a logo ou personalizar seu tamanho e posição.", + "eventCustomLogo": "Logo Personalizada do Evento", + "eventCustomLogoDescription": "Envie uma logo para este evento. Isso substitui a logo global apenas para esta galeria.", + "uploadEventLogo": "Enviar Logo", + "replaceLogo": "Substituir", + "removeLogo": "Remover", + "eventLogoUploaded": "Logo do evento enviada com sucesso", + "eventLogoUploadFailed": "Falha ao enviar logo do evento", + "eventLogoRemoved": "Logo do evento removida com sucesso", + "eventLogoRemoveFailed": "Falha ao remover logo do evento", + "heroLogoVisibleLabel": "Logo visível", + "heroLogoSizeLabel": "Tamanho", + "heroLogoPositionLabel": "Posição", + "heroLogoHidden": "Logo oculta", + "heroPhoto": "Foto de Destaque (Hero)", + "heroPhotoHelp": "Selecione uma foto de destaque padrão. Você pode substituir isso por categoria.", + "selectHeroPhoto": "Selecionar Foto de Destaque", + "noHeroPhotoSelected": "Nenhuma foto selecionada", + "heroPhotoSelected": "Foto de destaque selecionada", + "heroImageAnchor": "Posição de Corte da Imagem de Destaque", + "heroImageAnchorDescription": "Clique na imagem para definir o ponto focal para o corte.", + "heroImageAnchorTop": "Topo", + "heroImageAnchorCenter": "Centro", + "heroImageAnchorBottom": "Base", + "heroPreview": "Prévia do Destaque", + "noPhotosAvailable": "Nenhuma foto disponível", + "processingRequest": "Processando sua solicitação...", + "eventTypeWedding": "Casamento", + "eventTypeBirthday": "Aniversário", + "eventTypeCorporate": "Corporativo", + "eventTypeOther": "Outro", + "days30": "30 dias", + "days60": "60 dias", + "days90": "90 dias", + "days365": "1 ano", + "inactive": "Inativo", + "expired": "Expirado", + "daysLeft": "{{count}}d restante", + "daysLeft_plural": "{{count}}d restantes", + "subtitle": "Gerencie suas galerias de fotos e eventos", + "loadingEvents": "Carregando eventos...", + "failedToLoadEvents": "Falha ao carregar eventos", + "tryAgain": "Tentar Novamente", + "bulkArchiveSuccess": "{{count}} eventos arquivados com sucesso", + "bulkArchivePartial": "{{success}} eventos arquivados, {{failed}} falharam", + "searchEventsPlaceholder": "Buscar eventos...", + "all": "Todos", + "expiring": "Expirando", + "eventsSelected": "{{count}} evento selecionado", + "eventsSelected_plural": "{{count}} eventos selecionados", + "clear": "Limpar", + "archiveSelected": "Arquivar Selecionados", + "publicAccess": "Acesso público", + "passwordProtected": "Protegido por senha", + "newPasswordRequired": "Defina uma senha antes de ativar a proteção.", + "event": "Evento", + "type": "Tipo", + "date": "Data", + "status": "Status", + "expires": "Expira", + "actions": "Ações", + "noEventsFound": "Nenhum evento encontrado", + "stats": { + "totalEvents": "Total de Eventos", + "activeEvents": "Eventos Ativos", + "totalPhotos": "Total de Fotos", + "expiringEvents": "Expirando em Breve" + }, + "viewDetails": "Ver Detalhes", + "archiveEventAction": "Arquivar Evento", + "downloadArchiveAction": "Baixar Arquivo", + "deleteEvent": "Excluir Evento", + "deleteEventConfirm": "Tem certeza que deseja excluir este evento?", + "downloadArchiveSoon": "Download do arquivo disponível em breve", + "eventExpiredMessage": "Este evento expirou", + "guestsCannotAccessGallery": "Os convidados não podem mais acessar a galeria. Considere arquivá-la.", + "warningEmailsHaveBeenSent": "E-mails de aviso foram enviados ao cliente.", + "extendSevenDays": "Estender 7 Dias", + "welcomeMessageLabel": "Mensagem de Boas-vindas", + "noWelcomeMessageSet": "Nenhuma mensagem definida", + "createdOn": "Criado em", + "copy": "Copiar", + "copied": "Copiado!", + "organizingPhotosInfo": "Organize suas fotos em categorias para facilitar a navegação.", + "categoriesTip": "Dica: Categorias são específicas de cada evento. Crie nomes como \"Cerimônia\", \"Recepção\", etc.", + "archiveStatusTitle": "Status do Arquivo", + "downloadingArchive": "Baixando arquivo de {{name}}...", + "downloadStarted": "Download iniciado", + "failedToDownloadArchive": "Falha ao baixar arquivo", + "statisticsNotAvailable": "Estatísticas não disponíveis ainda", + "photoFilters": "Filtros de Fotos", + "noStatisticsAvailableYet": "Ainda sem estatísticas", + "addPlus": "Adicionar+", + "galleryTheme": "Tema da Galeria", + "customizeTheme": "Customizar Tema", + "noThemeSet": "Nenhum tema configurado", + "customizingTheme": "Customizando tema da galeria", + "customizingThemeFor": "Customizando tema para {{event}}", + "customCssTemplate": "Modelo CSS Personalizado", + "customCssTemplateDesc": "Aplique um modelo CSS para estilizar a galeria com efeitos visuais únicos.", + "noTemplate": "Sem Modelo", + "useThemeOnly": "Usar apenas predefinição do tema", + "customTemplate": "Modelo Personalizado", + "rename": { + "button": "Renomear", + "title": "Renomear Evento", + "validating": "Validando novo nome...", + "renamingFiles": "Renomeando arquivos...", + "complete": "Concluído!", + "failed": "Falha ao renomear", + "filesRenamed": "{{count}} arquivos atualizados", + "confirm": "Renomear Evento" + } + }, + "settings": { + "title": "Configurações do Sistema", + "subtitle": "Configurar preferências e ajustes globais do sistema", + "loadingSettings": "Carregando configurações...", + "general": { + "title": "Geral", + "siteConfiguration": "Configuração do Site", + "siteUrl": "URL do Site", + "siteUrlHelp": "Usada para gerar links de galeria nos e-mails", + "defaultExpiration": "Expiração Padrão (dias)", + "defaultExpirationHelp": "Quanto tempo as galerias ficam ativas por padrão", + "maxFileSize": "Tamanho Máx. do Arquivo (MB)", + "maxFileSizeHelp": "Tamanho máximo por foto enviada", + "maxFilesPerUpload": "Máx. de Arquivos por Envio", + "maxFilesPerUploadHelp": "Número máximo de fotos permitidas em um único lote (1-{{max}}).", + "allowedFileTypes": "Tipos de Arquivos Permitidos", + "allowedFileTypesHelp": "Lista de extensões separadas por vírgula", + "featureToggles": "Funcionalidades", + "enableAnalytics": "Ativar rastreamento de análises", + "enableRegistration": "Permitir auto-registro para admins", + "enableShortGalleryUrls": "Usar URLs curtas para galerias", + "enableShortGalleryUrlsHelp": "Remove o slug do evento de novos links, mantendo os antigos funcionando.", + "maintenanceMode": "Ativar modo de manutenção", + "language": "Idioma", + "defaultLanguage": "Idioma Padrão", + "defaultLanguageHelp": "Idioma exibido aos convidados antes do login", + "defaultWelcomeMessage": "Mensagem de Boas-vindas Padrão", + "welcomeMessage": "Mensagem de Boas-vindas", + "welcomeMessagePlaceholder": "Digite a mensagem padrão que será incluída nos e-mails de criação", + "welcomeMessageHelp": "Esta mensagem será incluída em todos os e-mails, a menos que seja substituída no evento", + "saveSettings": "Salvar Configurações Gerais", + "saveGeneralSettings": "Salvar Configurações Gerais", + "dateTimeFormat": "Formato de Data e Hora", + "dateFormat": "Formato de Data", + "dateFormatHelp": "Como as datas são exibidas nos e-mails e no sistema", + "accountSection": "Conta Admin", + "accountUsername": "Usuário Admin", + "accountUsernameHelp": "Exibido na interface e logs de atividade.", + "accountUsernameRequired": "Usuário é obrigatório", + "accountUsernameLength": "O usuário deve ter pelo menos 3 caracteres", + "accountEmail": "E-mail Admin", + "accountEmailHelp": "Usado para login e notificações de segurança.", + "accountEmailRequired": "E-mail é obrigatório", + "accountEmailInvalid": "Insira um e-mail válido", + "accountSaveButton": "Salvar detalhes da conta", + "accountSaveSuccess": "Detalhes da conta atualizados" + }, + "publicSite": { + "tabLabel": "Site Público", + "badge": "Landing Page", + "title": "Página Inicial Pública", + "subtitle": "Publique uma landing page customizada quando visitarem seu domínio.", + "loading": "Carregando configurações do site público...", + "enabled": "Ativado", + "disabled": "Desativado", + "htmlLabel": "HTML da Landing Page", + "htmlPlaceholder": "Forneça o HTML para as seções e chamadas de ação da sua página.", + "htmlHelp": "O HTML bruto é higienizado ao salvar. Tokens como {{company_name}}, {{company_tagline}} e {{support_email}} serão substituídos pelos valores das configurações de Identidade Visual.", + "cssLabel": "CSS Personalizado", + "cssPlaceholder": "Ajustes de layout, cores ou tipografia via CSS.", + "cssHelp": "Imports e URLs de JavaScript são removidos. Use seletores CSS padrão.", + "saveCta": "Salvar site público", + "saving": "Salvando...", + "saveSuccess": "Configurações do site público salvas.", + "saveError": "Falha ao salvar configurações do site público.", + "resetCta": "Redefinir para o padrão", + "resetting": "Redefinindo...", + "resetSuccess": "Modelo do site público redefinido.", + "resetError": "Falha ao redefinir modelo.", + "previewTitle": "Prévia ao Vivo", + "previewSandboxed": "Prévia isolada", + "previewDisabled": "Ative o site público para ver a prévia.", + "sanitizationNotice": "Scripts e atributos inseguros são removidos. Apenas HTML, links e imagens seguros são permitidos.", + "htmlRequired": "Forneça conteúdo HTML antes de ativar o site público." + }, + "storage": { + "title": "Armazenamento", + "overview": "Visão Geral do Armazenamento", + "totalUsed": "Total Utilizado", + "archiveStorage": "Armazenamento de Arquivos", + "storageLimit": "Limite de Armazenamento", + "storageLimitHelper": "Defina um limite consultivo para o uso de espaço.", + "softLimitInputLabel": "Limite (GB)", + "softLimitHelper": "Insira o limite máximo preferencial em gigabytes.", + "recommendedSoftLimit": "Limite Sugerido", + "diskCapacity": "Capacidade do Disco", + "diskCapacityReported": "Capacidade (reportada)", + "diskAvailable": "Disponível", + "diskAvailableReported": "Disponível (reportada)", + "diskFree": "Livre", + "diskFreeReported": "Livre (reportada)", + "diskMetricsUnavailable": "Métricas de disco não estão disponíveis em ambientes virtualizados ou Docker Desktop.", + "applyRecommended": "Usar recomendado", + "applyAvailable": "Igualar disponível", + "invalidSoftLimit": "Insira um número válido para o limite.", + "saveSoftLimit": "Salvar limite", + "limitNotEnforced": "Este limite é apenas consultivo e não é aplicado automaticamente.", + "overrideTitle": "Substituição Manual de Capacidade", + "diskOverrideEnvNote": "A capacidade é controlada por variáveis de ambiente e não pode ser editada aqui.", + "diskOverrideSettingsHelp": "Defina valores manuais se o Docker reportar números irreais.", + "overrideCapacityLabel": "Capacidade total (GB)", + "overrideCapacityHelper": "Deixe em branco para usar a leitura automática.", + "overrideAvailableLabel": "Espaço disponível (GB)", + "overrideAvailableHelper": "Opcional. Deixe em branco para calcular automaticamente.", + "saveOverride": "Salvar substituição", + "capacityRequiredForAvailable": "Insira a capacidade total antes de definir o espaço disponível.", + "availableExceedsCapacity": "O espaço disponível não pode exceder a capacidade total.", + "storageUsage": "Uso de Armazenamento", + "storageByEvent": "Armazenamento por Evento", + "storageManagement": "Gerenciamento de Armazenamento", + "storageManagementHelp": "Considere arquivar ou excluir eventos antigos. Eventos arquivados ocupam menos espaço.", + "noEventsUsingStorage": "Nenhum evento utilizando armazenamento", + "unlimited": "Ilimitado" + }, + "security": { + "title": "Segurança", + "passwordSettings": "Configurações de Senha", + "minPasswordLength": "Comprimento Mínimo da Senha", + "minPasswordLengthHelp": "Número mínimo de caracteres para senhas de galeria", + "passwordComplexity": "Complexidade da Senha", + "passwordComplexityHelp": "Nível de segurança exigido para senhas", + "complexitySimple": "Simples (6+ caracteres, qualquer texto)", + "complexityModerate": "Moderada (8+ caracteres, letras/números)", + "complexityStrong": "Forte (12+ caracteres, maiúsculas/minúsculas/números)", + "complexityVeryStrong": "Muito Forte (12+ caracteres, todos os tipos)", + "sessionAuth": "Sessão e Autenticação", + "sessionTimeout": "Tempo de Sessão (minutos)", + "sessionTimeoutHelp": "Tempo de inatividade antes de deslogar o admin", + "maxLoginAttempts": "Máximo de Tentativas de Login", + "maxLoginAttemptsHelp": "Falhas permitidas por IP antes do bloqueio", + "attemptWindowMinutes": "Janela de Tentativas (minutos)", + "attemptWindowMinutesHelp": "Tempo para contabilizar falhas de login", + "lockoutDurationMinutes": "Duração do Bloqueio (minutos)", + "lockoutDurationMinutesHelp": "Tempo que a conta permanece bloqueada após falhas", + "enable2FA": "Ativar autenticação de dois fatores para admins", + "recaptchaSettings": "Configurações de reCAPTCHA", + "enableRecaptcha": "Ativar reCAPTCHA nos formulários de login", + "siteKey": "Chave do Site", + "siteKeyHelp": "Sua chave pública do reCAPTCHA v2", + "secretKey": "Chave Secreta", + "secretKeyHelp": "Sua chave privada (mantenha em segredo)", + "recaptchaHelp": "Obtenha suas chaves em", + "saveSettings": "Salvar Configurações de Segurança", + "saveSecuritySettings": "Salvar Configurações de Segurança" + }, + "categories": { + "title": "Categorias", + "about": "Sobre Categorias de Fotos", + "aboutText": "Categorias globais estão disponíveis para todos os eventos. Você também pode criar categorias específicas ao editar um evento. Elas ajudam a organizar as fotos e permitem filtros por tipo." + }, + "systemStatus": { + "title": "Status do Sistema", + "storageOverview": "Visão Geral do Espaço", + "systemInfo": "Informações do Sistema", + "databaseInfo": "Informações do Banco de Dados", + "platform": "Plataforma", + "nodeVersion": "Versão do Node", + "uptime": "Tempo de Atividade", + "cpuCores": "Núcleos de CPU", + "memoryUsage": "Uso de Memória", + "memoryUsed": "Memória Utilizada", + "photos": "Fotos", + "admins": "Admins", + "dbSize": "Tamanho do Banco", + "services": "Serviços de Segundo Plano", + "fileWatcher": "Monitor de Arquivos", + "fileWatcherDesc": "Monitora novas fotos", + "expirationChecker": "Verificador de Expiração", + "expirationCheckerDesc": "Arquiva galerias expiradas", + "emailProcessor": "Processador de E-mails", + "emailProcessorDesc": "Envia e-mails na fila", + "emailQueue": "Status da Fila de E-mails", + "pending": "Pendentes", + "sent": "Enviados", + "failed": "Falhas", + "lastUpdate": "Última atualização" + }, + "photoDimensions": { + "title": "Dimensões das Fotos", + "totalPhotos": "Total de Fotos", + "withDimensions": "Com Dimensões", + "missingDimensions": "Sem Dimensões", + "repairButton": "Reparar Dimensões", + "repairing": "Reparando...", + "alreadyRunning": "O reparo já está em execução", + "started": "Reparo iniciado para {{count}} fotos", + "noneToRepair": "Todas as fotos já possuem dimensões", + "resultSuccess": "Último reparo: {{success}} atualizadas, {{failed}} falhas", + "description": "Preenche larguras/alturas ausentes para fotos antigas. Necessário para layouts Masonry e Mosaic." + }, + "updateNotifications": { + "title": "Notificações de Atualização", + "description": "Receba e-mails quando novas versões do PicPeak estiverem disponíveis.", + "enableEmails": "Ativar notificações por e-mail", + "enableEmailsDesc": "Enviar e-mail para admins sobre novas versões", + "recipients": "Destinatários", + "recipientsPlaceholder": "admin@exemplo.com, outro@exemplo.com", + "recipientsHelper": "E-mails separados por vírgula. Deixe vazio para todos os admins.", + "lastNotified": "Última notificação enviada para versão: {{version}}", + "checkNow": "Verificar e Notificar", + "sendTest": "Enviar E-mail de Teste", + "saved": "Configurações salvas", + "saveError": "Falha ao salvar configurações", + "emailSent": "E-mail enviado para {{count}} destinatários", + "emailFailed": "Falha ao enviar notificação", + "checkSuccess": "Notificação enviada para nova versão", + "checkNoAction": "Nenhuma ação necessária: {{reason}}", + "checkError": "Falha ao verificar atualizações" + }, + "events": { + "title": "Criação de Eventos", + "requiredFields": "Campos Obrigatórios", + "requiredFieldsDescription": "Configure quais campos são obrigatórios ao criar novos eventos.", + "requireCustomerName": "Exigir nome do cliente", + "requireCustomerNameHelp": "O nome deve ser fornecido obrigatoriamente", + "requireCustomerEmail": "Exigir e-mail do cliente", + "requireCustomerEmailHelp": "O e-mail deve ser fornecido obrigatoriamente", + "customerEmailWarning": "Necessário para enviar convites da galeria", + "requireAdminEmail": "Exigir e-mail do admin", + "requireAdminEmailHelp": "O e-mail do admin deve ser fornecido", + "adminEmailWarning": "Necessário para notificações do sistema", + "requireEventDate": "Exigir data do evento", + "requireEventDateHelp": "A data deve ser informada na criação", + "eventDateWarning": "URLs usarão identificadores aleatórios sem a data", + "requireExpiration": "Exigir data de expiração", + "requireExpirationHelp": "Galerias devem ter uma data de término", + "expirationWarning": "Galerias sem expiração ficarão ativas até arquivamento manual", + "saveSettings": "Salvar Configurações de Evento", + "noteTitle": "Nota", + "noteText": "Estas configurações afetam apenas novos eventos. O padrão exige todos os campos." + }, + "imageSecurity": { + "title": "Proteção de Imagem", + "saveSuccess": "Configurações de segurança salvas", + "saveError": "Falha ao salvar configurações", + "loadError": "Falha ao carregar configurações de segurança", + "defaultProtection": "Configurações de Proteção Padrão", + "defaultProtectionHelp": "Aplicado a novos eventos por padrão. Podem ser substituídas individualmente.", + "protectionLevel": "Nível de Proteção Padrão", + "imageQuality": "Qualidade de Imagem Padrão", + "fragmentationLevel": "Nível de Fragmentação", + "enableDevtools": "Ativar detecção de DevTools por padrão", + "enableCanvas": "Ativar renderização em Canvas por padrão", + "rateLimiting": "Limite de Requisições", + "rateLimitingHelp": "Limita quantas imagens podem ser solicitadas para evitar raspagem (scraping).", + "requestsPerMinute": "Requisições por minuto", + "requestsPer5Minutes": "Requisições por 5 min", + "requestsPerHour": "Requisições por hora", + "securityMonitoring": "Monitoramento de Segurança", + "suspiciousThreshold": "Limite para atividade suspeita", + "autoBlockThreshold": "Limite para bloqueio automático", + "enableMonitoring": "Ativar monitoramento de segurança", + "blockSuspiciousIps": "Bloquear IPs suspeitos automaticamente", + "logEvents": "Registrar eventos de segurança no banco de dados", + "infoTitle": "Sobre a Proteção de Imagem", + "infoText": "Estes recursos evitam cópias fáceis, mas não bloqueiam todos os métodos. Considere marcas d'água para proteção total." + }, + "moderation": { + "title": "Moderação", + "wordFilters": "Filtros de Palavras", + "description": "Gerencie palavras que devem ser filtradas ou bloqueadas nos comentários", + "addFilter": "Adicionar Novo Filtro", + "enterWord": "Digite a palavra para filtrar", + "searchFilters": "Buscar filtros...", + "filterAdded": "Filtro adicionado com sucesso", + "filterExists": "Este filtro já existe", + "addError": "Falha ao adicionar filtro", + "filterUpdated": "Filtro atualizado com sucesso", + "updateError": "Falha ao atualizar filtro", + "filterDeleted": "Filtro excluído com sucesso", + "deleteError": "Falha ao excluir filtro", + "wordRequired": "Insira uma palavra para filtrar", + "confirmDelete": "Tem certeza que deseja excluir este filtro?", + "loading": "Carregando filtros...", + "noMatchingFilters": "Nenhum filtro correspondente", + "noFilters": "Nenhum filtro configurado ainda", + "severityLow": "Baixa", + "severityModerate": "Moderada", + "severityHigh": "Alta", + "severityBlock": "Bloquear", + "severityLevels": "Níveis de Gravidade", + "lowDescription": "A palavra é sinalizada para revisão, mas não bloqueada", + "moderateDescription": "O comentário exige aprovação manual para ficar visível", + "highDescription": "O comentário é ocultado e exige revisão do admin", + "blockDescription": "O comentário é rejeitado imediatamente" + }, + "styling": { + "title": "CSS Personalizado" + }, + "thumbnails": { + "title": "Miniaturas", + "dimensionsTitle": "Dimensões e Qualidade das Miniaturas", + "dimensionsHelp": "Configura o tamanho e qualidade das prévias automáticas.", + "width": "Largura (px)", + "widthHelp": "50-1000 pixels", + "height": "Altura (px)", + "heightHelp": "50-1000 pixels", + "quality": "Qualidade", + "qualityHelp": "1-100 (maior = melhor qualidade, arquivo maior)", + "format": "Formato", + "fit": "Modo de Ajuste", + "fitHelp": "Como as imagens são redimensionadas. \"Cover\" corta para preencher, \"Contain\" ajusta aos limites.", + "fit_cover": "Cover (cortar para preencher)", + "fit_contain": "Contain (ajustar ao espaço)", + "fit_fill": "Fill (esticar)", + "fit_inside": "Inside (encolher para caber)", + "fit_outside": "Outside (expandir para cobrir)", + "regenerateTitle": "Regenerar Miniaturas", + "regenerateHelp": "Após alterar as configurações, regenere as miniaturas existentes. Isso pode demorar.", + "regenerateButton": "Regenerar Todas as Miniaturas", + "regenerateStarted": "Regeneração de miniaturas iniciada", + "regenerateError": "Falha ao iniciar regeneração", + "saveSuccess": "Configurações de miniaturas salvas", + "saveError": "Falha ao salvar configurações", + "loadError": "Falha ao carregar configurações", + "infoTitle": "Sobre Miniaturas", + "infoText": "Miniaturas são versões menores das fotos. Aumentar o tamanho melhora a aparência, mas usa mais espaço e banda." + }, + "seo": { + "title": "SEO e Robots", + "indexingTitle": "Indexação em Buscadores", + "allowIndexing": "Permitir indexação em mecanismos de busca", + "allowIndexingHelp": "Se desativado, crawlers serão bloqueados via robots.txt. Recomendado desativar para galerias privadas.", + "sitemapUrl": "URL do Sitemap", + "sitemapUrlHelp": "Opcional. Adicionado ao robots.txt se fornecido.", + "aiBlockingTitle": "Bloqueio de IA e Bots", + "blockAiCrawlers": "Bloquear crawlers de IA/LLM", + "blockAiCrawlersHelp": "Impede bots de treinamento de IA de acessarem seu conteúdo.", + "blockedAgents": "Agentes de IA bloqueados", + "addAgentPlaceholder": "Nome do agente...", + "blockSocialBots": "Bloquear bots de prévia de redes sociais", + "blockSocialBotsHelp": "Impede prévias de links no Twitter, Facebook, LinkedIn, etc.", + "metaTagsTitle": "Meta Tags e Regras Customizadas", + "metaNoindex": "Adicionar meta tag noindex", + "metaNoindexHelp": "Diz aos buscadores para não indexarem as páginas.", + "metaNofollow": "Adicionar meta tag nofollow", + "metaNofollowHelp": "Diz aos buscadores para não seguirem links nas páginas.", + "metaNoai": "Adicionar meta tag noai/noimageai", + "metaNoaiHelp": "Sinaliza que o conteúdo não deve ser usado para treinar IA.", + "customRules": "Regras personalizadas do robots.txt", + "ruleAgentPlaceholder": "User-agent", + "rulePathPlaceholder": "Caminho proibido (Disallow)", + "showPreview": "Mostrar prévia do robots.txt", + "hidePreview": "Ocultar prévia do robots.txt", + "saveSettings": "Salvar Configurações de SEO" + }, + "analytics": { + "title": "Análise", + "umamiIntegration": "Integração com Umami Analytics", + "enableUmami": "Ativar Umami Analytics", + "umamiUrl": "URL do Umami", + "umamiUrlHelp": "A URL da sua instância Umami (ex: https://analytics.seudominio.com)", + "websiteId": "ID do Website", + "websiteIdHelp": "O ID do site no painel do Umami", + "shareUrl": "URL de Compartilhamento (Opcional)", + "shareUrlHelp": "URL pública para incorporar o painel completo", + "umamiInfo": "Sobre o Umami Analytics", + "umamiInfoText": "Umami é uma plataforma de análise focada em privacidade e código aberto.", + "learnMore": "Saiba mais sobre o Umami", + "saveAnalyticsSettings": "Salvar Configurações de Análise", + "backendAnalytics": "Análise de Backend", + "backendAnalyticsText": "O sistema rastreia métricas básicas no servidor para segurança e performance.", + "tracked": "Métricas Monitoradas", + "galleryViews": "Visualizações de galeria", + "photoDownloads": "Downloads individuais e em lote", + "uniqueVisitors": "Visitantes únicos por IP", + "deviceTypes": "Tipos de dispositivos", + "privacy": "Privacidade", + "privacyText": "Endereços IP são anonimizados. Dados são retidos por 90 dias." + } + }, + "analytics": { + "title": "Painel de Análise", + "titleSimple": "Análises", + "subtitle": "Acompanhe a performance das galerias e o engajamento", + "detailedSubtitle": "Análises detalhadas via Umami", + "loadingAnalytics": "Carregando análises...", + "showSummaryView": "Ver Resumo", + "fullDashboard": "Painel Completo", + "refresh": "Atualizar", + "last7Days": "Últimos 7 dias", + "last30Days": "Últimos 30 dias", + "last90Days": "Últimos 90 dias", + "pageViews": "Visualizações", + "uniqueVisitors": "Visitantes Únicos", + "totalDownloads": "Downloads Totais", + "topGallery": "Melhor Galeria", + "topPages": "Páginas Principais", + "views": "visualizações", + "visitors": "visitantes únicos", + "topDownloadsByGallery": "Downloads por Galeria", + "deviceBreakdown": "Uso por Dispositivo", + "desktop": "Desktop", + "mobile": "Celular", + "tablet": "Tablet", + "storageUsage": "Uso de Espaço", + "used": "Usado", + "of": "de", + "totalPhotos": "Total de Fotos", + "activeEvents": "Eventos Ativos", + "notConfigured": "Umami Analytics não configurado", + "configureInstructions": "Para ver dados reais, configure o Umami nas variáveis de ambiente e no painel admin.", + "noData": "Dados não disponíveis", + "percentChange": "{{percent}}% em relação ao período anterior" + }, + "branding": { + "title": "Marca e Temas", + "titleFull": "Identidade Visual e Customização", + "subtitle": "Personalize a aparência das suas galerias", + "loadingBranding": "Carregando identidade visual...", + "themeAndStyle": "Tema e Estilo", + "companyInfo": "Informações da Empresa", + "companyName": "Nome da Empresa", + "companyNameHelp": "Exibido no cabeçalho das galerias e e-mails", + "companyTagline": "Slogan da Empresa", + "companyTaglineHelp": "Uma descrição curta do seu negócio", + "supportEmail": "E-mail de Suporte", + "supportEmailHelp": "E-mail de contato para convidados", + "footerText": "Texto do Rodapé", + "footerTextHelp": "Exibido na parte inferior das galerias", + "logo": "Logo", + "currentLogo": "Logo atual", + "uploadLogo": "Enviar Logo", + "removeLogo": "Remover Logo", + "logoHelp": "Tamanho recomendado: 200x60px, PNG ou JPEG", + "favicon": "Favicon", + "currentFavicon": "Favicon atual", + "uploadFavicon": "Enviar Favicon", + "removeFavicon": "Remover Favicon", + "faviconHelp": "Formato PNG ou ICO, recomendado 32x32px", + "watermark": "Marca d'água", + "watermarkSettings": "Configurações de Marca d'água", + "enableWatermarks": "Ativar Marcas d'água", + "watermarkHelp": "Adiciona o nome da sua empresa nas fotos baixadas", + "watermarkLogo": "Logo da Marca d'água", + "currentWatermark": "Marca d'água atual", + "uploadWatermarkLogo": "Enviar Logo da Marca d'água", + "watermarkPosition": "Posição da Marca d'água", + "topLeft": "Superior Esquerda", + "topRight": "Superior Direita", + "center": "Centro", + "bottomLeft": "Inferior Esquerda", + "bottomRight": "Inferior Direita", + "watermarkOpacity": "Opacidade", + "watermarkSize": "Tamanho", + "theme": "Tema", + "galleryTheme": "Tema da Galeria", + "themeCustomization": "Customização do Tema", + "selectPreset": "Selecione um tema pronto", + "colors": "Cores", + "primaryColor": "Cor Primária", + "secondaryColor": "Cor Secundária", + "accentColor": "Cor de Destaque", + "backgroundColor": "Cor de Fundo", + "textColor": "Cor do Texto", + "colorMode": "Modo de Cor", + "colorModeLight": "Claro", + "colorModeDark": "Escuro", + "colorModeAuto": "Automático", + "colorModeHelp": "Segue a preferência do sistema do visitante.", + "customCSS": "CSS Personalizado", + "preview": "Prévia", + "previewInNewTab": "Abrir prévia em nova aba", + "reset": "Redefinir", + "saveChanges": "Salvar Alterações", + "applyLivePreview": "Aplicar alterações imediatamente (Prévia ao Vivo)", + "eventSpecificThemes": "Temas Específicos por Evento", + "eventThemesInfo": "Você pode sobrepor estas configurações para eventos individuais.", + "themePresets": "Temas Prontos", + "galleryLayout": "Layout da Galeria", + "layoutDescriptions": { + "grid": "Grade clássica com tamanhos consistentes", + "masonry": "Estilo Pinterest com alturas variadas", + "carousel": "Slideshow em tela cheia", + "timeline": "Fotos organizadas por data", + "hero": "Destaque no topo e grade abaixo", + "mosaic": "Layout artístico com tamanhos mistos", + "justified": "Layout em linhas preservando proporções", + "gallery-premium": "Tema claro elegante com Hero e Masonry (Beta)", + "gallery-story": "Tema escuro cinematográfico com seções (Beta)" + }, + "layoutSettings": "Configurações de Layout", + "photoSpacing": "Espaçamento entre Fotos", + "spacing": { + "tight": "Justo", + "normal": "Normal", + "relaxed": "Espaçado" + }, + "photoAnimation": "Animação das Fotos", + "animation": { + "none": "Nenhuma", + "fade": "Fade", + "scale": "Escala", + "slide": "Deslizar" + }, + "columns": "Colunas", + "mobile": "Celular", + "tablet": "Tablet", + "desktop": "Desktop", + "enableAutoplay": "Ativar Autoplay", + "autoplayInterval": "Intervalo do Autoplay (segundos)", + "groupPhotosBy": "Agrupar Fotos Por", + "grouping": { + "day": "Dia", + "week": "Semana", + "month": "Mês" + }, + "masonryMode": "Modo de Layout", + "masonryModeOptions": { + "columns": "Colunas (Estilo Pinterest)", + "rows": "Linhas (Justificado customizado)", + "flickr": "Flickr (Justificado clássico)", + "justified": "Google Photos (Algoritmo Knuth-Plass)" + }, + "masonryModeHint": { + "columns": "Colunas verticais com alturas variadas", + "rows": "Layout justificado baseado em linhas", + "flickr": "Algoritmo de layout justificado do Flickr", + "justified": "Linhas estilo Google Photos para quebras ideais" + }, + "targetRowHeight": "Altura Alvo da Linha", + "targetRowHeightHint": "Altura em pixels (150-400). As fotos escalam para caber.", + "lastRowBehavior": "Alinhamento da Última Linha", + "lastRowOptions": { + "left": "Alinhado à esquerda", + "center": "Centralizado", + "justify": "Justificado (esticar)" + }, + "showHeroSection": "Mostrar Seção Hero", + "showHeroSectionHint": "Exibe uma imagem de destaque acima da galeria", + "heroHeight": "Altura da Seção Hero", + "heroHeightOptions": { + "small": "Pequena (40-50%)", + "medium": "Média (50-70%)", + "large": "Grande (60-80%)" + }, + "heroOverlayOpacity": "Opacidade da Sobreposição Hero", + "heroOverlayHint": "Escurece a imagem de destaque para melhorar o contraste do texto", + "typographyAndStyle": "Tipografia e Estilo", + "bodyFont": "Fonte do Corpo", + "headingFont": "Fonte de Títulos", + "sameAsBody": "Igual ao corpo", + "fontSize": "Tamanho da Fonte", + "fontSizes": { + "small": "Pequeno", + "normal": "Normal", + "large": "Grande" + }, + "borderRadius": "Arredondamento das Bordas", + "borderRadiusOptions": { + "none": "Nenhum", + "small": "Pequeno", + "medium": "Médio", + "large": "Grande" + }, + "shadowStyle": "Estilo de Sombra", + "shadowOptions": { + "none": "Nenhuma", + "subtle": "Sutil", + "normal": "Normal", + "dramatic": "Dramática" + }, + "backgroundPattern": "Fundo", + "backgroundOptions": { + "none": "Nenhum", + "dots": "Pontos", + "grid": "Grade", + "waves": "Ondas" + }, + "customCSSHelp": "Avançado: Adicione CSS personalizado para ajustar a aparência", + "cssInstructions": { + "title": "Como usar CSS Personalizado", + "variables": "Variáveis CSS do Tema", + "variablesDesc": "Use estas variáveis para combinar com seus temas:", + "layouts": "Layouts de Galeria Customizados", + "layoutsDesc": "Alvo de elementos com estes seletores:", + "glassEffect": "Efeito Glassmorphism", + "glassEffectDesc": "Crie efeitos modernos de vidro:", + "tip": "Dica", + "tipText": "Use Modelos CSS em Configurações > Modelos CSS para designs prontos." + }, + "resetToDefault": "Redefinir para o Padrão", + "applyTheme": "Aplicar Tema", + "customTheme": "Tema Personalizado", + "saveTheme": "Salvar Tema", + "previewLayout": "Visualizar Layout", + "livePreview": "Prévia ao Vivo", + "heroPlaceholderText": "A foto de destaque do seu evento aparecerá aqui", + "whiteLabel": "White Label", + "hidePoweredBy": "Ocultar selo \"Powered by PicPeak\"", + "hidePoweredByHelp": "Remove a atribuição do PicPeak do rodapé da galeria", + "logoCustomization": "Customização da Logo", + "changeLogo": "Alterar Logo", + "logoSizeSmall": "Pequena (32px)", + "logoSizeMedium": "Média (48px)", + "logoSizeLarge": "Grande (64px)", + "logoSizeXLarge": "Extra Grande (96px)", + "logoSizeCustom": "Customizado", + "logoMaxHeight": "Altura Máxima (pixels)", + "logoMaxHeightHelp": "Define uma altura máxima para a logo (20-200 px)", + "logoPosition": "Posição da Logo no Cabeçalho", + "positionLeft": "Esquerda", + "positionCenter": "Centro", + "positionRight": "Direita", + "logoDisplayMode": "Modo de Exibição", + "logoOnly": "Apenas Logo", + "textOnly": "Apenas Nome da Empresa", + "logoAndText": "Logo e Nome da Empresa", + "showLogoInHeader": "Mostrar logo no cabeçalho", + "showLogoInHeaderHelp": "Exibe a logo na barra principal superior", + "showLogoInHero": "Mostrar logo na seção Hero", + "showLogoInHeroHelp": "Exibe a logo na seção de destaque", + "headerStyle": "Estilo do Cabeçalho", + "headerStyleDescription": "Escolha como o topo da galeria aparece.", + "headerStyleOptions": { + "hero": "Imagem de Destaque (Hero)", + "standard": "Banner Padrão", + "minimal": "Minimalista", + "none": "Sem Cabeçalho" + }, + "headerStyleDescriptions": { + "hero": "Imagem de tela cheia com info sobreposta", + "standard": "Banner clássico com detalhes do evento", + "minimal": "Cabeçalho compacto com o essencial", + "none": "Oculta o cabeçalho completamente" + }, + "heroDividerStyle": "Estilo do Divisor", + "heroDividerDescription": "Transição entre a imagem de destaque e o conteúdo.", + "dividerOptions": { + "wave": "Onda", + "straight": "Reto", + "angle": "Ângulo", + "curve": "Curva", + "none": "Nenhum" + }, + "controlsStyle": "Estilo dos Controles", + "controlsStyleDescription": "Escolha como filtros e controles são exibidos.", + "controlsStyleOptions": { + "classic": "Clássico", + "sidebar": "Barra Lateral" + }, + "controlsStyleDescriptions": { + "classic": "Barra de filtros abaixo do cabeçalho", + "sidebar": "Botão de menu abre lateral com filtros" + }, + "controlsStyleHeroWarning": "A barra lateral é recomendada para cabeçalhos Hero." + }, + "admin": { + "title": "Painel Admin", + "welcome": "Bem-vindo de volta, {{name}}", + "recentActivity": "Atividade Recente", + "systemStatus": "Status do Sistema", + "totalEvents": "Total de Eventos", + "activeGalleries": "Galerias Ativas", + "storageUsed": "Espaço Utilizado", + "totalPhotos": "Total de Fotos", + "storagePercent": "{{percent}}% do limite de {{limit}}", + "storageSoftLimitConfigured": "Limite configurado: {{limit}}", + "storageSoftLimitRecommended": "Limite sugerido: {{limit}}", + "version": "Versão", + "archivedEvents": "Eventos Arquivados", + "systemHealth": "Saúde do Sistema", + "health": { + "healthy": "Saudável", + "warning": "Aviso", + "error": "Erro", + "checking": "Verificando..." + }, + "updates": { + "available": "Atualização Disponível", + "newVersion": "Versão {{version}} disponível", + "currentVersion": "Atual: {{version}}", + "channel": "Canal: {{channel}}", + "channelStable": "Estável", + "channelBeta": "Beta", + "beta": "BETA", + "viewReleaseNotes": "Ver Notas de Lançamento", + "updateAvailableShort": "v{{version}} disponível", + "checkForUpdates": "Verificar Atualizações", + "upToDate": "Sistema atualizado", + "lastChecked": "Última verificação: {{time}}", + "updateNow": "Atualizar Agora", + "updateDialog": { + "title": "Atualizar PicPeak", + "detectedEnv": "Ambiente Detectado", + "beforeUpdating": "Antes de atualizar:", + "updateCommands": "Comandos de Atualização:", + "afterUpdating": "Após atualizar:", + "copyAllCommands": "Copiar Todos os Comandos", + "completeChecklist": "Complete a lista antes de atualizar", + "error": "Falha ao carregar instruções de atualização" + } + }, + "notifications": "Notificações", + "viewAllNotifications": "Ver todas as notificações", + "noNotifications": "Sem novas notificações", + "markAllRead": "Marcar tudo como lido", + "clearAll": "Limpar tudo", + "close": "Fechar", + "noNotificationsMessage": "Nenhuma notificação", + "notificationMessages": { + "eventCreated": "Novo evento \"{{eventName}}\" criado", + "eventArchived": "Evento \"{{eventName}}\" arquivado", + "eventUpdated": "Evento \"{{eventName}}\" atualizado", + "eventDeleted": "Evento \"{{eventName}}\" excluído", + "photosUploaded": "{{count}} fotos enviadas para \"{{eventName}}\"", + "photoDeleted": "Foto excluída de \"{{eventName}}\"", + "photosBulkDeleted": "{{count}} fotos excluídas de \"{{eventName}}\"", + "eventExpiring": "O evento \"{{eventName}}\" expira em {{days}} dias", + "eventExpired": "O evento \"{{eventName}}\" expirou", + "passwordChanged": "Senha alterada por {{actorName}}", + "passwordReset": "Senha redefinida para \"{{eventName}}\"", + "settingsUpdated": "Configurações de {{type}} atualizadas", + "emailTemplateUpdated": "Modelo de e-mail \"{{template}}\" atualizado", + "bulkDownload": "{{count}} fotos baixadas de \"{{eventName}}\"", + "storageWarning": "Uso de armazenamento em {{percentage}}%", + "adminLogout": "Admin {{actorName}} saiu do sistema", + "categoryCreated": "Categoria \"{{name}}\" criada para \"{{eventName}}\"", + "categoryUpdated": "Categoria \"{{name}}\" atualizada para \"{{eventName}}\"", + "categoryDeleted": "Categoria \"{{name}}\" excluída de \"{{eventName}}\"", + "cmsPageUpdated": "Página CMS \"{{slug}}\" atualizada", + "emailConfigUpdated": "Configuração de e-mail atualizada", + "faviconUploaded": "Favicon enviado", + "brandingUpdated": "Configurações de marca atualizadas", + "generalSettingsUpdated": "Configurações gerais atualizadas", + "securitySettingsUpdated": "Configurações de segurança atualizadas", + "themeUpdated": "Configurações de tema atualizadas", + "archiveDownloaded": "Arquivo baixado para \"{{eventName}}\"", + "archiveDeleted": "Arquivo excluído de \"{{eventName}}\"", + "archiveRestored": "Arquivo restaurado para \"{{eventName}}\"", + "systemActivity": "Atividade do sistema: {{type}}", + "adminProfileUpdated": "Perfil admin atualizado por {{actorName}}" + }, + "notificationToasts": { + "markedAllRead": "Todas as notificações marcadas como lidas", + "clearedAll": "Limpas {{count}} notificações", + "profileUpdated": "Perfil admin atualizado" + }, + "markAsRead": "Marcar como lida", + "markAllAsRead": "Marcar todas como lidas", + "notificationSettings": "Configurações de Notificação", + "changePassword": "Alterar Senha", + "darkMode": "Alternar para modo escuro", + "lightMode": "Alternar para modo claro", + "accountSettings": { + "title": "Conta Admin", + "description": "Atualize as credenciais de acesso ao PicPeak.", + "username": "Usuário", + "usernamePlaceholder": "Admin", + "email": "E-mail", + "emailPlaceholder": "admin@exemplo.com", + "updateButton": "Atualizar perfil" + }, + "profileUpdateError": "Não foi possível atualizar o perfil. Tente novamente.", + "loadingDashboard": "Carregando painel...", + "activeEvents": "Eventos Ativos", + "expiringSoon": "Expirando em Breve", + "next7Days": "Próximos 7 dias", + "downloads": "Downloads", + "percentFromLastWeek": "{{percent}}% em relação à última semana", + "dashboardSubtitle": "Bem-vindo! Confira o que está acontecendo nas suas galerias.", + "eventsExpiringSoon": "Eventos Expirando em Breve", + "noEventsExpiring": "Nenhum evento expira nos próximos 7 dias", + "daysLeft": "{{count}} dia restante", + "daysLeft_plural": "{{count}} dias restantes", + "viewAllExpiringEvents": "Ver todos os {{count}} eventos expirando", + "noRecentActivity": "Nenhuma atividade recente", + "viewAllActivity": "Ver toda a atividade", + "quickActions": "Ações Rápidas", + "viewArchives": "Ver Arquivos", + "analytics": "Análises", + "activities": { + "event_created": "Novo evento criado: {{eventName}}", + "photos_uploaded": "{{count}} fotos enviadas para {{eventName}}", + "event_archived": "Evento arquivado: {{eventName}}", + "archive_restored": "Arquivo restaurado: {{eventName}}", + "archive_deleted": "Arquivo excluído: {{eventName}}", + "archive_downloaded": "Arquivo baixado: {{eventName}}", + "email_config_updated": "Configuração de e-mail atualizada", + "email_template_updated": "Modelo de e-mail atualizado: {{template}}", + "branding_updated": "Identidade visual atualizada", + "theme_updated": "Configurações de tema atualizadas", + "bulk_download": "{{count}} fotos baixadas de {{eventName}}", + "gallery_password_entry": "Senha inserida para {{eventName}}", + "expiration_warning_viewed": "Aviso de expiração visualizado para {{eventName}}", + "feedback_settings_updated": "Configurações de feedback atualizadas", + "feedback_moderated": "Feedback moderado", + "feedback_deleted": "Feedback excluído", + "photo_like": "Foto curtida em {{eventName}}", + "photo_favorite": "Foto favoritada em {{eventName}}", + "photo_rating": "Foto avaliada em {{eventName}}", + "photo_comment": "Foto comentada em {{eventName}}", + "guest_feedback_like": "Convidado curtiu uma foto em {{eventName}}", + "guest_feedback_favorite": "Convidado favoritou uma foto em {{eventName}}", + "guest_feedback_rating": "Convidado avaliou uma foto em {{eventName}}", + "guest_feedback_comment": "Convidado comentou em uma foto em {{eventName}}", + "word_filter_added": "Filtro de palavras adicionado", + "external_import_completed": "Importação de mídia externa concluída ({{imported}} importadas, {{skipped}} ignoradas)", + "bulk_archive_completed": "Arquivamento em lote concluído", + "event_activated": "Evento ativado: {{eventName}}", + "event_deactivated": "Evento desativado: {{eventName}}", + "photo_deleted": "Foto excluída de {{eventName}}", + "photos_bulk_deleted": "{{count}} fotos excluídas de {{eventName}}", + "settings_updated": "Configurações atualizadas", + "event_updated": "Evento atualizado: {{eventName}}", + "event_renamed": "Evento renomeado: {{eventName}}", + "event_deleted": "Evento excluído: {{eventName}}", + "password_changed": "Senha alterada", + "email_resent": "E-mail de criação reenviado para: {{eventName}}", + "category_created": "Categoria criada: {{categoryName}}", + "category_updated": "Categoria atualizada: {{categoryName}}", + "category_deleted": "Categoria excluída: {{categoryName}}", + "general_settings_updated": "Configurações gerais atualizadas", + "favicon_uploaded": "Favicon enviado", + "analytics_settings_updated": "Configurações de análise atualizadas", + "cms_page_updated": "Página CMS atualizada: {{page}}", + "security_settings_updated": "Configurações de segurança atualizadas", + "password_reset": "Senha redefinida para: {{eventName}}", + "admin_logout": "Admin {{actorName}} saiu", + "system_activity": "Atividade do sistema: {{type}}", + "unknown": "Atividade desconhecida" + }, + "userManagement": "Gerenciamento de Usuários", + "inviteUser": "Convidar Usuário", + "pendingInvitations": "Convites Pendentes", + "roles": { + "super_admin": "Super Admin", + "admin": "Admin", + "editor": "Editor", + "viewer": "Visualizador" + }, + "userStatus": { + "active": "Ativo", + "inactive": "Inativo" + }, + "inviteForm": { + "email": "Endereço de E-mail", + "role": "Função", + "send": "Enviar Convite" + }, + "acceptInvite": { + "title": "Aceitar Convite de Admin", + "username": "Escolha um Usuário", + "password": "Crie uma Senha", + "submit": "Criar Conta" + } + }, + "permissions": { + "insufficient": "Você não tem permissão para realizar esta ação", + "viewOnly": "Apenas Visualização" + }, + "acceptInvitation": { + "title": "Aceitar Convite", + "subtitle": "Crie sua conta administrativa", + "validating": "Validando convite...", + "invalidToken": "Convite Inválido", + "invalidTokenMessage": "Este link de convite é inválido ou expirou. Contate o administrador.", + "expiredToken": "Convite Expirado", + "expiredTokenMessage": "Este convite expirou. Solicite um novo convite.", + "alreadyUsed": "Convite Já Utilizado", + "alreadyUsedMessage": "Este convite já foi usado para criar uma conta.", + "invitedAs": "Você foi convidado como", + "expiresAt": "O convite expira em", + "usernameLabel": "Usuário", + "usernamePlaceholder": "Escolha um nome de usuário", + "usernameHelp": "3-50 caracteres, apenas letras, números, sublinhados e hífens", + "passwordLabel": "Senha", + "passwordPlaceholder": "Crie uma senha forte", + "confirmPasswordLabel": "Confirmar Senha", + "confirmPasswordPlaceholder": "Confirme sua senha", + "passwordStrength": "Força da senha", + "requirements": { + "title": "Requisitos da senha:", + "minLength": "Pelo menos 12 caracteres", + "uppercase": "Pelo menos uma letra maiúscula", + "lowercase": "Pelo menos uma letra minúscula", + "number": "Pelo menos um número", + "special": "Pelo menos um caractere especial" + }, + "strength": { + "weak": "Fraca", + "fair": "Razoável", + "good": "Boa", + "strong": "Forte" + }, + "createAccount": "Criar Conta", + "creating": "Criando conta...", + "success": "Conta Criada!", + "successMessage": "Sua conta foi criada com sucesso. Você já pode fazer login.", + "redirecting": "Redirecionando para login em {{seconds}}s...", + "goToLogin": "Ir para Login", + "contactAdminMessage": "Entre em contato com o administrador para solicitar um novo convite.", + "passwordsMatch": "As senhas coincidem", + "alreadyHaveAccount": "Já possui uma conta?", + "signIn": "Entrar", + "errors": { + "usernameRequired": "Usuário é obrigatório", + "usernameTooShort": "Usuário deve ter pelo menos 3 caracteres", + "usernameTooLong": "Usuário deve ter no máximo 50 caracteres", + "usernameInvalid": "O usuário só pode conter letras, números, sublinhados e hífens", + "passwordRequired": "Senha é obrigatória", + "passwordTooShort": "A senha deve ter pelo menos 12 caracteres", + "passwordsDoNotMatch": "As senhas não coincidem", + "confirmPasswordRequired": "Confirme sua senha", + "usernameTaken": "Este nome de usuário já está em uso", + "emailTaken": "Uma conta com este e-mail já existe", + "genericError": "Falha ao criar conta. Tente novamente." + } + }, + "errors": { + "notFound": "Não Encontrado", + "galleryNotFound": "Galeria Não Encontrada", + "galleryNotFoundMessage": "Esta galeria não existe ou foi removida.", + "galleryArchived": "Galeria Arquivada", + "galleryArchivedMessage": "Esta galeria foi arquivada e não está mais acessível. Contate o organizador se precisar de acesso.", + "unauthorized": "Não autorizado", + "forbidden": "Proibido", + "serverError": "Erro no Servidor", + "somethingWentWrong": "Algo deu errado", + "tryAgainLater": "Tente novamente mais tarde", + "refreshPage": "Atualizar Página", + "oopsSomethingWentWrong": "Ops! Algo deu errado", + "unexpectedError": "Encontramos um erro inesperado. Não se preocupe, seus dados estão seguros.", + "goToHomepage": "Ir para Página Inicial", + "errorDetails": "Detalhes do Erro", + "requiredFields": "Preencha todos os campos obrigatórios", + "enterTestEmail": "Insira um endereço de e-mail para teste", + "failedToCreateEvent": "Falha ao criar evento", + "eventCreationFailed": "Criação de evento falhou", + "networkError": "Erro de rede. Verifique sua conexão e tente novamente.", + "sessionExpired": "Sessão expirada. Faça login novamente." + }, + "validation": { + "eventNameRequired": "O nome do evento é obrigatório", + "hostEmailRequired": "O e-mail do cliente é obrigatório", + "hostNameRequired": "O nome do cliente é obrigatório", + "adminEmailRequired": "O e-mail do admin é obrigatório", + "invalidEmailFormat": "Formato de e-mail inválido", + "passwordRequired": "Senha é obrigatória", + "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", + "passwordsDoNotMatch": "As senhas não coincidem", + "passwordSecurityRequirements": "A senha não atende aos requisitos de segurança", + "expirationRange": "A expiração deve ser entre 1 e 365 dias" + }, + "legal": { + "impressum": "Aviso Legal", + "datenschutz": "Política de Privacidade", + "termsOfService": "Termos de Serviço", + "cookiePolicy": "Política de Cookies" + }, + "toast": { + "saveSuccess": "Alterações salvas com sucesso", + "saveError": "Falha ao salvar alterações", + "deleteSuccess": "Excluído com sucesso", + "deleteError": "Falha ao excluir", + "uploadSuccess": "Envio concluído com sucesso", + "uploadError": "Falha no envio", + "loginSuccess": "Login realizado com sucesso", + "loginError": "Falha no login", + "passwordChanged": "Senha alterada com sucesso", + "linkCopied": "Link copiado para a área de transferência", + "eventCreated": "Evento criado com sucesso", + "eventUpdated": "Evento atualizado com sucesso", + "eventArchived": "Evento arquivado com sucesso", + "settingsSaved": "Configurações salvas com sucesso", + "themeUpdated": "Tema atualizado com sucesso", + "brandingUpdated": "Identidade visual atualizada com sucesso", + "categoryAdded": "Categoria adicionada com sucesso", + "categoryDeleted": "Categoria excluída com sucesso", + "categoryUpdated": "Categoria atualizada com sucesso", + "emailConfigSaved": "Configuração de e-mail salva com sucesso", + "testEmailSent": "E-mail de teste enviado com sucesso", + "pageUpdated": "Página atualizada com sucesso", + "archiveRestored": "Arquivo restaurado com sucesso", + "archiveDeleted": "Arquivo excluído permanentemente" + }, + "email": { + "title": "Configuração de E-mail", + "subtitle": "Configure os ajustes de e-mail para notificações", + "loadingSettings": "Carregando configurações de e-mail...", + "smtpConfiguration": "Configuração SMTP", + "smtpHost": "Servidor SMTP", + "smtpHostHelp": "O hostname do seu servidor de e-mail", + "smtpPort": "Porta SMTP", + "smtpPortHelp": "Geralmente 587 (TLS), 465 (SSL) ou 25", + "smtpSecure": "Usar SSL/TLS", + "smtpSecureHelp": "Ative para transmissão segura de e-mail", + "smtpUsername": "Usuário SMTP", + "smtpUsernameHelp": "Seu usuário da conta de e-mail", + "smtpPassword": "Senha SMTP", + "smtpPasswordHelp": "Sua senha da conta de e-mail", + "fromDetails": "Detalhes do Remetente", + "fromEmail": "E-mail de Origem", + "fromEmailHelp": "Endereço que aparecerá como remetente", + "fromName": "Nome do Remetente", + "fromNameHelp": "Nome que aparecerá como remetente", + "testConfiguration": "Testar Configuração", + "testEmail": "E-mail de Teste", + "testEmailHelp": "Envie um e-mail para verificar as configurações", + "sendTestEmail": "Enviar E-mail de Teste", + "saveConfiguration": "Salvar Configuração", + "emailTemplates": "Modelos de E-mail", + "templateVariables": "Variáveis Disponíveis", + "previewTemplate": "Visualizar Modelo", + "smtpSettings": "Configurações SMTP", + "testEmailSuccess": "E-mail de teste enviado com sucesso", + "saveSmtpSettings": "Salvar Ajustes SMTP", + "testEmailSection": "E-mail de Teste", + "beforeTesting": "Antes de testar:", + "saveSmtpFirst": "Salve suas configurações SMTP primeiro", + "ensureFirewall": "Garanta que seu firewall permite saída SMTP", + "gmailAppPassword": "Para Gmail, use uma senha de aplicativo", + "testEmailAddressLabel": "Endereço de E-mail de Teste", + "sendTestEmailButton": "Enviar E-mail de Teste", + "commonSmtpSettings": "Configurações SMTP comuns:", + "editTemplate": "Editar Modelo", + "templateName": "Nome do Modelo", + "subjectLine": "Linha de Assunto", + "emailBody": "Corpo do E-mail", + "preview": "Visualizar", + "saveChanges": "Salvar Alterações", + "templates": "Modelos", + "variableHelp": "Use estas variáveis no seu modelo. Elas serão substituídas por valores reais no envio.", + "port": "Porta", + "security": "Segurança", + "username": "Usuário", + "password": "Senha", + "enterPassword": "Digite a senha", + "required": "obrigatório", + "ignoreSslErrors": "Ignorar erros de certificado SSL/TLS", + "ignoreSslWarning": "Aviso: Desabilitar a verificação torna a conexão vulnerável. Ative apenas se confiar no servidor." + }, + "cms": { + "title": "Páginas CMS", + "subtitle": "Gerenciar páginas legais e informativas", + "loadingPages": "Carregando páginas...", + "pages": "Páginas", + "previewLinks": "Links de Prévia", + "englishVersion": "Versão em Inglês", + "germanVersion": "Versão em Alemão", + "editPage": "Editar {{page}}", + "pageTitle": "Título da Página", + "pageContent": "Conteúdo da Página", + "pageTitlePlaceholder": "Digite o título da página...", + "saveChanges": "Salvar Alterações", + "lastUpdated": "Última atualização:", + "impressum": "Aviso Legal", + "datenschutz": "Política de Privacidade", + "pageUpdated": "Página atualizada com sucesso" + }, + "eventTypes": { + "title": "Tipos de Evento", + "subtitle": "Personalize os tipos de evento e seus temas padrão", + "loading": "Carregando tipos de evento...", + "loadError": "Falha ao carregar tipos de evento", + "createNew": "Novo Tipo de Evento", + "edit": "Editar Tipo de Evento", + "created": "Tipo de evento criado com sucesso", + "updated": "Tipo de evento atualizado com sucesso", + "deleted": "Tipo de evento excluído com sucesso", + "createError": "Falha ao criar tipo de evento", + "updateError": "Falha ao atualizar tipo de evento", + "deleteError": "Falha ao excluir tipo de evento", + "searchPlaceholder": "Buscar tipos de evento...", + "showInactive": "Mostrar inativos", + "noResults": "Nenhum tipo de evento encontrado", + "empty": "Nenhum tipo de evento cadastrado", + "system": "Sistema", + "table": { + "type": "Tipo", + "slugPrefix": "Prefixo de URL", + "theme": "Tema Padrão", + "status": "Status", + "actions": "Ações" + }, + "form": { + "name": "Nome de Exibição", + "namePlaceholder": "ex: Ensaio de Família", + "slugPrefix": "Prefixo de URL", + "slugPrefixPlaceholder": "ex: familia", + "slugPreview": "Exemplo de URL:", + "emoji": "Ícone", + "themePreset": "Tema Padrão", + "isActive": "Ativo (visível na criação de eventos)" + }, + "validation": { + "slugFormat": "Apenas letras, números e hífens permitidos" + }, + "slugInfo": { + "title": "Informação do Prefixo de URL:", + "description": "O prefixo é usado para gerar a URL da galeria. Ex: um tipo \"família\" criará URLs como familia-silva-2025." + }, + "deleteConfirm": { + "title": "Excluir Tipo de Evento", + "message": "Tem certeza que deseja excluir", + "warning": "Esta ação não pode ser desfeita. Certifique-se de que nenhum evento usa este tipo." + } + }, + "backup": { + "external": { + "warning": { + "title": "Mídia externa excluída", + "body": "Esta instalação referencia fotos em /external-media. Os arquivos originais estão excluídos dos backups. Miniaturas e banco de dados continuam incluídos." + } + }, + "title": "Gerenciamento de Backup", + "subtitle": "Gerencie backups do sistema, configure backups automáticos e restaure dados.", + "tabs": { + "dashboard": "Painel", + "configuration": "Configuração", + "history": "Histórico de Backups", + "restore": "Restaurar" + }, + "status": { + "inProgress": "Backup em progresso...", + "lastBackup": "Último backup", + "noBackups": "Nenhum backup encontrado", + "nextBackup": "Próximo backup", + "notScheduled": "Não agendado", + "enabled": "Ativado", + "disabled": "Desativado" + }, + "actions": { + "runBackupNow": "Executar Backup Agora", + "starting": "Iniciando...", + "running": "Executando...", + "testConnection": "Testar Conexão", + "save": "Salvar Configuração", + "delete": "Excluir", + "view": "Ver Detalhes", + "download": "Baixar", + "refresh": "Atualizar" + }, + "dashboard": { + "backupHealth": "Saúde do Backup", + "healthStatus": { + "excellent": "Excelente", + "good": "Boa", + "warning": "Aviso", + "critical": "Crítica" + }, + "health": { + "title": "Saúde do Backup" + }, + "healthMessages": { + "noBackups": "Nenhum backup encontrado", + "lastBackupFailed": "O último backup falhou", + "upToDate": "Backup atualizado", + "recent": "Backup recente", + "gettingOld": "Backup ficando antigo", + "outdated": "Backup desatualizado" + }, + "stats": { + "totalBackups": "Total de Backups", + "backupSize": "Tamanho do Backup", + "lastDuration": "Última Duração", + "backupStatus": "Status do Backup", + "last": "Último", + "files": "arquivos", + "minutes": "{{count}}m", + "active": "Ativo", + "inactive": "Inativo", + "noBackupsYet": "Ainda sem backups" + }, + "recentActivity": { + "title": "Atividade Recente de Backup" + }, + "notConfigured": { + "title": "Backup Não Configurado", + "message": "Configure as definições de backup na aba Configuração antes de executar." + }, + "actions": { + "runBackupNow": "Executar Backup Agora", + "running": "Executando..." + }, + "coverage": { + "title": "Cobertura do Backup", + "database": "Banco de Dados", + "photos": "Fotos", + "archives": "Arquivos", + "systemFiles": "Arquivos do Sistema", + "included": "Incluído", + "excluded": "Excluído", + "optional": "Opcional" + }, + "storageDestination": "Destino do Armazenamento", + "nextScheduledBackup": "Próximo Backup Agendado", + "backupType": "Backup {{type}}", + "noDestinationSet": "Nenhum destino definido" + }, + "configuration": { + "enableBackup": "Ativar Backups Automáticos", + "enableBackupHelp": "Criar backups automaticamente conforme o agendamento", + "destinationType": "Destino do Backup", + "destinationTypes": { + "local": { + "name": "Armazenamento Local", + "description": "Armazena no sistema de arquivos do servidor local" + }, + "rsync": { + "name": "Servidor Remoto (Rsync)", + "description": "Sincroniza backups para um servidor remoto via SSH" + }, + "s3": { + "name": "Armazenamento S3 Compatível", + "description": "Armazena no Amazon S3 ou storage compatível" + } + }, + "fields": { + "destinationPath": "Caminho de Destino", + "destinationPathHelp": "Diretório local para armazenar os backups", + "destinationPathPlaceholder": "/caminho/para/diretorio/de/backup", + "rsyncHost": "Host Remoto", + "rsyncHostHelp": "Hostname ou IP via SSH", + "rsyncHostPlaceholder": "backup.exemplo.com", + "rsyncUser": "Usuário SSH", + "rsyncUserHelp": "Usuário para conexão SSH", + "rsyncUserPlaceholder": "usuario-backup", + "rsyncPath": "Caminho Remoto", + "rsyncPathHelp": "Diretório no servidor remoto", + "rsyncPathPlaceholder": "/home/backup/fotos", + "rsyncSshKey": "Chave Privada SSH", + "rsyncSshKeyHelp": "Chave SSH para autenticação (opcional)", + "rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----", + "s3Endpoint": "Endpoint S3", + "s3EndpointHelp": "URL da API S3 (ex: s3.amazonaws.com)", + "s3EndpointPlaceholder": "https://s3.amazonaws.com", + "s3Bucket": "Nome do Bucket", + "s3BucketHelp": "Bucket S3 para os backups", + "s3BucketPlaceholder": "meu-bucket-de-backup", + "s3AccessKey": "ID da Chave de Acesso", + "s3AccessKeyHelp": "ID da chave AWS/S3", + "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXEMPLO", + "s3SecretKey": "Chave de Acesso Secreta", + "s3SecretKeyHelp": "Chave secreta AWS/S3", + "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXEMPLO", + "s3Region": "Região", + "s3RegionHelp": "Região S3 (ex: us-east-1)", + "s3RegionPlaceholder": "us-east-1" + }, + "schedule": { + "title": "Agendamento de Backup", + "scheduleType": "Tipo de Agendamento", + "scheduleOptions": { + "hourly": "A cada hora", + "daily": "Diário", + "weekly": "Semanal", + "custom": "Expressão cron personalizada" + }, + "options": { + "hourly": "A cada hora", + "daily": "Diário", + "weekly": "Semanal", + "custom": "Expressão cron personalizada" + }, + "customCron": "Expressão Cron", + "customCronHelp": "Insira uma expressão cron válida (ex: 0 3 * * *)", + "retention": "Período de Retenção", + "retentionDays": "Manter backups por", + "retentionHelp": "dias (backups antigos serão excluídos automaticamente)" + }, + "whatToBackup": { + "title": "O que incluir no Backup", + "database": "Banco de Dados", + "databaseHelp": "Todos os eventos, configurações e dados", + "photos": "Fotos", + "photosHelp": "Todas as fotos originais nas galerias ativas", + "archives": "Arquivos", + "archivesHelp": "Arquivos ZIP de eventos arquivados", + "thumbnails": "Miniaturas", + "thumbnailsHelp": "Imagens de prévia geradas (podem ser recriadas)", + "tempFiles": "Arquivos Temporários", + "tempFilesHelp": "Arquivos temporários de upload e processamento" + }, + "advancedOptions": { + "title": "Opções Avançadas", + "compression": "Ativar Compressão", + "compressionHelp": "Comprime os arquivos para economizar espaço", + "encryption": "Ativar Criptografia", + "encryptionHelp": "Criptografa os backups para maior segurança", + "encryptionPassphrase": "Frase de Senha da Criptografia", + "encryptionPassphraseHelp": "Senha forte para criptografar os backups", + "confirmPassphrase": "Confirmar Frase de Senha", + "passphrasesDontMatch": "As senhas não coincidem" + }, + "validation": { + "requiredFields": "Preencha todos os campos obrigatórios", + "invalidCron": "Expressão cron inválida", + "connectionTestFailed": "Teste de conexão falhou", + "connectionTestSuccess": "Teste de conexão bem-sucedido!" + }, + "messages": { + "requiredFields": "Preencha todos os campos obrigatórios", + "connectionSuccess": "Teste de conexão bem-sucedido!", + "connectionFailed": "Teste de conexão falhou" + }, + "testingConnection": "Testando conexão...", + "saveSettings": "Salvar Configuração", + "savingSettings": "Salvando..." + }, + "history": { + "searchPlaceholder": "Buscar backups...", + "allStatus": "Todos os Status", + "status": { + "completed": "Concluído", + "failed": "Falhou", + "running": "Executando", + "partial": "Parcial" + }, + "deleteConfirm": "Tem certeza que deseja excluir o backup de {{date}}?", + "noBackups": "Nenhum backup encontrado", + "tableHeaders": { + "date": "Data", + "type": "Tipo", + "status": "Status", + "size": "Tamanho", + "duration": "Duração", + "actions": "Ações" + }, + "columns": { + "status": "Status", + "dateTime": "Data e Hora", + "type": "Tipo", + "size": "Tamanho", + "duration": "Duração", + "actions": "Ações" + }, + "details": "Detalhes", + "statistics": "Estatísticas", + "errors": "Erros", + "backupDetails": { + "backupId": "ID do Backup", + "startTime": "Hora de Início", + "endTime": "Hora de Término", + "destination": "Destino", + "filesProcessed": "Arquivos Processados", + "totalSize": "Tamanho Total", + "compressionRatio": "Taxa de Compressão", + "errorLog": "Log de Erros", + "noErrors": "Nenhum erro ocorrido" + }, + "pagination": { + "showing": "Mostrando {{from}}-{{to}} de {{total}} backups", + "previous": "Anterior", + "next": "Próximo" + }, + "filter": { + "allStatus": "Todos os Status", + "completed": "Concluído", + "failed": "Falhou", + "running": "Executando", + "partial": "Parcial" + }, + "noBackupsFound": "Nenhum backup encontrado", + "backupsWillAppear": "Backups aparecerão aqui quando criados", + "messages": { + "deleteSuccess": "Backup excluído com sucesso" + }, + "details": { + "backupDetails": "Detalhes do Backup", + "destination": "Destino", + "started": "Iniciado", + "completed": "Concluído", + "contentBackedUp": "Conteúdo Incluído", + "errorDetails": "Detalhes do Erro", + "manifest": "Manifesto" + } + }, + "restore": { + "steps": { + "selectSource": "Selecionar Origem", + "chooseBackup": "Escolher Backup", + "restoreOptions": "Opções de Restauração", + "reviewConfirm": "Revisar e Confirmar", + "progress": "Progresso da Restauração" + }, + "source": { + "title": "Selecionar Origem do Backup", + "subtitle": "Escolha de onde restaurar o backup", + "local": { + "name": "Backup Local", + "description": "Restaurar do sistema de arquivos local" + }, + "s3": { + "name": "Armazenamento S3", + "description": "Restaurar de um bucket S3" + }, + "upload": { + "name": "Enviar Backup", + "description": "Fazer upload de um arquivo de backup", + "comingSoon": "Funcionalidade de upload disponível em breve" + }, + "configuration": { + "s3": "Configuração S3", + "endpoint": "URL do Endpoint S3", + "bucket": "Nome do Bucket", + "accessKey": "ID da Chave de Acesso", + "secretKey": "Chave de Acesso Secreta" + } + }, + "backup": { + "title": "Escolher Backup para Restaurar", + "subtitle": "Selecione entre os backups disponíveis", + "noBackupsFound": "Nenhum backup encontrado na origem selecionada", + "encrypted": "Backup Criptografado", + "encryptedMessage": "Você precisará da frase de senha para restaurar este backup.", + "enterPassphrase": "Digite a frase de senha da criptografia", + "at": "em" + }, + "restoreTypes": { + "full": { + "name": "Restauração Completa", + "description": "Restaura tudo: banco, fotos e arquivos", + "warning": "Isso substituirá todos os dados atuais" + }, + "database": { + "name": "Apenas Banco de Dados", + "description": "Restaura apenas as configurações, eventos e usuários", + "warning": "O banco de dados atual será substituído" + }, + "files": { + "name": "Apenas Arquivos", + "description": "Restaura apenas fotos e arquivos ZIP", + "warning": "Arquivos existentes podem ser sobrescritos" + }, + "selective": { + "name": "Restauração Seletiva", + "description": "Escolha itens específicos para restaurar", + "warning": "Apenas os itens selecionados serão restaurados" + } + }, + "options": { + "title": "Opções de Restauração", + "subtitle": "Escolha o que restaurar", + "additionalOptions": { + "title": "Opções Adicionais", + "skipPreBackup": "Pular Backup de Segurança", + "skipPreBackupHelp": "Por padrão, um backup é criado antes da restauração. Marque para pular.", + "force": "Forçar Restauração", + "forceHelp": "Ignora verificações de segurança (use com cautela)" + } + }, + "confirmation": { + "title": "Revisar e Confirmar", + "subtitle": "Verifique sua configuração de restauração", + "validation": { + "passed": "Validação Concluída", + "failed": "Validação Falhou", + "checking": "Validando configuração de restauração..." + }, + "spaceCheck": { + "title": "Espaço de Armazenamento", + "required": "Necessário", + "available": "Disponível", + "insufficient": "Espaço insuficiente em disco" + }, + "summary": { + "title": "Resumo da Restauração", + "source": "Origem", + "backupDate": "Data do Backup", + "restoreType": "Tipo de Restauração", + "preBackup": "Backup Prévio", + "enabled": "Ativado", + "skipped": "Pulado" + }, + "warning": { + "title": "Aviso Importante", + "message": "Esta operação substituirá dados existentes. Certifique-se de ter um backup recente. Esta ação não pode ser desfeita." + } + }, + "progress": { + "title": "Progresso da Restauração", + "inProgress": "Restauração em andamento...", + "completed": "Restauração concluída", + "overallProgress": "Progresso Geral", + "current": "Atual", + "statusDetails": "Detalhes do Status", + "restoreLogs": "Logs da Restauração", + "steps": { + "completed": "Concluído", + "running": "Executando", + "failed": "Falhou", + "pending": "Pendente" + }, + "success": { + "title": "Restauração Concluída com Sucesso", + "message": "Seus dados foram restaurados. Verifique se tudo está funcionando corretamente." + } + }, + "actions": { + "back": "Voltar", + "next": "Próximo", + "startRestore": "Iniciar Restauração", + "starting": "Iniciando...", + "validating": "Validando...", + "startNewRestore": "Iniciar Nova Restauração" + }, + "messages": { + "restoreStarted": "Restauração iniciada com sucesso" + } + }, + "messages": { + "backupStarted": "Backup iniciado com sucesso", + "backupFailed": "Falha ao iniciar backup", + "configUpdated": "Configuração de backup atualizada", + "configUpdateFailed": "Falha ao atualizar configuração", + "backupDeleted": "Backup excluído com sucesso", + "deleteFailed": "Falha ao excluir backup", + "testEmailSent": "Teste de conexão bem-sucedido!", + "testEmailFailed": "Teste de conexão falhou" + } + }, + "cssTemplates": { + "title": "Modelos CSS Personalizados", + "template": "Modelo", + "templateName": "Nome do Modelo", + "enableTemplate": "Ativar este modelo", + "enableHint": "Modelos ativados podem ser selecionados ao criar eventos", + "cssContent": "Conteúdo CSS", + "cssHint": "Use .gallery-page para aplicar estilos. Variáveis disponíveis: --gallery-bg, --gallery-text, --gallery-accent", + "securityNotice": "Aviso de Segurança", + "securityText": "O CSS é higienizado por segurança. URLs externas, @import e expressões JavaScript são bloqueados.", + "resetToDefault": "Redefinir para o Padrão", + "resetConfirm": "Redefinir este modelo? Suas alterações serão perdidas.", + "unsavedChanges": "Alterações não salvas", + "saveTemplate": "Salvar Modelo", + "lastUpdated": "Última atualização", + "saved": "Modelo salvo com sucesso", + "saveFailed": "Falha ao salvar modelo", + "sanitizationWarning": "Alguns padrões CSS foram bloqueados por segurança", + "reset": "Modelo redefinido para o padrão", + "resetFailed": "Falha ao redefinir modelo" + }, + "maintenance": { + "title": "Manutenção do Sistema", + "message": "Estamos realizando uma manutenção programada para melhorar nosso serviço. Voltaremos em breve.", + "expectedCompletion": "Previsão de conclusão:", + "checkBackLater": "Por favor, tente novamente mais tarde", + "urgentMatters": "Para assuntos urgentes, contate" + }, + "passwordChange": { + "title": "Alterar Senha", + "currentPassword": "Senha Atual", + "newPassword": "Nova Senha", + "confirmPassword": "Confirmar Nova Senha", + "currentPasswordPlaceholder": "Digite a senha atual", + "newPasswordPlaceholder": "Digite a nova senha", + "confirmPasswordPlaceholder": "Confirme a nova senha", + "requirements": "Requisitos da Senha:", + "minLength": "Pelo menos 6 caracteres", + "mustDiffer": "Deve ser diferente da senha atual", + "success": "Senha alterada com sucesso", + "failed": "Falha ao alterar senha", + "currentRequired": "Senha atual é obrigatória", + "newRequired": "Nova senha é obrigatória", + "minLengthError": "A senha deve ter pelo menos 6 caracteres", + "confirmRequired": "Confirme sua nova senha", + "noMatch": "As senhas não coincidem", + "mustBeDifferent": "A nova senha deve ser diferente da atual", + "cancel": "Cancelar" + }, + "mandatoryPasswordChange": { + "title": "Alteração de Senha Obrigatória", + "description": "Por motivos de segurança, você deve alterar sua senha antes de acessar o painel admin.", + "success": "Senha alterada com sucesso! Você já pode acessar o painel.", + "minLength": "Pelo menos 12 caracteres", + "mustContainUpperLower": "Deve conter letras maiúsculas e minúsculas", + "mustContainNumbers": "Deve conter números", + "mustContainSpecial": "Deve conter caracteres especiais (!@#$%^&*)", + "minLengthError": "A senha deve ter pelo menos 12 caracteres", + "mustContainLowercase": "A senha deve conter letras minúsculas", + "mustContainUppercase": "A senha deve conter letras maiúsculas", + "mustContainNumbersError": "A senha deve conter números", + "mustContainSpecialError": "A senha deve conter caracteres especiais" + }, + "offline": { + "backOnline": "De volta online", + "noConnection": "Sem conexão com a internet" + }, + "download": { + "downloading": "Baixando...", + "percentComplete": "% concluído" + }, + "passwordGenerator": { + "weak": "Fraca", + "fair": "Razoável", + "good": "Boa", + "strong": "Forte", + "generating": "Gerando...", + "generatePassword": "Gerar Senha", + "showSuggestions": "Mostrar sugestões de senha", + "moreOptions": "Mais Opções", + "suggestions": "Sugestões de Senha", + "characters": "caracteres", + "copyPassword": "Copiar senha", + "use": "Usar", + "pattern": "Padrão:", + "patternDescription": "As senhas são geradas usando o nome e data do evento. Ex: \"Evento2024$Agosto\" para melhor memorização." + }, + "feedback": { + "comments": "Comentários", + "addComment": "Adicionar Comentário", + "yourName": "Seu nome", + "yourEmail": "Seu e-mail", + "writeComment": "Escreva um comentário...", + "submit": "Enviar", + "commentSubmitted": "Comentário enviado", + "commentError": "Falha ao enviar comentário", + "rateLimited": "Aguarde antes de comentar novamente", + "commentRequired": "Comentário é obrigatório", + "nameRequired": "Nome é obrigatório", + "emailRequired": "E-mail é obrigatório", + "anonymous": "Anônimo", + "pendingApproval": "Aguardando aprovação", + "noComments": "Ainda sem comentários. Seja o primeiro!", + "rating": "Avaliação", + "ratePhoto": "Avalie esta foto", + "yourRating": "Sua avaliação", + "averageRating": "Avaliação média", + "totalRatings": "avaliações", + "likes": "Curtidas", + "favorites": "Favoritos", + "likePhoto": "Curtir esta foto", + "favoritePhoto": "Adicionar aos favoritos", + "photoFeedback": "Feedback da Foto", + "hasFeedback": "Possui feedback", + "hasComments": "Possui comentários", + "hasRating": "Possui avaliação", + "settings": { + "title": "Configurações de Feedback de Convidados", + "enableFeedback": "Ativar feedback", + "feedbackTypes": "Tipos de Feedback", + "ratings": "Avaliações por Estrelas", + "ratingsDesc": "Permite avaliar fotos (1-5 estrelas)", + "likes": "Curtidas", + "likesDesc": "Funcionalidade simples de curtir", + "comments": "Comentários", + "commentsDesc": "Comentários em texto nas fotos", + "favorites": "Favoritos", + "favoritesDesc": "Marcar fotos como favoritas" + } + }, + "filter": { + "feedbackFilters": "Filtros de Feedback", + "clear": "Limpar", + "rating": "Avaliação", + "allPhotos": "Todas as Fotos", + "anyRating": "Qualquer Avaliação", + "oneStarPlus": "1+ Estrela", + "twoStarsPlus": "2+ Estrelas", + "threeStarsPlus": "3+ Estrelas", + "fourStarsPlus": "4+ Estrelas", + "fiveStarsOnly": "Apenas 5 Estrelas", + "hasLikes": "Possui curtidas", + "hasFavorites": "Possui favoritos", + "hasComments": "Possui comentários" + }, + "adminLogin": { + "title": "Login Administrativo", + "subtitle": "Entre para gerenciar suas galerias de fotos", + "sessionExpired": "Sua sessão expirou. Por favor, faça login novamente.", + "emailLabel": "Endereço de E-mail", + "emailPlaceholder": "admin@exemplo.com", + "emailRequired": "O e-mail é obrigatório", + "invalidEmail": "Formato de e-mail inválido", + "passwordLabel": "Senha", + "passwordPlaceholder": "Digite sua senha", + "passwordRequired": "A senha é obrigatória", + "passwordMinLength": "A senha deve ter pelo menos 6 caracteres", + "rememberMe": "Lembrar-me", + "forgotPassword": "Esqueceu a senha?", + "signIn": "Entrar", + "loginSuccess": "Login realizado com sucesso!", + "networkError": "Erro de rede. Verifique sua conexão.", + "tooManyAttempts": "Muitas tentativas. Tente novamente mais tarde.", + "invalidCredentials": "E-mail ou senha inválidos", + "generalError": "Ocorreu um erro. Tente novamente.", + "needHelp": "Precisa de ajuda? Contate", + "poweredBy": "Distribuído por PicPeak", + "devModeHint": "Modo Desenvolvimento: E-mail: admin@exemplo.com, Senha: admin123" + } +} \ No newline at end of file