From 375f51285b5db9c0dfcc04761d24927282e57796 Mon Sep 17 00:00:00 2001 From: filpgame Date: Sat, 2 May 2026 23:44:07 -0300 Subject: [PATCH 1/2] feat(i18n): add Brazilian Portuguese (pt-BR) locale --- frontend/src/i18n/config.ts | 10 +- frontend/src/i18n/locales/pt-br.json | 2287 ++++++++++++++++++++++++++ 2 files changed, 2294 insertions(+), 3 deletions(-) create mode 100644 frontend/src/i18n/locales/pt-br.json 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 From f25559c0e76776f7cfe8d187e1fea05e751bbafe Mon Sep 17 00:00:00 2001 From: filpgame Date: Tue, 5 May 2026 10:53:29 -0300 Subject: [PATCH 2/2] feat(i18n): improve pt locale with pt-BR phrasings, remove duplicate pt-BR file --- frontend/src/i18n/config.ts | 4 - frontend/src/i18n/locales/pt-br.json | 2287 -------------------------- frontend/src/i18n/locales/pt.json | 1398 ++++++++-------- 3 files changed, 699 insertions(+), 2990 deletions(-) delete mode 100644 frontend/src/i18n/locales/pt-br.json diff --git a/frontend/src/i18n/config.ts b/frontend/src/i18n/config.ts index 8883fdf8..d1aca46e 100644 --- a/frontend/src/i18n/config.ts +++ b/frontend/src/i18n/config.ts @@ -8,7 +8,6 @@ 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) @@ -34,9 +33,6 @@ i18n nl: { translation: nlTranslations, }, - 'pt-BR': { - translation: ptBrTranslations, - }, }, interpolation: { diff --git a/frontend/src/i18n/locales/pt-br.json b/frontend/src/i18n/locales/pt-br.json deleted file mode 100644 index 2b84ee3c..00000000 --- a/frontend/src/i18n/locales/pt-br.json +++ /dev/null @@ -1,2287 +0,0 @@ -{ - "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 diff --git a/frontend/src/i18n/locales/pt.json b/frontend/src/i18n/locales/pt.json index 495baaf1..efda8e54 100644 --- a/frontend/src/i18n/locales/pt.json +++ b/frontend/src/i18n/locales/pt.json @@ -1,12 +1,12 @@ { "userManagement": { "title": "Gerenciamento de Usuários", - "subtitle": "Gerencie usuários administradores e convites", + "subtitle": "Gerenciar usuários administradores e convites", "loading": "Carregando usuários...", - "loadError": "Falha ao carregar usuários. Por favor, tente novamente.", + "loadError": "Falha ao carregar usuários. Tente novamente.", "inviteUser": "Convidar Usuário", "createInvitation": "Criar Convite", - "email": "Endereço de email", + "email": "Endereço de E-mail", "emailPlaceholder": "usuario@exemplo.com", "role": "Função", "selectRole": "Selecione uma função", @@ -25,7 +25,7 @@ "userDeactivated": "Usuário desativado com sucesso", "deactivateUserError": "Falha ao desativar usuário", "noRole": "Sem Função", - "neverLoggedIn": "Nunca fez login", + "neverLoggedIn": "Nunca acessou", "expired": "Expirado", "deactivate": "Desativar", "cancel": "Cancelar", @@ -45,18 +45,18 @@ }, "table": { "user": "Usuário", - "email": "Email", + "email": "E-mail", "role": "Função", "status": "Status", - "lastLogin": "Último Login", + "lastLogin": "Último Acesso", "actions": "Ações", - "invitedBy": "Convidado Por", - "expires": "Expira" + "invitedBy": "Convidado por", + "expires": "Expira em" }, "validation": { - "emailRequired": "Email é obrigatório", - "emailInvalid": "Formato de email inválido", - "roleRequired": "Função é obrigatória" + "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...", @@ -66,7 +66,7 @@ "noInvitationsFound": "Nenhum convite corresponde à sua busca", "confirmDeactivate": { "title": "Desativar Usuário", - "message": "Tem certeza que deseja desativar {{name}}? Ele(a) não poderá mais fazer login." + "message": "Tem certeza que deseja desativar {{name}}? Eles não poderão mais fazer login." }, "confirmCancelInvitation": { "title": "Cancelar Convite", @@ -95,7 +95,7 @@ "change": "Alterar", "remove": "Remover", "download": "Baixar", - "downloadAll": "Baixar Tudo", + "downloadAll": "Baixar Todos", "uploading": "Enviando...", "uploaded": "Enviado", "photo": "foto", @@ -106,11 +106,11 @@ "restore": "Restaurar", "actions": "Ações", "refresh": "Atualizar", - "preview": "Pré-visualização", + "preview": "Prévia", "processing": "Processando...", "upload": "Enviar", "days": "dias", - "customize": "Personalizar", + "customize": "Customizar", "hide": "Ocultar", "unknown": "Desconhecido", "notSet": "Não definido", @@ -118,7 +118,7 @@ "up": "Cima", "select": "Selecionar", "selected": "Selecionado", - "chunk": "Lote", + "chunk": "Fragmento", "optional": "opcional" }, "upload": { @@ -128,23 +128,23 @@ "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 porque o formato não é compatível (use JPEG/PNG/WebP/MP4/MOV/WEBM).", + "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": "Alguns arquivos falharam ao enviar", + "someFilesFailed": "Falha ao enviar alguns arquivos", "replaceByName": "Substituir fotos existentes com o mesmo nome", "replacedFiles": "{{count}} foto(s) substituída(s)", "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": "Selecionar pasta externa em /external-media", + "selectExternalFolder": "Selecione a pasta externa em /external-media", "importFromSelectedFolder": "Importar da pasta selecionada", "maxFilesReached": "Máximo de {{limit}} arquivos permitido", - "someFilesSkipped": "Apenas {{allowed}} arquivo(s) pode(m) ser adicionado(s) (limite {{limit}})", - "tooManyFiles": "Máximo de {{limit}} arquivos podem ser enviados de uma vez", + "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...", @@ -158,18 +158,18 @@ "settings": "Configurações", "eventTypes": "Tipos de Evento", "branding": "Identidade Visual", - "analytics": "Análises", - "emailSettings": "Configurações de Email", + "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": "Gerencie galerias de fotos arquivadas", + "subtitle": "Gerenciar galerias de fotos arquivadas", "loadingArchives": "Carregando arquivos...", "totalArchives": "Total de Arquivos", - "storageUsed": "Armazenamento Usado", + "storageUsed": "Espaço Utilizado", "totalPhotos": "Total de Fotos", "avgArchiveSize": "Tamanho Médio do Arquivo", "searchPlaceholder": "Buscar arquivos...", @@ -184,21 +184,21 @@ "tableHeaders": { "event": "Evento", "type": "Tipo", - "archivedDate": "Data de Arquivo", + "archivedDate": "Data de Arquivamento", "size": "Tamanho", "photos": "Fotos", "actions": "Ações" }, "noArchivesFound": "Nenhum arquivo encontrado", - "eventDateNA": "Data do evento: N/D", + "eventDateNA": "Data do evento: N/A", "processing": "Processando...", "download": "Baixar", "restore": "Restaurar", "delete": "Excluir", - "showing": "Exibindo {{from}} a {{to}} de {{total}} arquivos", + "showing": "Mostrando de {{from}} a {{to}} de {{total}} arquivos", "page": "Página {{current}} de {{total}}", "storageManagement": "Gerenciamento de Armazenamento", - "storageInfo": "Os arquivos são armazenados permanentemente, a menos que sejam excluídos manualmente. Considere implementar uma política de retenção para gerenciar os custos 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", @@ -210,23 +210,23 @@ "enterPassword": "Digite a Senha da Galeria", "passwordPlaceholder": "Digite a senha da galeria", "invalidPassword": "Senha inválida", - "wrongPassword": "Senha incorreta. Por favor, verifique sua senha e tente novamente.", - "tooManyAttempts": "Muitas tentativas de login malsucedidas. Por favor, tente novamente mais tarde.", + "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 com ele se você não a tiver." + "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": "Expirado", + "expired": "Expirada", "daysRemaining": "{{days}} dias restantes", "dayRemaining": "1 dia restante", "hoursRemaining": "{{hours}} horas restantes", "expiredMessage": "Esta galeria expirou em {{date}}", - "contactOrganizer": "Por favor, entre em contato com o organizador do evento se precisar de acesso a essas fotos.", + "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", @@ -234,13 +234,13 @@ "allPhotos": "Todas as Fotos", "filter": "Filtrar", "feedbackFilter": "Filtro de Feedback", - "all": "Todas", + "all": "Todos", "liked": "Curtidas", "favorited": "Favoritadas", - "favorites": "Favoritos", + "favorites": "Favoritas", "downloadSelected": "Baixar {{count}} Selecionadas", "shareGallery": "Compartilhar Galeria", - "needHelp": "Precisa de ajuda? Entre em contato em", + "needHelp": "Precisa de ajuda? Contate-nos em", "noPhotosFound": "Nenhuma foto encontrada", "failedToLoad": "Falha ao carregar fotos", "tryAgain": "Tentar Novamente", @@ -248,28 +248,28 @@ "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 elas não estejam mais disponíveis.", - "publicGalleryTitle": "Esta galeria é de acesso público", + "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 Tudo", + "downloadAll": "Baixar Todas", "downloading": "Baixando {{count}} foto...", "downloading_plural": "Baixando {{count}} fotos...", "downloadedPhotos": "{{count}} foto baixada!", "downloadedPhotos_plural": "{{count}} fotos baixadas!", - "downloadError": "Algumas fotos falharam ao baixar", + "downloadError": "Algumas fotos não puderam ser baixadas", "selectPhotos": "Selecionar Fotos", "cancelSelection": "Cancelar Seleção", "photosSelected": "{{count}} selecionadas", - "selectAll": "Selecionar Tudo", - "deselectAll": "Desmarcar Tudo", + "selectAll": "Selecionar Todas", + "deselectAll": "Desmarcar Todas", "deleteSelected": "Excluir Selecionadas", "photosCount": "{{count}} foto", "photosCount_plural": "{{count}} fotos", - "searchByFilename": "Buscar por nome de arquivo...", + "searchByFilename": "Buscar por nome do arquivo...", "uncategorized": "Sem categoria", - "sortAscending": "Ordenar crescente", - "sortDescending": "Ordenar decrescente", + "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", @@ -280,8 +280,8 @@ "categories": "Categorias", "mediaType": "Mídia", "allMedia": "Toda a mídia", - "photosOnly": "Fotos", - "videosOnly": "Vídeos", + "photosOnly": "Apenas Fotos", + "videosOnly": "Apenas Vídeos", "download": "Baixar", "noMedia": "Nenhuma mídia enviada ainda", "searchPlaceholder": "Buscar fotos...", @@ -291,7 +291,7 @@ "photoGallery": "Galeria de Fotos", "photos": "Fotos", "allRightsReserved": "Todos os direitos reservados", - "searchMemories": "Buscar memórias...", + "searchMemories": "Buscar lembranças...", "thankYou": "Obrigado", "thankYouMessage": "Por fazer parte da nossa história e tornar nosso dia especial inesquecível.", "feedback": { @@ -299,11 +299,11 @@ "shareThoughts": "Compartilhe sua opinião sobre \"{{name}}\"", "rateThisMoment": "Avalie este momento", "comments": "Comentários", - "noComments": "Nenhum comentário ainda. Seja o primeiro!", + "noComments": "Ainda sem comentários. Seja o primeiro!", "yourName": "Seu nome", - "yourEmail": "Seu email", + "yourEmail": "Seu e-mail", "writeLovelyNote": "Escreva uma mensagem carinhosa...", - "postComment": "Publicar Comentário", + "postComment": "Postar Comentário", "anonymous": "Anônimo" }, "rated": "Avaliado", @@ -314,9 +314,9 @@ "global": "Categorias Globais", "eventSpecific": "Categorias Específicas do Evento", "addCategory": "Adicionar Categoria", - "organizationInfo": "Organize suas fotos em categorias. As categorias ajudam os convidados a navegar e encontrar tipos específicos de fotos.", + "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 do evento. As categorias globais estão disponíveis por padrão.", + "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", @@ -325,29 +325,29 @@ "failedToDeleteCategory": "Falha ao excluir categoria", "categoryName": "Nome da categoria", "noCategory": "Sem categoria", - "noCategoriesYet": "Nenhuma categoria ainda. Crie sua primeira categoria para organizar as fotos.", - "deleteConfirm": "Tem certeza de que deseja excluir \"{{name}}\"?", + "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 para uma categoria, a foto hero padrão será utilizada." + "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": "Total de Visualizações", - "totalDownloads": "Total de Downloads", + "totalViews": "Visualizações Totais", + "totalDownloads": "Downloads Totais", "uniqueVisitors": "Visitantes Únicos", "createNewEvent": "Criar Novo Evento", - "setupNewGallery": "Configure uma nova galeria de fotos para seu 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(a) ao nosso dia especial! Sinta-se à vontade para baixar e compartilhar essas memórias...", + "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", "adminEmailPickFromAdmins": "Escolher entre administradores:", @@ -358,7 +358,7 @@ "passwordPlaceholder": "Digite uma senha segura", "confirmPasswordPlaceholder": "Confirme a senha", "galleryExpiresOn": "A galeria expirará em {{date}}", - "guestsWillReceiveWarning": "Os convidados receberão um email de aviso 7 dias antes da expiração.", + "guestsWillReceiveWarning": "Os convidados receberão um e-mail de aviso 7 dias antes da expiração.", "types": { "wedding": "Casamento", "birthday": "Aniversário", @@ -369,18 +369,18 @@ "default": "Padrão", "oceanBlue": "Azul Oceano", "royalPurple": "Roxo Real", - "roseGold": "Ouro Rosé", + "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": "Email do Cliente", + "hostEmail": "E-mail do Cliente", "hostName": "Nome do Cliente", "hostNamePlaceholder": "João Silva", - "adminEmail": "Email do Administrador", - "adminNotificationEmail": "Email de Notificação do Administrador", + "adminEmail": "E-mail do Administrador", + "adminNotificationEmail": "E-mail de Notificação do Admin", "expirationDate": "Data de Expiração", "active": "Ativo", "archived": "Arquivado", @@ -392,38 +392,38 @@ "viewGallery": "Ver Galeria", "uploadPhotos": "Enviar Fotos", "archiveEvent": "Arquivar Evento", - "archiveConfirm": "Tem certeza de que deseja arquivar este evento? Esta ação não pode ser desfeita.", + "archiveConfirm": "Tem certeza que deseja arquivar este evento? Esta ação não pode ser desfeita.", "extendExpiration": "Estender {{days}} Dias", - "backToEvents": "Voltar aos Eventos", + "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": "Os convidados não podem mais acessar a galeria. Considere arquivar este evento.", - "warningEmailsSent": "Emails de aviso foram enviados ao cliente.", + "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 (enviar para o PicPeak)", + "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": "Essas pastas são lidas do ponto de montagem /external-media dentro do seu container ou host.", + "externalFolderHint": "Estas pastas são lidas da montagem /external-media no seu contêiner ou host.", "externalFolderRequired": "Selecione uma pasta externa antes de salvar.", "externalFolderEmpty": "Sem subpastas", "clearSelection": "Limpar", - "welcomeMessage": "Mensagem de Boas-Vindas", - "noWelcomeMessage": "Nenhuma mensagem de boas-vindas definida", + "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 a galeria.", + "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 Email de Criação", - "creationEmailResent": "Email de criação foi colocado na fila para envio", - "failedToResendEmail": "Falha ao reenviar email de criação", + "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", @@ -433,22 +433,22 @@ "views": "Visualizações", "downloads": "Downloads", "noStatistics": "Nenhuma estatística disponível ainda", - "archiveStatus": "Status do Arquivo", - "archivedOn": "Arquivado Em", + "archiveStatus": "Status do Arquivamento", + "archivedOn": "Arquivado em", "downloadArchive": "Baixar Arquivo", "loadingPhotos": "Carregando fotos...", "photoCategories": "Categorias de Fotos", - "organizeCategoriesInfo": "Organize suas fotos em categorias. As categorias ajudam os convidados a navegar e encontrar tipos específicos de fotos.", - "categoriesTip": "Dica: As categorias são específicas para cada evento. Você pode criar categorias personalizadas como \"Cerimônia\", \"Recepção\", \"Retratos\", etc.", + "organizeCategoriesInfo": "Organize suas fotos em categorias para ajudar na navegação.", + "categoriesTip": "Dica: Categorias são específicas de cada evento. Crie nomes como \"Cerimônia\", \"Recepção\", etc.", "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 isso 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 nos downloads e monitorar a atividade.", - "passwordHelperText": "Você pode usar datas como \"04.07.2025\" ou qualquer texto com 6+ caracteres", + "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", @@ -479,74 +479,74 @@ "themeAndStyle": "Tema e Estilo", "colorTheme": "Tema de Cores", "galleryExpiration": "Expiração da Galeria", - "galleryExpiresIn": "A Galeria Expira Em", + "galleryExpiresIn": "Galeria Expira Em", "daysAfterEvent": "dias após a data do evento", "expiresOn": "Expira em", "galleryWillExpireOn": "A galeria expirará em {{date}}", - "expirationWarning": "Os convidados receberão um email de aviso 7 dias antes da expiração.", + "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.", "photoCap": "Limite de Fotos", "photoCapHelp": "Número máximo de fotos permitidas. 0 = ilimitado", - "userUploads": "Configurações de Upload de Convidados", + "userUploads": "Configurações de Upload do Usuário", "allowUserUploads": "Permitir que convidados enviem fotos", - "allowUserUploadsHelp": "Habilitar convidados a enviar suas próprias fotos para esta galeria", - "allowUserUploadsDescription": "Habilitar convidados a enviar suas próprias fotos para esta galeria", + "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 uploads de convidados", - "uploadCategoryHelp": "Todas as fotos enviadas por convidados serão adicionadas a esta categoria", - "userUploadWarning": "Os uploads de convidados serão moderados e podem ser removidos por administradores a qualquer momento.", + "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 Habilitados", - "downloadsDisabled": "Downloads Desabilitados", + "downloadsEnabled": "Downloads Ativados", + "downloadsDisabled": "Downloads Desativados", "downloadProtection": "Proteção de Download", - "disableRightClick": "Bloquear menu de contexto (botão direito)", + "disableRightClick": "Bloquear menu do botão direito", "watermarkDownloads": "Adicionar marca d'água aos downloads", - "enableDevtoolsProtection": "Detectar ferramentas do desenvolvedor", - "useCanvasRendering": "Renderização em canvas (proteção avançada)", - "protectionInfo": "Os recursos de proteção ajudam a evitar downloads não autorizados, mas não podem bloquear todos os métodos.", - "protectionLevelBasic": "Básico - Apenas bloqueio de clique direito", + "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 do Logo Hero", - "heroLogoVisible": "Exibir logo na seção hero", - "heroLogoSize": "Tamanho do Logo", - "heroLogoSizeSmall": "Pequeno", - "heroLogoSizeMedium": "Médio", + "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 do Logo", + "heroLogoPosition": "Posição da Logo", "heroLogoPositionTop": "Topo (acima do título)", - "heroLogoPositionCenter": "Centro (entre o título e as datas)", - "heroLogoPositionBottom": "Rodapé (abaixo das datas)", - "heroLogoInfo": "Essas configurações se aplicam quando a galeria usa o layout Hero. Você pode ocultar o logo ou personalizar seu tamanho e posição.", - "eventCustomLogo": "Logo Personalizado do Evento", - "eventCustomLogoDescription": "Envie um logo personalizado para este evento. Isso substitui o logo de identidade visual global somente para esta galeria.", + "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 enviado com sucesso", + "eventLogoUploaded": "Logo do evento enviada com sucesso", "eventLogoUploadFailed": "Falha ao enviar logo do evento", - "eventLogoRemoved": "Logo do evento removido com sucesso", + "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 oculto", - "heroPhoto": "Foto Hero", - "heroPhotoHelp": "Selecione uma foto hero padrão para a galeria. Você pode substituí-la por categoria.", - "selectHeroPhoto": "Selecionar Foto Hero", - "noHeroPhotoSelected": "Nenhuma foto hero selecionada", - "heroPhotoSelected": "Foto hero selecionada", - "heroImageAnchor": "Posição de Corte da Imagem Hero", - "heroImageAnchorDescription": "Clique na imagem para definir o ponto focal do corte.", + "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": "Rodapé", - "heroPreview": "Pré-visualização Hero", + "heroImageAnchorBottom": "Base", + "heroPreview": "Prévia do Destaque", "noPhotosAvailable": "Nenhuma foto disponível", "processingRequest": "Processando sua solicitação...", "eventTypeWedding": "Casamento", @@ -564,14 +564,14 @@ "publishConfirm": "Isso tornará a galeria acessível e enviará o e-mail de notificação ao cliente. Continuar?", "publishSuccess": "Galeria publicada e cliente notificado!", "draftBanner": "Esta galeria está em modo rascunho. Envie suas fotos e publique quando estiver pronto.", - "daysLeft": "({{count}} dia restante)", - "daysLeft_plural": "({{count}} dias restantes)", + "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}} com falha", + "bulkArchivePartial": "{{success}} eventos arquivados, {{failed}} falharam", "deleteSelected": "Excluir selecionados", "bulkDelete": { "title": "Excluir permanentemente {{count}} eventos?", @@ -595,7 +595,7 @@ "archiveSelected": "Arquivar Selecionados", "publicAccess": "Acesso público", "passwordProtected": "Protegido por senha", - "newPasswordRequired": "Por favor, defina uma senha antes de habilitar a proteção.", + "newPasswordRequired": "Defina uma senha antes de ativar a proteção.", "event": "Evento", "type": "Tipo", "date": "Data", @@ -611,35 +611,35 @@ "archiveEventAction": "Arquivar Evento", "downloadArchiveAction": "Baixar Arquivo", "deleteEvent": "Excluir Evento", - "deleteEventConfirm": "Tem certeza de que deseja excluir este evento?", - "downloadArchiveSoon": "Download do arquivo em breve", + "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 arquivar este evento.", - "warningEmailsHaveBeenSent": "Emails de aviso foram enviados ao cliente.", + "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 de boas-vindas definida", - "createdOn": "Criado", + "welcomeMessageLabel": "Mensagem de Boas-vindas", + "noWelcomeMessageSet": "Nenhuma mensagem definida", + "createdOn": "Criado em", "copy": "Copiar", "copied": "Copiado!", - "organizingPhotosInfo": "Organize suas fotos em categorias. As categorias ajudam os convidados a navegar e encontrar tipos específicos de fotos.", + "organizingPhotosInfo": "Organize suas fotos em categorias para facilitar a navegação.", "archiveStatusTitle": "Status do Arquivo", "downloadingArchive": "Baixando arquivo de {{name}}...", "downloadStarted": "Download iniciado", "failedToDownloadArchive": "Falha ao baixar arquivo", - "statisticsNotAvailable": "Nenhuma estatística disponível ainda", + "statisticsNotAvailable": "Estatísticas não disponíveis ainda", "photoFilters": "Filtros de Fotos", - "noStatisticsAvailableYet": "Nenhuma estatística disponível ainda", + "noStatisticsAvailableYet": "Ainda sem estatísticas", "addPlus": "Adicionar+", "galleryTheme": "Tema da Galeria", - "customizeTheme": "Personalizar Tema", + "customizeTheme": "Customizar Tema", "noThemeSet": "Nenhum tema configurado", - "customizingTheme": "Personalizando tema da galeria", - "customizingThemeFor": "Personalizando tema para {{event}}", - "customCssTemplate": "Modelo de CSS Personalizado", - "customCssTemplateDesc": "Aplique um modelo de CSS personalizado para estilizar a galeria com efeitos visuais únicos.", + "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 o tema predefinido", + "useThemeOnly": "Usar apenas predefinição do tema", "customTemplate": "Modelo Personalizado", "rename": { "button": "Renomear", @@ -671,78 +671,78 @@ }, "settings": { "title": "Configurações do Sistema", - "subtitle": "Defina as configurações e preferências globais 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": "Usado para gerar links de galeria nos emails", + "siteUrlHelp": "Usada para gerar links de galeria nos e-mails", "defaultExpiration": "Expiração Padrão (dias)", - "defaultExpirationHelp": "Por quanto tempo as galerias permanecem ativas por padrão", - "maxFileSize": "Tamanho Máximo de Arquivo (MB)", + "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áximo de Arquivos por Upload", - "maxFilesPerUploadHelp": "Número máximo de fotos permitidas em um único lote de upload (1-{{max}}).", - "allowedFileTypes": "Tipos de Arquivo Permitidos", - "allowedFileTypesHelp": "Lista de extensões de arquivo separadas por vírgula", - "featureToggles": "Alternância de Recursos", - "enableAnalytics": "Habilitar rastreamento de análises", - "enableRegistration": "Permitir auto-registro para administradores", - "enableShortGalleryUrls": "Usar URLs curtas de galeria", - "enableShortGalleryUrlsHelp": "Remove o slug do evento dos novos links de compartilhamento, mantendo os links existentes funcionando.", - "maintenanceMode": "Habilitar modo de manutenção", + "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 para convidados antes do login", - "defaultWelcomeMessage": "Mensagem de Boas-Vindas Padrão", - "welcomeMessage": "Mensagem de Boas-Vindas", - "welcomeMessagePlaceholder": "Digite uma mensagem de boas-vindas padrão que será incluída nos emails de criação de galeria", - "welcomeMessageHelp": "Esta mensagem será incluída em todos os emails de criação de galeria, a menos que seja substituída ao criar um evento", + "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 emails e em todo o aplicativo", - "accountSection": "Conta do Administrador", - "accountUsername": "Nome de Usuário do Administrador", - "accountUsernameHelp": "Exibido na interface administrativa e usado nos registros de atividade.", - "accountUsernameRequired": "Nome de usuário é obrigatório", - "accountUsernameLength": "O nome de usuário deve ter pelo menos 3 caracteres", - "accountEmail": "email do Administrador", - "accountEmailHelp": "Usado para login e recebimento de notificações de segurança.", - "accountEmailRequired": "O endereço de email é obrigatório", - "accountEmailInvalid": "Digite um endereço de email válido", + "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 Pública", - "title": "Página de Landing Pública", - "subtitle": "Publique uma página de landing personalizada para convidados quando visitarem seu domínio.", + "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": "Habilitado", - "disabled": "Desabilitado", - "htmlLabel": "HTML da Página de Landing", - "htmlPlaceholder": "Forneça o código HTML para o hero, seções e chamadas para ação da sua página de landing.", - "htmlHelp": "O HTML bruto é sanitizado ao salvar. Tags inseguras, scripts inline e atributos não permitidos são removidos automaticamente. Tokens como {{company_name}}, {{company_tagline}} e {{support_email}} serão substituídos pelos valores das configurações de Identidade Visual.", + "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": "Substituições CSS opcionais para ajustar layout, cores ou tipografia.", - "cssHelp": "Imports e URLs de JavaScript são removidos. Use seletores CSS padrão para substituir o estilo padrão.", + "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 para os padrões.", - "resetError": "Falha ao redefinir modelo do site público.", - "previewTitle": "Pré-visualização ao Vivo", - "previewSandboxed": "Pré-visualização em sandbox", - "previewDisabled": "Habilite o site público para ver a pré-visualização ao vivo.", - "sanitizationNotice": "Scripts, frames incorporados e atributos inseguros são removidos antes da publicação. Apenas HTML seguro, links e imagens são permitidos.", - "htmlRequired": "Forneça conteúdo HTML antes de habilitar o site público." + "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", @@ -750,37 +750,37 @@ "totalUsed": "Total Utilizado", "archiveStorage": "Armazenamento de Arquivos", "storageLimit": "Limite de Armazenamento", - "storageLimitHelper": "Defina um limite para o uso de armazenamento de fotos. Este limite é indicativo e será destacado quando atingido.", + "storageLimitHelper": "Defina um limite consultivo para o uso de espaço.", "softLimitInputLabel": "Limite (GB)", - "softLimitHelper": "Digite o uso máximo de armazenamento preferido em gigabytes.", + "softLimitHelper": "Insira o limite máximo preferencial em gigabytes.", "recommendedSoftLimit": "Limite Sugerido", "diskCapacity": "Capacidade do Disco", - "diskCapacityReported": "Capacidade do Disco (informada)", + "diskCapacityReported": "Capacidade (reportada)", "diskAvailable": "Disponível", - "diskAvailableReported": "Disponível (informado)", + "diskAvailableReported": "Disponível (reportada)", "diskFree": "Livre", - "diskFreeReported": "Livre (informado)", - "diskMetricsUnavailable": "As métricas de disco não estão disponíveis no Docker Desktop ou em ambientes virtualizados.", + "diskFreeReported": "Livre (reportada)", + "diskMetricsUnavailable": "Métricas de disco não estão disponíveis em ambientes virtualizados ou Docker Desktop.", "applyRecommended": "Usar recomendado", - "applyAvailable": "Corresponder disponível", - "invalidSoftLimit": "Digite um número válido para o limite.", + "applyAvailable": "Igualar disponível", + "invalidSoftLimit": "Insira um número válido para o limite.", "saveSoftLimit": "Salvar limite", - "limitNotEnforced": "Este limite é apenas indicativo e não é aplicado automaticamente.", - "overrideTitle": "Substituição manual de capacidade", - "diskOverrideEnvNote": "A capacidade do disco é controlada por variáveis de ambiente e não pode ser editada aqui.", - "diskOverrideSettingsHelp": "Defina valores de capacidade personalizados quando o Docker reportar números irreais.", + "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 a partir da capacidade total menos o armazenamento utilizado.", - "saveOverride": "Salvar substituição de capacidade", - "capacityRequiredForAvailable": "Digite uma capacidade total antes de definir o espaço disponível.", + "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 para liberar espaço de armazenamento. Eventos arquivados são comprimidos e usam menos armazenamento do que galerias ativas.", - "noEventsUsingStorage": "Nenhum evento usando armazenamento", + "storageManagementHelp": "Considere arquivar ou excluir eventos antigos. Eventos arquivados ocupam menos espaço.", + "noEventsUsingStorage": "Nenhum evento utilizando armazenamento", "unlimited": "Ilimitado" }, "security": { @@ -789,39 +789,39 @@ "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 de galeria", + "passwordComplexityHelp": "Nível de segurança exigido para senhas", "complexitySimple": "Simples (6+ caracteres, qualquer texto)", - "complexityModerate": "Moderado (8+ caracteres, maiúsculas/números)", + "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 de caracteres)", + "complexityVeryStrong": "Muito Forte (12+ caracteres, todos os tipos)", "sessionAuth": "Sessão e Autenticação", - "sessionTimeout": "Tempo Limite de Sessão (minutos)", - "sessionTimeoutHelp": "Tempo limite de sessão do administrador em minutos", + "sessionTimeout": "Tempo de Sessão (minutos)", + "sessionTimeoutHelp": "Tempo de inatividade antes de deslogar o admin", "maxLoginAttempts": "Máximo de Tentativas de Login", - "maxLoginAttemptsHelp": "Máximo de tentativas de login com falha por IP antes do bloqueio", + "maxLoginAttemptsHelp": "Falhas permitidas por IP antes do bloqueio", "attemptWindowMinutes": "Janela de Tentativas (minutos)", - "attemptWindowMinutesHelp": "Quanto tempo considerar ao contabilizar tentativas de login com falha", + "attemptWindowMinutesHelp": "Tempo para contabilizar falhas de login", "lockoutDurationMinutes": "Duração do Bloqueio (minutos)", - "lockoutDurationMinutesHelp": "Por quanto tempo a galeria ou conta fica bloqueada após muitas tentativas falhas", - "enable2FA": "Habilitar autenticação de dois fatores para administradores", + "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": "Habilitar reCAPTCHA para formulários de login", + "enableRecaptcha": "Ativar reCAPTCHA nos formulários de login", "siteKey": "Chave do Site", - "siteKeyHelp": "Sua chave de site reCAPTCHA v2 (pública)", + "siteKeyHelp": "Sua chave pública do reCAPTCHA v2", "secretKey": "Chave Secreta", - "secretKeyHelp": "Sua chave secreta reCAPTCHA v2 (mantenha privada)", - "recaptchaHelp": "Obtenha suas chaves reCAPTCHA em", + "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": "As categorias globais estão disponíveis para todos os eventos. Você também pode criar categorias específicas do evento ao editar eventos individuais. As categorias ajudam a organizar as fotos e permitem que os convidados filtrem fotos por tipo na visualização da galeria." + "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 Armazenamento", + "storageOverview": "Visão Geral do Espaço", "systemInfo": "Informações do Sistema", "databaseInfo": "Informações do Banco de Dados", "platform": "Plataforma", @@ -831,129 +831,129 @@ "memoryUsage": "Uso de Memória", "memoryUsed": "Memória Utilizada", "photos": "Fotos", - "admins": "Administradores", - "dbSize": "Tamanho do Banco de Dados", - "services": "Serviços em Segundo Plano", - "fileWatcher": "Monitoramento de Arquivos", + "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 Email", - "emailProcessorDesc": "Envia emails na fila", - "emailQueue": "Status da Fila de Email", - "pending": "Pendente", - "sent": "Enviado", - "failed": "Com Falha", + "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": "Dimensões Ausentes", + "missingDimensions": "Sem Dimensões", "repairButton": "Reparar Dimensões", "repairing": "Reparando...", - "alreadyRunning": "O reparo já está em andamento", - "started": "Iniciou o reparo de {{count}} fotos", + "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}} com falha", - "description": "Preencha largura/altura ausentes para fotos enviadas antes da implementação do rastreamento de dimensões. Necessário para os layouts Masonry e Mosaico." + "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 notificações por email quando novas versões do PicPeak estiverem disponíveis.", - "enableEmails": "Habilitar notificações por email", - "enableEmailsDesc": "Enviar email aos administradores quando uma nova versão estiver disponível", - "recipients": "Destinatários do Email", + "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": "Endereços de email separados por vírgula. Deixe em branco para enviar a todos os usuários administradores.", - "lastNotified": "Última notificação enviada para a versão: {{version}}", + "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 Email de Teste", + "sendTest": "Enviar E-mail de Teste", "saved": "Configurações salvas", "saveError": "Falha ao salvar configurações", - "emailSent": "Email de notificação enviado para {{count}} destinatários", + "emailSent": "E-mail enviado para {{count}} destinatários", "emailFailed": "Falha ao enviar notificação", "checkSuccess": "Notificação enviada para nova versão", - "checkNoAction": "Nenhuma notificação necessária: {{reason}}", + "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 de contato são obrigatórios ao criar novos eventos.", + "requiredFieldsDescription": "Configure quais campos são obrigatórios ao criar novos eventos.", "requireCustomerName": "Exigir nome do cliente", - "requireCustomerNameHelp": "O nome do cliente deve ser fornecido para novos eventos", - "requireCustomerEmail": "Exigir email do cliente", - "requireCustomerEmailHelp": "O email do cliente deve ser fornecido para novos eventos", - "customerEmailWarning": "Obrigatório para enviar convites de galeria", - "requireAdminEmail": "Exigir email do administrador", - "requireAdminEmailHelp": "O email do administrador deve ser fornecido para novos eventos", - "adminEmailWarning": "Obrigatório para receber notificações de eventos", + "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 do evento deve ser fornecida ao criar eventos", - "eventDateWarning": "As URLs da galeria usarão identificadores aleatórios em vez de datas", + "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": "As galerias devem ter uma data de expiração", - "expirationWarning": "Galerias sem expiração permanecerão ativas até serem arquivadas manualmente", - "saveSettings": "Salvar Configurações de Eventos", + "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": "Essas configurações afetam apenas a criação de novos eventos. Eventos existentes não são afetados. O comportamento padrão exige todos os campos." + "noteText": "Estas configurações afetam apenas novos eventos. O padrão exige todos os campos." }, "imageSecurity": { - "title": "Proteção de Imagens", - "saveSuccess": "Configurações de segurança de imagem salvas", + "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 de imagem", + "loadError": "Falha ao carregar configurações de segurança", "defaultProtection": "Configurações de Proteção Padrão", - "defaultProtectionHelp": "Essas configurações se aplicam a todos os novos eventos. Eventos individuais podem substituir esses padrões.", + "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": "Habilitar detecção de DevTools por padrão", - "enableCanvas": "Habilitar renderização em canvas por padrão (proteção avançada)", - "rateLimiting": "Limitação de Taxa", - "rateLimitingHelp": "Limite quantas imagens podem ser solicitadas para evitar raspagem.", - "requestsPerMinute": "Solicitações por minuto", - "requestsPer5Minutes": "Solicitações por 5 min", - "requestsPerHour": "Solicitações por hora", + "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 de atividade suspeita", - "autoBlockThreshold": "Limite de bloqueio automático", - "enableMonitoring": "Habilitar monitoramento de segurança", - "blockSuspiciousIps": "Bloquear automaticamente IPs suspeitos", + "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 Proteção de Imagens", - "infoText": "Esses recursos de proteção ajudam a evitar downloads e cópias não autorizados, mas não podem bloquear todos os métodos. Usuários determinados ainda podem encontrar formas de capturar imagens. Considere usar marcas d'água e contratos legais para proteção abrangente." + "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 a filtrar", + "enterWord": "Digite a palavra para filtrar", "searchFilters": "Buscar filtros...", - "filterAdded": "Filtro de palavra adicionado com sucesso", - "filterExists": "Este filtro de palavra já existe", - "addError": "Falha ao adicionar filtro de palavra", - "filterUpdated": "Filtro de palavra atualizado com sucesso", - "updateError": "Falha ao atualizar filtro de palavra", - "filterDeleted": "Filtro de palavra excluído com sucesso", - "deleteError": "Falha ao excluir filtro de palavra", - "wordRequired": "Por favor, digite uma palavra para filtrar", - "confirmDelete": "Tem certeza de que deseja excluir este filtro de palavra?", - "loading": "Carregando filtros de palavras...", - "noMatchingFilters": "Nenhum filtro correspondente encontrado", - "noFilters": "Nenhum filtro de palavra configurado ainda", - "severityLow": "Baixo", - "severityModerate": "Moderado", - "severityHigh": "Alto", + "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 Severidade", - "lowDescription": "A palavra é sinalizada para revisão, mas não bloqueada automaticamente", - "moderateDescription": "O comentário requer aprovação manual antes de ser visível", - "highDescription": "O comentário é ocultado automaticamente e requer revisão do administrador", - "blockDescription": "O comentário é rejeitado imediatamente e não pode ser enviado" + "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" @@ -961,132 +961,132 @@ "thumbnails": { "title": "Miniaturas", "dimensionsTitle": "Dimensões e Qualidade das Miniaturas", - "dimensionsHelp": "Configure o tamanho e a qualidade das miniaturas geradas automaticamente. Valores mais altos produzem pré-visualizações de melhor aparência, mas aumentam o armazenamento e os tempos de carregamento.", + "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 mas arquivos maiores", + "qualityHelp": "1-100 (maior = melhor qualidade, arquivo maior)", "format": "Formato", "fit": "Modo de Ajuste", - "fitHelp": "Como as imagens são redimensionadas para caber nas dimensões da miniatura. \"Cobrir\" corta para preencher, \"Conter\" cabe dentro dos limites.", - "fit_cover": "Cobrir (cortar para preencher)", - "fit_contain": "Conter (caber dentro)", - "fit_fill": "Preencher (esticar)", - "fit_inside": "Interior (reduzir para caber)", - "fit_outside": "Exterior (expandir para cobrir)", + "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 de miniaturas, regenere todas as miniaturas existentes para aplicar a nova configuração. Isso é executado em segundo plano e pode demorar para galerias grandes.", + "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 de miniaturas", + "regenerateError": "Falha ao iniciar regeneração", "saveSuccess": "Configurações de miniaturas salvas", - "saveError": "Falha ao salvar configurações de miniaturas", - "loadError": "Falha ao carregar configurações de miniaturas", + "saveError": "Falha ao salvar configurações", + "loadError": "Falha ao carregar configurações", "infoTitle": "Sobre Miniaturas", - "infoText": "As miniaturas são imagens de pré-visualização menores geradas a partir dos originais. Aumentar o tamanho ou a qualidade melhora a aparência das fotos na grade da galeria, mas usa mais armazenamento e largura de banda. Após alterar as configurações, use \"Regenerar Todas as Miniaturas\" para atualizar as fotos existentes." + "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 Robôs", - "indexingTitle": "Indexação por Mecanismos de Busca", - "allowIndexing": "Permitir indexação por mecanismos de busca", - "allowIndexingHelp": "Quando desabilitado, todos os rastreadores são bloqueados via robots.txt. Recomendado desativado para plataformas de fotos privadas.", + "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 rastreadores de IA/LLM", - "blockAiCrawlersHelp": "Impedir que bots de treinamento de IA acessem seu conteúdo.", + "blockAiCrawlers": "Bloquear crawlers de IA/LLM", + "blockAiCrawlersHelp": "Impede bots de treinamento de IA de acessarem seu conteúdo.", "blockedAgents": "Agentes de IA bloqueados", - "addAgentPlaceholder": "Digite o nome do agente...", - "blockSocialBots": "Bloquear bots de pré-visualização de redes sociais", - "blockSocialBotsHelp": "Impedir pré-visualizações de links no Twitter, Facebook, LinkedIn, etc.", - "metaTagsTitle": "Meta Tags e Regras Personalizadas", + "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": "Informa aos mecanismos de busca para não indexar páginas (nível HTML, complementa robots.txt).", + "metaNoindexHelp": "Diz aos buscadores para não indexarem as páginas.", "metaNofollow": "Adicionar meta tag nofollow", - "metaNofollowHelp": "Informa aos mecanismos de busca para não seguir links nas páginas.", + "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 treinamento de IA.", - "customRules": "Regras personalizadas de robots.txt", + "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 para Disallow", - "showPreview": "Mostrar pré-visualização do robots.txt", - "hidePreview": "Ocultar pré-visualização do robots.txt", + "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álises", + "title": "Análise", "umamiIntegration": "Integração com Umami Analytics", - "enableUmami": "Habilitar Umami Analytics", + "enableUmami": "Ativar Umami Analytics", "umamiUrl": "URL do Umami", - "umamiUrlHelp": "A URL da sua instância do Umami (ex.: https://analytics.seudominio.com)", - "websiteId": "ID do Site", - "websiteIdHelp": "O ID do seu site no Umami (encontrado no painel 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 de compartilhamento para incorporar o painel completo (criar no Umami)", + "shareUrlHelp": "URL pública para incorporar o painel completo", "umamiInfo": "Sobre o Umami Analytics", - "umamiInfoText": "O Umami é uma plataforma de análises open-source focada em privacidade. Rastreia visualizações de página, visitantes únicos e eventos personalizados sem usar cookies.", + "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álises", - "backendAnalytics": "Análises do Backend", - "backendAnalyticsText": "O sistema também rastreia análises básicas no lado do servidor para monitoramento de segurança e desempenho.", - "tracked": "Métricas Rastreadas", - "galleryViews": "Visualizações de página da galeria", - "photoDownloads": "Downloads individuais e em massa", + "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 dispositivo por user agents", + "deviceTypes": "Tipos de dispositivos", "privacy": "Privacidade", - "privacyText": "Os endereços IP são hasheados para privacidade. Nenhum dado pessoal é armazenado. Os dados de análises são retidos por 90 dias." + "privacyText": "Endereços IP são anonimizados. Dados são retidos por 90 dias." } }, "analytics": { - "title": "Painel de Análises", + "title": "Painel de Análise", "titleSimple": "Análises", - "subtitle": "Acompanhe o desempenho das galerias e o engajamento dos visitantes", - "detailedSubtitle": "Análises detalhadas fornecidas pelo Umami", + "subtitle": "Acompanhe a performance das galerias e o engajamento", + "detailedSubtitle": "Análises detalhadas via Umami", "loadingAnalytics": "Carregando análises...", - "showSummaryView": "Mostrar Visão Resumida", + "showSummaryView": "Ver Resumo", "fullDashboard": "Painel Completo", "refresh": "Atualizar", "last7Days": "Últimos 7 dias", "last30Days": "Últimos 30 dias", "last90Days": "Últimos 90 dias", - "pageViews": "Visualizações de Página", + "pageViews": "Visualizações", "uniqueVisitors": "Visitantes Únicos", - "totalDownloads": "Total de Downloads", - "topGallery": "Galeria Mais Visitada", - "topPages": "Páginas Mais Visitadas", + "totalDownloads": "Downloads Totais", + "topGallery": "Melhor Galeria", + "topPages": "Páginas Principais", "views": "visualizações", "visitors": "visitantes únicos", - "topDownloadsByGallery": "Top Downloads por Galeria", - "deviceBreakdown": "Distribuição por Dispositivo", + "topDownloadsByGallery": "Downloads por Galeria", + "deviceBreakdown": "Uso por Dispositivo", "desktop": "Desktop", - "mobile": "Mobile", + "mobile": "Celular", "tablet": "Tablet", - "storageUsage": "Uso de Armazenamento", - "used": "Utilizado", + "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 de análises, configure o Umami nas variáveis de ambiente e nas configurações do painel administrativo.", - "noData": "Nenhum dado disponível", + "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": "Identidade Visual e Temas", - "titleFull": "Identidade Visual e Personalização", + "title": "Marca e Temas", + "titleFull": "Identidade Visual e Customização", "subtitle": "Personalize a aparência das suas galerias", - "loadingBranding": "Carregando configurações de identidade visual...", + "loadingBranding": "Carregando identidade visual...", "themeAndStyle": "Tema e Estilo", "companyInfo": "Informações da Empresa", "companyName": "Nome da Empresa", - "companyNameHelp": "Exibido nos cabeçalhos das galerias e nos emails", + "companyNameHelp": "Exibido no cabeçalho das galerias e e-mails", "companyTagline": "Slogan da Empresa", - "companyTaglineHelp": "Uma breve descrição do seu negócio", - "supportEmail": "Email de Suporte", - "supportEmailHelp": "email de contato para suporte aos convidados", + "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", @@ -1098,26 +1098,26 @@ "currentFavicon": "Favicon atual", "uploadFavicon": "Enviar Favicon", "removeFavicon": "Remover Favicon", - "faviconHelp": "Formato PNG ou ICO, tamanho recomendado: 32x32px", - "watermark": "Marca d'Água", - "watermarkSettings": "Configurações de Marca d'Água", - "enableWatermarks": "Habilitar Marcas d'Água", - "watermarkHelp": "Adicione o nome da sua empresa como marca d'água nas fotos baixadas", - "watermarkLogo": "Logo da Marca d'Água", + "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 para Marca d'Água", - "watermarkPosition": "Posição da Marca d'Água", - "topLeft": "Superior Esquerdo", - "topRight": "Superior Direito", + "uploadWatermarkLogo": "Enviar Logo da Marca d'água", + "watermarkPosition": "Posição da Marca d'água", + "topLeft": "Superior Esquerda", + "topRight": "Superior Direita", "center": "Centro", - "bottomLeft": "Inferior Esquerdo", - "bottomRight": "Inferior Direito", - "watermarkOpacity": "Opacidade da Marca d'Água", - "watermarkSize": "Tamanho da Marca d'Água", + "bottomLeft": "Inferior Esquerda", + "bottomRight": "Inferior Direita", + "watermarkOpacity": "Opacidade", + "watermarkSize": "Tamanho", "theme": "Tema", "galleryTheme": "Tema da Galeria", - "themeCustomization": "Personalização do Tema", - "selectPreset": "Selecione um tema predefinido", + "themeCustomization": "Customização do Tema", + "selectPreset": "Selecione um tema pronto", "colors": "Cores", "primaryColor": "Cor Primária", "secondaryColor": "Cor Secundária", @@ -1128,32 +1128,32 @@ "colorModeLight": "Claro", "colorModeDark": "Escuro", "colorModeAuto": "Automático", - "colorModeHelp": "Automático segue a preferência do sistema do visitante.", + "colorModeHelp": "Segue a preferência do sistema do visitante.", "customCSS": "CSS Personalizado", - "preview": "Pré-visualização", - "previewInNewTab": "Pré-visualizar em Nova Aba", + "preview": "Prévia", + "previewInNewTab": "Abrir prévia em nova aba", "reset": "Redefinir", "saveChanges": "Salvar Alterações", - "applyLivePreview": "Aplicar alterações imediatamente (Pré-visualização ao Vivo)", - "eventSpecificThemes": "Temas Específicos do Evento", - "eventThemesInfo": "Você pode substituir essas configurações de tema globais para eventos individuais ao criá-los ou editá-los.", - "themePresets": "Temas Predefinidos", + "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": "Layout de grade clássico com tamanhos de foto uniformes", - "masonry": "Layout estilo Pinterest com alturas variadas", - "carousel": "Slideshow em tela cheia com navegação", + "grid": "Grade clássica com tamanhos consistentes", + "masonry": "Estilo Pinterest com alturas variadas", + "carousel": "Slideshow em tela cheia", "timeline": "Fotos organizadas por data", - "hero": "Imagem em destaque com grade abaixo", + "hero": "Destaque no topo e grade abaixo", "mosaic": "Layout artístico com tamanhos mistos", - "justified": "Layout baseado em linhas preservando as proporções", - "gallery-premium": "Tema claro elegante com hero e masonry (Beta)", - "gallery-story": "Tema escuro cinematográfico com seções de cenas (Beta)" + "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 das Fotos", + "photoSpacing": "Espaçamento entre Fotos", "spacing": { - "tight": "Compacto", + "tight": "Justo", "normal": "Normal", "relaxed": "Espaçado" }, @@ -1162,14 +1162,14 @@ "none": "Nenhuma", "fade": "Fade", "scale": "Escala", - "slide": "Deslizamento" + "slide": "Deslizar" }, "columns": "Colunas", - "mobile": "Mobile", + "mobile": "Celular", "tablet": "Tablet", "desktop": "Desktop", - "enableAutoplay": "Habilitar Reprodução Automática", - "autoplayInterval": "Intervalo de Reprodução Automática (segundos)", + "enableAutoplay": "Ativar Autoplay", + "autoplayInterval": "Intervalo do Autoplay (segundos)", "groupPhotosBy": "Agrupar Fotos Por", "grouping": { "day": "Dia", @@ -1178,24 +1178,24 @@ }, "masonryMode": "Modo de Layout", "masonryModeOptions": { - "columns": "Colunas (estilo Pinterest)", - "rows": "Linhas (Justified personalizado)", - "flickr": "Flickr (Justified testado)", - "justified": "Google Fotos (algoritmo Knuth-Plass)" + "columns": "Colunas (Estilo Pinterest)", + "rows": "Linhas (Justificado customizado)", + "flickr": "Flickr (Justificado clássico)", + "justified": "Google Photos (Algoritmo Knuth-Plass)" }, "masonryModeHint": { - "columns": "Colunas verticais estilo Pinterest com alturas variadas", - "rows": "Layout justified por linhas personalizado", - "flickr": "Algoritmo de layout justified open-source do Flickr", - "justified": "Layout de linhas estilo Google Fotos usando o algoritmo Knuth-Plass para quebras otimizadas" + "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 serão dimensionadas para caber nas linhas.", + "targetRowHeightHint": "Altura em pixels (150-400). As fotos escalam para caber.", "lastRowBehavior": "Alinhamento da Última Linha", "lastRowOptions": { "left": "Alinhado à esquerda", "center": "Centralizado", - "justify": "Justified (esticado)" + "justify": "Justificado (esticar)" }, "thumbnailScale": "Escala de Miniaturas", "thumbnailScaleOptions": { @@ -1207,18 +1207,18 @@ }, "thumbnailScaleHint": "Ajusta a contagem de colunas em relação às colunas base da grade", "showHeroSection": "Mostrar Seção Hero", - "showHeroSectionHint": "Exibir uma imagem hero em destaque acima da galeria justified", + "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 do Overlay Hero", - "heroOverlayHint": "Escureça a imagem hero para melhorar a legibilidade do texto", + "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 dos Títulos", + "headingFont": "Fonte de Títulos", "sameAsBody": "Igual ao corpo", "fontSize": "Tamanho da Fonte", "fontSizes": { @@ -1247,39 +1247,39 @@ "grid": "Grade", "waves": "Ondas" }, - "customCSSHelp": "Avançado: Adicione CSS personalizado para personalizar ainda mais a aparência", + "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 essas variáveis CSS para corresponder aos seus temas predefinidos:", - "layouts": "Layouts de Galeria Personalizados", - "layoutsDesc": "Direcione elementos da galeria com esses seletores:", + "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 de vidro modernos:", + "glassEffectDesc": "Crie efeitos modernos de vidro:", "tip": "Dica", - "tipText": "Use Modelos de CSS em Configurações > Modelos CSS para designs pré-construídos como Apple Liquid Glass." + "tipText": "Use Modelos CSS em Configurações > Modelos CSS para designs prontos." }, - "resetToDefault": "Redefinir para Padrão", + "resetToDefault": "Redefinir para o Padrão", "applyTheme": "Aplicar Tema", "customTheme": "Tema Personalizado", "customizeTheme": "Personalizar Tema", "saveTheme": "Salvar Tema", - "previewLayout": "Pré-visualizar Layout", - "livePreview": "Pré-visualização ao Vivo", - "heroPlaceholderText": "A foto hero do seu evento aparecerá aqui", + "previewLayout": "Visualizar Layout", + "livePreview": "Prévia ao Vivo", + "heroPlaceholderText": "A foto de destaque do seu evento aparecerá aqui", "whiteLabel": "White Label", - "hidePoweredBy": "Ocultar marca \"Desenvolvido por PicPeak\"", - "hidePoweredByHelp": "Remover a atribuição do PicPeak dos rodapés das galerias para uma experiência totalmente white-label", - "logoCustomization": "Personalização do Logo", + "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": "Pequeno (32px)", - "logoSizeMedium": "Médio (48px)", + "logoSizeSmall": "Pequena (32px)", + "logoSizeMedium": "Média (48px)", "logoSizeLarge": "Grande (64px)", "logoSizeXLarge": "Extra Grande (96px)", - "logoSizeCustom": "Personalizado", + "logoSizeCustom": "Customizado", "logoMaxHeight": "Altura Máxima (pixels)", - "logoMaxHeightHelp": "Defina uma altura máxima personalizada para o logo (20-200 pixels)", - "logoPosition": "Posição do Logo no Cabeçalho", + "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", @@ -1287,28 +1287,28 @@ "logoOnly": "Apenas Logo", "textOnly": "Apenas Nome da Empresa", "logoAndText": "Logo e Nome da Empresa", - "showLogoInHeader": "Mostrar logo no cabeçalho da galeria", - "showLogoInHeaderHelp": "Exibir o logo na barra de cabeçalho principal", - "showLogoInHero": "Mostrar logo na seção hero", - "showLogoInHeroHelp": "Exibir o logo nas seções hero (para layouts não-grade)", + "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 cabeçalho da galeria é exibido. O estilo do cabeçalho é independente do layout das fotos.", + "headerStyleDescription": "Escolha como o topo da galeria aparece.", "headerStyleOptions": { - "hero": "Imagem Hero", - "standard": "Padrão", + "hero": "Imagem de Destaque (Hero)", + "standard": "Banner Padrão", "banner": "Banner", "minimal": "Minimalista", "none": "Sem Cabeçalho" }, "headerStyleDescriptions": { - "hero": "Imagem em altura total com sobreposição de informações do evento", - "standard": "Cabeçalho compacto com detalhes do evento", + "hero": "Imagem de tela cheia com info sobreposta", + "standard": "Banner clássico com detalhes do evento", "banner": "Cabeçalho padrão com banner colorido acima", - "minimal": "Cabeçalho compacto com informações essenciais", - "none": "Ocultar cabeçalho completamente" + "minimal": "Cabeçalho compacto com o essencial", + "none": "Oculta o cabeçalho completamente" }, "heroDividerStyle": "Estilo do Divisor", - "heroDividerDescription": "Escolha como é a transição entre a imagem hero e o conteúdo da galeria.", + "heroDividerDescription": "Transição entre a imagem de destaque e o conteúdo.", "dividerOptions": { "wave": "Onda", "straight": "Reto", @@ -1317,16 +1317,16 @@ "none": "Nenhum" }, "controlsStyle": "Estilo dos Controles", - "controlsStyleDescription": "Escolha como os filtros e controles da galeria são exibidos.", + "controlsStyleDescription": "Escolha como filtros e controles são exibidos.", "controlsStyleOptions": { "classic": "Clássico", "sidebar": "Barra Lateral" }, "controlsStyleDescriptions": { - "classic": "Barra de filtros inline abaixo do cabeçalho", - "sidebar": "Botão de menu abre barra lateral com filtros" + "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 para evitar que os controles apareçam acima da imagem hero.", + "controlsStyleHeroWarning": "A barra lateral é recomendada para cabeçalhos Hero.", "betaThumbnailWarningTitle": "Baixa resolução de miniatura detectada", "betaThumbnailWarningText": "Suas miniaturas são atualmente {{width}}×{{height}}px. Temas beta exibem fotos em tamanhos maiores e requerem pelo menos {{recommended}}×{{recommended}}px para boa qualidade. Aumente as dimensões das miniaturas em Configurações > Miniaturas e regenere.", "betaThumbnailWarningLink": "Ir para configurações de miniaturas" @@ -1338,9 +1338,9 @@ "systemStatus": "Status do Sistema", "totalEvents": "Total de Eventos", "activeGalleries": "Galerias Ativas", - "storageUsed": "Armazenamento Usado", + "storageUsed": "Espaço Utilizado", "totalPhotos": "Total de Fotos", - "storagePercent": "{{percent}}% do limite {{limit}}", + "storagePercent": "{{percent}}% do limite de {{limit}}", "storageSoftLimitConfigured": "Limite configurado: {{limit}}", "storageSoftLimitRecommended": "Limite sugerido: {{limit}}", "version": "Versão", @@ -1354,16 +1354,16 @@ }, "updates": { "available": "Atualização Disponível", - "newVersion": "A versão {{version}} está 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 Versão", + "viewReleaseNotes": "Ver Notas de Lançamento", "updateAvailableShort": "v{{version}} disponível", "checkForUpdates": "Verificar Atualizações", - "upToDate": "Você está atualizado", + "upToDate": "Sistema atualizado", "lastChecked": "Última verificação: {{time}}", "updateNow": "Atualizar Agora", "updateDialog": { @@ -1373,22 +1373,22 @@ "updateCommands": "Comandos de Atualização:", "afterUpdating": "Após atualizar:", "copyAllCommands": "Copiar Todos os Comandos", - "completeChecklist": "Complete a lista de verificação antes de atualizar", - "error": "Falha ao carregar as instruções de atualização" + "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": "Nenhuma notificação nova", - "markAllRead": "Marcar todas como lidas", + "noNotifications": "Sem novas notificações", + "markAllRead": "Marcar tudo como lido", "clearAll": "Limpar tudo", "close": "Fechar", "noNotificationsMessage": "Nenhuma notificação", "notificationMessages": { - "eventCreated": "Novo evento \"{{eventName}}\" foi criado", - "eventArchived": "Evento \"{{eventName}}\" foi arquivado", - "eventUpdated": "Evento \"{{eventName}}\" foi atualizado", - "eventDeleted": "Evento \"{{eventName}}\" foi excluído", + "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}}\"", @@ -1397,57 +1397,57 @@ "passwordChanged": "Senha alterada por {{actorName}}", "passwordReset": "Senha redefinida para \"{{eventName}}\"", "settingsUpdated": "Configurações de {{type}} atualizadas", - "emailTemplateUpdated": "Modelo de email \"{{template}}\" atualizado", + "emailTemplateUpdated": "Modelo de e-mail \"{{template}}\" atualizado", "bulkDownload": "{{count}} fotos baixadas de \"{{eventName}}\"", "storageWarning": "Uso de armazenamento em {{percentage}}%", - "adminLogout": "Admin {{actorName}} encerrou a sessão", + "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 email atualizada", + "emailConfigUpdated": "Configuração de e-mail atualizada", "faviconUploaded": "Favicon enviado", - "brandingUpdated": "Configurações de identidade visual atualizadas", + "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 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": "{{count}} notificações apagadas", + "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": "Mudar para modo escuro", - "lightMode": "Mudar para modo claro", + "darkMode": "Alternar para modo escuro", + "lightMode": "Alternar para modo claro", "accountSettings": { - "title": "Conta admin", - "description": "Atualize as credenciais usadas para entrar no PicPeak.", - "username": "Nome de usuário", + "title": "Conta Admin", + "description": "Atualize as credenciais de acesso ao PicPeak.", + "username": "Usuário", "usernamePlaceholder": "Admin", - "email": "Email", - "emailPlaceholder": "admin@example.com", + "email": "E-mail", + "emailPlaceholder": "admin@exemplo.com", "updateButton": "Atualizar perfil" }, - "profileUpdateError": "Não foi possível atualizar o perfil admin. Por favor, tente novamente.", + "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", "totalViews": "Total de Visualizações", "downloads": "Downloads", - "percentFromLastWeek": "{{percent}}% da semana passada", - "dashboardSubtitle": "Bem-vindo de volta! Veja o que está acontecendo com suas galerias.", + "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 expirando nos próximos 7 dias", + "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", @@ -1463,9 +1463,9 @@ "archive_restored": "Arquivo restaurado: {{eventName}}", "archive_deleted": "Arquivo excluído: {{eventName}}", "archive_downloaded": "Arquivo baixado: {{eventName}}", - "email_config_updated": "Configuração de email atualizada", - "email_template_updated": "Modelo de email atualizado: {{template}}", - "branding_updated": "Configurações de identidade visual atualizadas", + "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}}", @@ -1477,13 +1477,13 @@ "photo_favorite": "Foto favoritada em {{eventName}}", "photo_rating": "Foto avaliada em {{eventName}}", "photo_comment": "Foto comentada em {{eventName}}", - "guest_feedback_like": "Visitante curtiu uma foto em {{eventName}}", - "guest_feedback_favorite": "Visitante favoritou uma foto em {{eventName}}", - "guest_feedback_rating": "Visitante avaliou uma foto em {{eventName}}", - "guest_feedback_comment": "Visitante comentou em uma foto 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 massa concluído", + "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}}", @@ -1493,7 +1493,7 @@ "event_renamed": "Evento renomeado: {{eventName}}", "event_deleted": "Evento excluído: {{eventName}}", "password_changed": "Senha alterada", - "email_resent": "Email de criação reenviado para: {{eventName}}", + "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}}", @@ -1503,7 +1503,7 @@ "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}} encerrou a sessão", + "admin_logout": "Admin {{actorName}} saiu", "system_activity": "Atividade do sistema: {{type}}", "unknown": "Atividade desconhecida" }, @@ -1521,14 +1521,14 @@ "inactive": "Inativo" }, "inviteForm": { - "email": "Endereço de Email", + "email": "Endereço de E-mail", "role": "Função", "send": "Enviar Convite" }, "acceptInvite": { "title": "Aceitar Convite de Admin", - "username": "Escolha um Nome de Usuário", - "password": "Criar Senha", + "username": "Escolha um Usuário", + "password": "Crie uma Senha", "submit": "Criar Conta" }, "photos": { @@ -1541,21 +1541,21 @@ }, "permissions": { "insufficient": "Você não tem permissão para realizar esta ação", - "viewOnly": "Somente Visualização" + "viewOnly": "Apenas Visualização" }, "acceptInvitation": { "title": "Aceitar Convite", - "subtitle": "Crie sua conta admin", + "subtitle": "Crie sua conta administrativa", "validating": "Validando convite...", "invalidToken": "Convite Inválido", - "invalidTokenMessage": "Este link de convite é inválido ou expirou. Entre em contato com seu administrador para um novo convite.", + "invalidTokenMessage": "Este link de convite é inválido ou expirou. Contate o administrador.", "expiredToken": "Convite Expirado", - "expiredTokenMessage": "Este convite expirou. Solicite um novo convite ao seu administrador.", + "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": "Nome de usuário", + "usernameLabel": "Usuário", "usernamePlaceholder": "Escolha um nome de usuário", "usernameHelp": "3-50 caracteres, apenas letras, números, sublinhados e hífens", "passwordLabel": "Senha", @@ -1580,25 +1580,25 @@ "createAccount": "Criar Conta", "creating": "Criando conta...", "success": "Conta Criada!", - "successMessage": "Sua conta foi criada com sucesso. Agora você pode entrar com suas credenciais.", - "redirecting": "Redirecionando para o login em {{seconds}}...", + "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 seu administrador para solicitar um novo convite.", + "contactAdminMessage": "Entre em contato com o administrador para solicitar um novo convite.", "passwordsMatch": "As senhas coincidem", - "alreadyHaveAccount": "Já tem uma conta?", + "alreadyHaveAccount": "Já possui uma conta?", "signIn": "Entrar", "errors": { - "usernameRequired": "Nome de usuário é obrigatório", - "usernameTooShort": "O nome de usuário deve ter pelo menos 3 caracteres", - "usernameTooLong": "O nome de usuário deve ter no máximo 50 caracteres", - "usernameInvalid": "O nome de usuário só pode conter letras, números, sublinhados e hífens", + "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": "Por favor, confirme sua senha", + "confirmPasswordRequired": "Confirme sua senha", "usernameTaken": "Este nome de usuário já está em uso", - "emailTaken": "Já existe uma conta com este email", - "genericError": "Falha ao criar conta. Por favor, tente novamente." + "emailTaken": "Uma conta com este e-mail já existe", + "genericError": "Falha ao criar conta. Tente novamente." } }, "errors": { @@ -1606,30 +1606,30 @@ "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. Entre em contato com o organizador do evento se precisar de acesso a estas fotos.", - "unauthorized": "Não Autorizado", - "forbidden": "Acesso Negado", + "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": "Por favor, tente novamente mais tarde", - "refreshPage": "Recarregar Página", + "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 a Página Inicial", + "goToHomepage": "Ir para Página Inicial", "errorDetails": "Detalhes do Erro", - "requiredFields": "Por favor, preencha todos os campos obrigatórios", - "enterTestEmail": "Por favor, insira um endereço de email de teste", + "requiredFields": "Preencha todos os campos obrigatórios", + "enterTestEmail": "Insira um endereço de e-mail para teste", "failedToCreateEvent": "Falha ao criar evento", - "eventCreationFailed": "Falha ao criar evento", - "networkError": "Erro de rede. Por favor, verifique sua conexão e tente novamente.", - "sessionExpired": "Sessão expirada. Por favor, faça login novamente." + "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 email do cliente é obrigatório", + "hostEmailRequired": "O e-mail do cliente é obrigatório", "hostNameRequired": "O nome do cliente é obrigatório", - "adminEmailRequired": "O email do admin é obrigatório", - "invalidEmailFormat": "Formato de email inválido", + "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", @@ -1647,8 +1647,8 @@ "saveError": "Falha ao salvar alterações", "deleteSuccess": "Excluído com sucesso", "deleteError": "Falha ao excluir", - "uploadSuccess": "Upload concluído com sucesso", - "uploadError": "Falha no upload", + "uploadSuccess": "Envio concluído com sucesso", + "uploadError": "Falha no envio", "loginSuccess": "Login realizado com sucesso", "loginError": "Falha no login", "passwordChanged": "Senha alterada com sucesso", @@ -1662,60 +1662,60 @@ "categoryAdded": "Categoria adicionada com sucesso", "categoryDeleted": "Categoria excluída com sucesso", "categoryUpdated": "Categoria atualizada com sucesso", - "emailConfigSaved": "Configuração de email salva com sucesso", - "testEmailSent": "Email de teste enviado 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 Email", - "subtitle": "Configure as definições de email para notificações", - "loadingSettings": "Carregando configurações de 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": "Host SMTP", - "smtpHostHelp": "O nome do host do seu servidor de email", + "smtpHost": "Servidor SMTP", + "smtpHostHelp": "O hostname do seu servidor de e-mail", "smtpPort": "Porta SMTP", - "smtpPortHelp": "Geralmente 587 para TLS, 465 para SSL, 25 para sem criptografia", + "smtpPortHelp": "Geralmente 587 (TLS), 465 (SSL) ou 25", "smtpSecure": "Usar SSL/TLS", - "smtpSecureHelp": "Ative para transmissão segura de email", + "smtpSecureHelp": "Ative para transmissão segura de e-mail", "smtpUsername": "Usuário SMTP", - "smtpUsernameHelp": "O nome de usuário da sua conta de email", + "smtpUsernameHelp": "Seu usuário da conta de e-mail", "smtpPassword": "Senha SMTP", - "smtpPasswordHelp": "A senha da sua conta de email", + "smtpPasswordHelp": "Sua senha da conta de e-mail", "fromDetails": "Detalhes do Remetente", - "fromEmail": "Email do Remetente", - "fromEmailHelp": "Endereço de email que aparece como remetente", + "fromEmail": "E-mail de Origem", + "fromEmailHelp": "Endereço que aparecerá como remetente", "fromName": "Nome do Remetente", - "fromNameHelp": "Nome que aparece como remetente", + "fromNameHelp": "Nome que aparecerá como remetente", "testConfiguration": "Testar Configuração", - "testEmail": "Endereço de Email de Teste", - "testEmailHelp": "Envie um email de teste para verificar as configurações", - "sendTestEmail": "Enviar Email de Teste", + "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 Email", + "emailTemplates": "Modelos de E-mail", "templateVariables": "Variáveis Disponíveis", - "previewTemplate": "Pré-visualizar Modelo", + "previewTemplate": "Visualizar Modelo", "smtpSettings": "Configurações SMTP", - "testEmailSuccess": "Email de teste enviado com sucesso", - "saveSmtpSettings": "Salvar Configurações SMTP", - "testEmailSection": "Email de Teste", + "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": "Certifique-se de que seu firewall permite SMTP de saída", - "gmailAppPassword": "Para Gmail, use uma senha específica de aplicativo", - "testEmailAddressLabel": "Endereço de Email de Teste", - "sendTestEmailButton": "Enviar Email de Teste", - "commonSmtpSettings": "Configurações SMTP Comuns:", + "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 Email", - "preview": "Pré-visualizar", + "emailBody": "Corpo do E-mail", + "preview": "Visualizar", "save": "Salvar", "saveChanges": "Salvar Alterações", "templates": "Modelos", - "variableHelp": "Use estas variáveis no seu modelo. Elas serão substituídas pelos valores reais quando os emails forem enviados.", + "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", @@ -1723,7 +1723,7 @@ "enterPassword": "Digite a senha", "required": "obrigatório", "ignoreSslErrors": "Ignorar erros de certificado SSL/TLS", - "ignoreSslWarning": "Aviso: Desativar a verificação de certificado torna a conexão vulnerável a ataques man-in-the-middle. Ative isso somente se você confia no servidor SMTP e compreende as implicações de segurança.", + "ignoreSslWarning": "Aviso: Desabilitar a verificação torna a conexão vulnerável. Ative apenas se confiar no servidor.", "brandingTitle": "Identidade Visual do Email", "brandingDescription": "Personalize as cores usadas nos modelos de email. As alterações se aplicam à barra de cabeçalho, botões, links e fundo do rodapé.", "primaryColor": "Cor Primária", @@ -1759,10 +1759,10 @@ }, "cms": { "title": "Páginas CMS", - "subtitle": "Gerencie páginas legais e informativas", + "subtitle": "Gerenciar páginas legais e informativas", "loadingPages": "Carregando páginas...", "pages": "Páginas", - "previewLinks": "Links de Visualização", + "previewLinks": "Links de Prévia", "englishVersion": "Versão em Inglês", "germanVersion": "Versão em Alemão", "editPage": "Editar {{page}}", @@ -1794,10 +1794,10 @@ "createError": "Falha ao criar tipo de evento", "updateError": "Falha ao atualizar tipo de evento", "deleteError": "Falha ao excluir tipo de evento", - "searchPlaceholder": "Pesquisar tipos de evento...", + "searchPlaceholder": "Buscar tipos de evento...", "showInactive": "Mostrar inativos", "noResults": "Nenhum tipo de evento encontrado", - "empty": "Nenhum tipo de evento ainda", + "empty": "Nenhum tipo de evento cadastrado", "system": "Sistema", "table": { "type": "Tipo", @@ -1808,36 +1808,36 @@ }, "form": { "name": "Nome de Exibição", - "namePlaceholder": "ex.: Ensaio de Família", + "namePlaceholder": "ex: Ensaio de Família", "slugPrefix": "Prefixo de URL", - "slugPrefixPlaceholder": "ex.: familia", - "slugPreview": "URL de exemplo:", + "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 hifens são permitidos" + "slugFormat": "Apenas letras, números e hífens permitidos" }, "slugInfo": { - "title": "Informações sobre o Prefixo de URL:", - "description": "O prefixo de URL é usado para gerar as URLs das galerias. Por exemplo, um tipo de evento com o prefixo \"familia\" criará URLs como: familia-silva-familia-2025-01-22" + "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 está usando este tipo." + "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 de /external-media. Esses originais estão excluídos dos backups. Miniaturas e banco de dados ainda são incluídos no backup." + "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 automatizados e restaure a partir de backups anteriores.", + "subtitle": "Gerencie backups do sistema, configure backups automáticos e restaure dados.", "tabs": { "dashboard": "Painel", "configuration": "Configuração", @@ -1845,7 +1845,7 @@ "restore": "Restaurar" }, "status": { - "inProgress": "Backup em andamento...", + "inProgress": "Backup em progresso...", "lastBackup": "Último backup", "noBackups": "Nenhum backup encontrado", "nextBackup": "Próximo backup", @@ -1865,44 +1865,44 @@ "refresh": "Atualizar" }, "dashboard": { - "backupHealth": "Integridade do Backup", + "backupHealth": "Saúde do Backup", "healthStatus": { "excellent": "Excelente", - "good": "Bom", - "warning": "Atenção", - "critical": "Crítico" + "good": "Boa", + "warning": "Aviso", + "critical": "Crítica" }, "health": { - "title": "Integridade do Backup" + "title": "Saúde do Backup" }, "healthMessages": { "noBackups": "Nenhum backup encontrado", - "lastBackupFailed": "Último backup falhou", - "upToDate": "Backup está atualizado", - "recent": "Backup é recente", - "gettingOld": "Backup está ficando antigo", - "outdated": "Backup está desatualizado", + "lastBackupFailed": "O último backup falhou", + "upToDate": "Backup atualizado", + "recent": "Backup recente", + "gettingOld": "Backup ficando antigo", + "outdated": "Backup desatualizado", "failed": "Último backup falhou", "old": "Backup está ficando antigo" }, "stats": { "totalBackups": "Total de Backups", "backupSize": "Tamanho do Backup", - "lastDuration": "Duração do Último", + "lastDuration": "Última Duração", "backupStatus": "Status do Backup", "last": "Último", "files": "arquivos", "minutes": "{{count}}m", "active": "Ativo", "inactive": "Inativo", - "noBackupsYet": "Nenhum backup ainda" + "noBackupsYet": "Ainda sem backups" }, "recentActivity": { "title": "Atividade Recente de Backup" }, "notConfigured": { "title": "Backup Não Configurado", - "message": "Por favor, configure as definições de backup na aba Configuração antes de executar backups." + "message": "Configure as definições de backup na aba Configuração antes de executar." }, "actions": { "runBackupNow": "Executar Backup Agora", @@ -1918,59 +1918,59 @@ "excluded": "Excluído", "optional": "Opcional" }, - "storageDestination": "Destino de Armazenamento", + "storageDestination": "Destino do Armazenamento", "nextScheduledBackup": "Próximo Backup Agendado", "backupType": "Backup {{type}}", "noDestinationSet": "Nenhum destino definido" }, "configuration": { - "enableBackup": "Ativar Backups Automatizados", - "enableBackupHelp": "Criar backups automaticamente de acordo com o agendamento configurado", + "enableBackup": "Ativar Backups Automáticos", + "enableBackupHelp": "Criar backups automaticamente conforme o agendamento", "destinationType": "Destino do Backup", "destinationTypes": { "local": { "name": "Armazenamento Local", - "description": "Armazenar backups no sistema de arquivos local do servidor" + "description": "Armazena no sistema de arquivos do servidor local" }, "rsync": { "name": "Servidor Remoto (Rsync)", - "description": "Sincronizar backups para um servidor remoto via SSH/Rsync" + "description": "Sincroniza backups para um servidor remoto via SSH" }, "s3": { "name": "Armazenamento S3 Compatível", - "description": "Armazenar backups no Amazon S3 ou armazenamento de objetos compatível" + "description": "Armazena no Amazon S3 ou storage compatível" } }, "fields": { "destinationPath": "Caminho de Destino", - "destinationPathHelp": "Caminho do diretório local para armazenar backups", - "destinationPathPlaceholder": "/caminho/para/diretorio/backup", + "destinationPathHelp": "Diretório local para armazenar os backups", + "destinationPathPlaceholder": "/caminho/para/diretorio/de/backup", "rsyncHost": "Host Remoto", - "rsyncHostHelp": "Nome do host SSH ou endereço IP", + "rsyncHostHelp": "Hostname ou IP via SSH", "rsyncHostPlaceholder": "backup.exemplo.com", "rsyncUser": "Usuário SSH", - "rsyncUserHelp": "Nome de usuário para conexão SSH", + "rsyncUserHelp": "Usuário para conexão SSH", "rsyncUserPlaceholder": "usuario-backup", "rsyncPath": "Caminho Remoto", - "rsyncPathHelp": "Caminho do diretório no servidor remoto", - "rsyncPathPlaceholder": "/home/backup/compartilhamento-fotos", + "rsyncPathHelp": "Diretório no servidor remoto", + "rsyncPathPlaceholder": "/home/backup/fotos", "rsyncSshKey": "Chave Privada SSH", - "rsyncSshKeyHelp": "Chave privada SSH para autenticação (opcional)", + "rsyncSshKeyHelp": "Chave SSH para autenticação (opcional)", "rsyncSshKeyPlaceholder": "-----BEGIN RSA PRIVATE KEY-----", "s3Endpoint": "Endpoint S3", - "s3EndpointHelp": "Endpoint da API S3 (ex.: s3.amazonaws.com)", + "s3EndpointHelp": "URL da API S3 (ex: s3.amazonaws.com)", "s3EndpointPlaceholder": "https://s3.amazonaws.com", "s3Bucket": "Nome do Bucket", - "s3BucketHelp": "Bucket S3 para armazenar backups", + "s3BucketHelp": "Bucket S3 para os backups", "s3BucketPlaceholder": "meu-bucket-de-backup", "s3AccessKey": "ID da Chave de Acesso", - "s3AccessKeyHelp": "ID da chave de acesso AWS/S3", - "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXAMPLE", + "s3AccessKeyHelp": "ID da chave AWS/S3", + "s3AccessKeyPlaceholder": "AKIAIOSFODNN7EXEMPLO", "s3SecretKey": "Chave de Acesso Secreta", - "s3SecretKeyHelp": "Chave de acesso secreta AWS/S3", - "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", + "s3SecretKeyHelp": "Chave secreta AWS/S3", + "s3SecretKeyPlaceholder": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXEMPLO", "s3Region": "Região", - "s3RegionHelp": "Região S3 (ex.: us-east-1)", + "s3RegionHelp": "Região S3 (ex: us-east-1)", "s3RegionPlaceholder": "us-east-1" }, "schedule": { @@ -1978,54 +1978,54 @@ "scheduleType": "Tipo de Agendamento", "scheduleOptions": { "hourly": "A cada hora", - "daily": "Diariamente", - "weekly": "Semanalmente", + "daily": "Diário", + "weekly": "Semanal", "custom": "Expressão cron personalizada" }, "options": { "hourly": "A cada hora", - "daily": "Diariamente", - "weekly": "Semanalmente", + "daily": "Diário", + "weekly": "Semanal", "custom": "Expressão cron personalizada" }, "customCron": "Expressão Cron", - "customCronHelp": "Digite uma expressão cron válida (ex.: 0 3 * * *)", + "customCronHelp": "Insira uma expressão cron válida (ex: 0 3 * * *)", "retention": "Período de Retenção", "retentionDays": "Manter backups por", - "retentionHelp": "dias (backups mais antigos serão excluídos automaticamente)" + "retentionHelp": "dias (backups antigos serão excluídos automaticamente)" }, "whatToBackup": { - "title": "O Que Incluir no Backup", + "title": "O que incluir no Backup", "database": "Banco de Dados", - "databaseHelp": "Todos os dados de eventos, configurações e definições", + "databaseHelp": "Todos os eventos, configurações e dados", "photos": "Fotos", - "photosHelp": "Todas as fotos enviadas em galerias ativas", + "photosHelp": "Todas as fotos originais nas galerias ativas", "archives": "Arquivos", "archivesHelp": "Arquivos ZIP de eventos arquivados", "thumbnails": "Miniaturas", - "thumbnailsHelp": "Imagens de miniatura geradas (podem ser recriadas)", + "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": "Comprimir arquivos de backup para economizar espaço de armazenamento", + "compressionHelp": "Comprime os arquivos para economizar espaço", "encryption": "Ativar Criptografia", - "encryptionHelp": "Criptografar backups para segurança adicional", - "encryptionPassphrase": "Senha de Criptografia", - "encryptionPassphraseHelp": "Senha forte para criptografia de backup", - "confirmPassphrase": "Confirmar Senha", + "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": "Por favor, preencha todos os campos obrigatórios", + "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": "Por favor, preencha todos os campos obrigatórios", + "requiredFields": "Preencha todos os campos obrigatórios", "connectionSuccess": "Teste de conexão bem-sucedido!", "connectionFailed": "Teste de conexão falhou" }, @@ -2034,7 +2034,7 @@ "savingSettings": "Salvando..." }, "history": { - "searchPlaceholder": "Pesquisar backups...", + "searchPlaceholder": "Buscar backups...", "allStatus": "Todos os Status", "status": { "completed": "Concluído", @@ -2042,7 +2042,7 @@ "running": "Executando", "partial": "Parcial" }, - "deleteConfirm": "Tem certeza que deseja excluir este backup de {{date}}?", + "deleteConfirm": "Tem certeza que deseja excluir o backup de {{date}}?", "noBackups": "Nenhum backup encontrado", "tableHeaders": { "date": "Data", @@ -2065,7 +2065,7 @@ "destination": "Destino", "started": "Iniciado", "completed": "Concluído", - "contentBackedUp": "Conteúdo no Backup", + "contentBackedUp": "Conteúdo Incluído", "errorDetails": "Detalhes do Erro", "manifest": "Manifesto" }, @@ -2080,10 +2080,10 @@ "totalSize": "Tamanho Total", "compressionRatio": "Taxa de Compressão", "errorLog": "Log de Erros", - "noErrors": "Nenhum erro ocorreu" + "noErrors": "Nenhum erro ocorrido" }, "pagination": { - "showing": "Exibindo {{from}}-{{to}} de {{total}} backups", + "showing": "Mostrando {{from}}-{{to}} de {{total}} backups", "previous": "Anterior", "next": "Próximo" }, @@ -2095,7 +2095,7 @@ "partial": "Parcial" }, "noBackupsFound": "Nenhum backup encontrado", - "backupsWillAppear": "Os backups aparecerão aqui quando criados", + "backupsWillAppear": "Backups aparecerão aqui quando criados", "messages": { "deleteSuccess": "Backup excluído com sucesso" } @@ -2113,16 +2113,16 @@ "subtitle": "Escolha de onde restaurar o backup", "local": { "name": "Backup Local", - "description": "Restaurar a partir do sistema de arquivos local" + "description": "Restaurar do sistema de arquivos local" }, "s3": { "name": "Armazenamento S3", - "description": "Restaurar a partir do bucket S3" + "description": "Restaurar de um bucket S3" }, "upload": { "name": "Enviar Backup", - "description": "Enviar um arquivo de backup", - "comingSoon": "Funcionalidade de upload em breve" + "description": "Fazer upload de um arquivo de backup", + "comingSoon": "Funcionalidade de upload disponível em breve" }, "configuration": { "s3": "Configuração S3", @@ -2137,29 +2137,29 @@ "subtitle": "Selecione entre os backups disponíveis", "noBackupsFound": "Nenhum backup encontrado na origem selecionada", "encrypted": "Backup Criptografado", - "encryptedMessage": "Você precisará fornecer a senha de criptografia para restaurar este backup.", - "enterPassphrase": "Digite a senha de criptografia", - "at": "às" + "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": "Restaurar tudo, incluindo banco de dados, fotos e arquivos", + "description": "Restaura tudo: banco, fotos e arquivos", "warning": "Isso substituirá todos os dados atuais" }, "database": { - "name": "Somente Banco de Dados", - "description": "Restaurar apenas o banco de dados (configurações, eventos, usuários)", + "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": "Somente Arquivos", - "description": "Restaurar apenas fotos e arquivos", + "name": "Apenas Arquivos", + "description": "Restaura apenas fotos e arquivos ZIP", "warning": "Arquivos existentes podem ser sobrescritos" }, "selective": { "name": "Restauração Seletiva", - "description": "Escolher itens específicos para restaurar", + "description": "Escolha itens específicos para restaurar", "warning": "Apenas os itens selecionados serão restaurados" } }, @@ -2168,17 +2168,17 @@ "subtitle": "Escolha o que restaurar", "additionalOptions": { "title": "Opções Adicionais", - "skipPreBackup": "Ignorar Backup Pré-Restauração", - "skipPreBackupHelp": "Por padrão, um backup é criado antes da restauração. Marque esta opção para ignorar.", + "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": "Ignorar verificações e avisos de segurança (use com cuidado)" + "forceHelp": "Ignora verificações de segurança (use com cautela)" } }, "confirmation": { "title": "Revisar e Confirmar", - "subtitle": "Por favor, revise sua configuração de restauração", + "subtitle": "Verifique sua configuração de restauração", "validation": { - "passed": "Validação Aprovada", + "passed": "Validação Concluída", "failed": "Validação Falhou", "checking": "Validando configuração de restauração..." }, @@ -2186,20 +2186,20 @@ "title": "Espaço de Armazenamento", "required": "Necessário", "available": "Disponível", - "insufficient": "Espaço de armazenamento insuficiente" + "insufficient": "Espaço insuficiente em disco" }, "summary": { "title": "Resumo da Restauração", "source": "Origem", "backupDate": "Data do Backup", "restoreType": "Tipo de Restauração", - "preBackup": "Pré-backup", + "preBackup": "Backup Prévio", "enabled": "Ativado", - "skipped": "Ignorado" + "skipped": "Pulado" }, "warning": { "title": "Aviso Importante", - "message": "Esta operação de restauração substituirá os dados existentes. Certifique-se de ter um backup atual antes de continuar. Esta ação não pode ser desfeita." + "message": "Esta operação substituirá dados existentes. Certifique-se de ter um backup recente. Esta ação não pode ser desfeita." } }, "progress": { @@ -2209,7 +2209,7 @@ "overallProgress": "Progresso Geral", "current": "Atual", "statusDetails": "Detalhes do Status", - "restoreLogs": "Logs de Restauração", + "restoreLogs": "Logs da Restauração", "steps": { "completed": "Concluído", "running": "Executando", @@ -2218,7 +2218,7 @@ }, "success": { "title": "Restauração Concluída com Sucesso", - "message": "Seus dados foram restaurados. Por favor, verifique se tudo está funcionando corretamente." + "message": "Seus dados foram restaurados. Verifique se tudo está funcionando corretamente." } }, "actions": { @@ -2245,17 +2245,17 @@ } }, "cssTemplates": { - "title": "Modelos de CSS Personalizado", + "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 à galeria. Variáveis disponíveis: --gallery-bg, --gallery-text, --gallery-accent", + "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 é sanitizado para evitar código malicioso. URLs externas, @import e expressões JavaScript são bloqueados.", - "resetToDefault": "Redefinir para Padrão", - "resetConfirm": "Redefinir este modelo para o padrão? Suas alterações serão perdidas.", + "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", @@ -2267,10 +2267,10 @@ }, "maintenance": { "title": "Manutenção do Sistema", - "message": "Estamos realizando manutenção programada para melhorar nosso serviço. Voltaremos em breve.", + "message": "Estamos realizando uma manutenção programada para melhorar nosso serviço. Voltaremos em breve.", "expectedCompletion": "Previsão de conclusão:", - "checkBackLater": "Por favor, volte mais tarde", - "urgentMatters": "Para assuntos urgentes, entre em contato com" + "checkBackLater": "Por favor, tente novamente mais tarde", + "urgentMatters": "Para assuntos urgentes, contate" }, "passwordChange": { "title": "Alterar Senha", @@ -2280,23 +2280,23 @@ "currentPasswordPlaceholder": "Digite a senha atual", "newPasswordPlaceholder": "Digite a nova senha", "confirmPasswordPlaceholder": "Confirme a nova senha", - "requirements": "Requisitos de 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": "A senha atual é obrigatória", - "newRequired": "A nova senha é obrigatória", + "currentRequired": "Senha atual é obrigatória", + "newRequired": "Nova senha é obrigatória", "minLengthError": "A senha deve ter pelo menos 6 caracteres", - "confirmRequired": "Por favor, confirme sua nova senha", + "confirmRequired": "Confirme sua nova senha", "noMatch": "As senhas não coincidem", - "mustBeDifferent": "A nova senha deve ser diferente da senha atual", + "mustBeDifferent": "A nova senha deve ser diferente da atual", "cancel": "Cancelar" }, "mandatoryPasswordChange": { "title": "Alteração de Senha Obrigatória", - "description": "Por razões de segurança, você deve alterar sua senha antes de acessar o painel de administração.", - "success": "Senha alterada com sucesso! Você já pode acessar o painel de administração.", + "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", @@ -2308,7 +2308,7 @@ "mustContainSpecialError": "A senha deve conter caracteres especiais" }, "offline": { - "backOnline": "Conexão restabelecida", + "backOnline": "De volta online", "noConnection": "Sem conexão com a internet" }, "download": { @@ -2329,26 +2329,26 @@ "copyPassword": "Copiar senha", "use": "Usar", "pattern": "Padrão:", - "patternDescription": "As senhas são geradas usando o nome e a data do seu evento. Exemplo: \"Local2024$Agosto\" para maior segurança e facilidade de memorizaçã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 email", + "yourEmail": "Seu e-mail", "writeComment": "Escreva um comentário...", "submit": "Enviar", "commentSubmitted": "Comentário enviado", "commentError": "Falha ao enviar comentário", - "rateLimited": "Por favor, aguarde antes de comentar novamente", - "commentRequired": "O comentário é obrigatório", - "nameRequired": "O nome é obrigatório", - "emailRequired": "O email é obrigató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": "Nenhum comentário ainda. Seja o primeiro a comentar!", + "noComments": "Ainda sem comentários. Seja o primeiro!", "rating": "Avaliação", - "ratePhoto": "Avaliar esta foto", + "ratePhoto": "Avalie esta foto", "yourRating": "Sua avaliação", "averageRating": "Avaliação média", "totalRatings": "avaliações", @@ -2357,19 +2357,19 @@ "likePhoto": "Curtir esta foto", "favoritePhoto": "Adicionar aos favoritos", "photoFeedback": "Feedback da Foto", - "hasFeedback": "Tem feedback", - "hasComments": "Tem comentários", - "hasRating": "Tem avaliação", + "hasFeedback": "Possui feedback", + "hasComments": "Possui comentários", + "hasRating": "Possui avaliação", "settings": { - "title": "Configurações de Feedback dos Convidados", + "title": "Configurações de Feedback de Convidados", "enableFeedback": "Ativar feedback", "feedbackTypes": "Tipos de Feedback", "ratings": "Avaliações por Estrelas", - "ratingsDesc": "Permitir que convidados avaliem fotos (1-5 estrelas)", + "ratingsDesc": "Permite avaliar fotos (1-5 estrelas)", "likes": "Curtidas", - "likesDesc": "Funcionalidade simples de curtir/descurtir", + "likesDesc": "Funcionalidade simples de curtir", "comments": "Comentários", - "commentsDesc": "Comentários de texto nas fotos", + "commentsDesc": "Comentários em texto nas fotos", "favorites": "Favoritos", "favoritesDesc": "Marcar fotos como favoritas" } @@ -2385,35 +2385,35 @@ "threeStarsPlus": "3+ Estrelas", "fourStarsPlus": "4+ Estrelas", "fiveStarsOnly": "Apenas 5 Estrelas", - "hasLikes": "Tem curtidas", - "hasFavorites": "Tem favoritos", - "hasComments": "Tem comentários", + "hasLikes": "Possui curtidas", + "hasFavorites": "Possui favoritos", + "hasComments": "Possui comentários", "showingPhotos": "Total de fotos", "withRatings": "Com avaliações" }, "adminLogin": { - "title": "Login de Administrador", + "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 email", + "emailLabel": "Endereço de E-mail", "emailPlaceholder": "admin@exemplo.com", - "emailRequired": "O email é obrigatório", - "invalidEmail": "Formato de email inválido", + "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 de mim", + "rememberMe": "Lembrar-me", "forgotPassword": "Esqueceu a senha?", "signIn": "Entrar", "loginSuccess": "Login realizado com sucesso!", - "networkError": "Erro de rede. Por favor, verifique sua conexão e tente novamente.", - "tooManyAttempts": "Muitas tentativas de login. Por favor, tente novamente mais tarde.", - "invalidCredentials": "email ou senha inválidos", - "generalError": "Ocorreu um erro. Por favor, tente novamente.", - "needHelp": "Precisa de ajuda? Entre em contato com", - "poweredBy": "Desenvolvido por PicPeak", - "devModeHint": "Modo de Desenvolvimento: Use email: admin@exemplo.com, senha: admin123" + "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" }, "clientAccess": { "title": "Acesso do Cliente",