diff --git a/web/public/static/langs/pt.json b/web/public/static/langs/pt.json
index 1c988568..5e237269 100644
--- a/web/public/static/langs/pt.json
+++ b/web/public/static/langs/pt.json
@@ -309,5 +309,100 @@
"account_delete_dialog_button_cancel": "Cancelar",
"account_upgrade_dialog_cancel_warning": "Isto irá cancelar a sua assinatura, e fazer downgrade da sua conta em {{date}}. Nessa data, tópicos reservados bem como mensagens guardadas no servidor serão eliminados.",
"account_upgrade_dialog_proration_info": "Proporção: Quando atualizar entre planos pagos, a diferença de preço será debitada imediatamente. Quando efetuar um downgrade para um escalão inferior, o saldo disponível será usado para futuros períodos de faturação.",
- "prefs_users_description_no_sync": "Utilizadores e palavras-passe não estão sincronizados com a sua conta."
+ "prefs_users_description_no_sync": "Utilizadores e palavras-passe não estão sincronizados com a sua conta.",
+ "account_upgrade_dialog_reservations_warning_one": "O nível selecionado permite menos tópicos reservados do que o nível atual. Antes de alterar o seu nível, apague pelo menos uma reserva. Pode remover reservas nas Configurações.",
+ "account_upgrade_dialog_reservations_warning_other": "O nível selecionado permite menos tópicos reservados do que o seu nível atual. Antes de mudar o seu nível, por favor apague ao menos {{count}} reservas. Pode remover reservas nas Configurações.",
+ "account_upgrade_dialog_tier_features_reservations_one": "{{reservations}} tópico reservado",
+ "account_upgrade_dialog_tier_features_reservations_other": "{{reservations}} tópicos reservados",
+ "account_upgrade_dialog_tier_features_no_reservations": "Sem tópicos reservados",
+ "account_upgrade_dialog_tier_features_messages_one": "{{messages}} mensagen diária",
+ "account_upgrade_dialog_tier_features_messages_other": "{{messages}} mensagens diárias",
+ "account_upgrade_dialog_tier_features_emails_one": "{{emails}} email diário",
+ "account_upgrade_dialog_tier_features_emails_other": "{{emails}} emails diários",
+ "account_upgrade_dialog_tier_features_calls_one": "{{calls}} chamadas diárias",
+ "account_upgrade_dialog_tier_features_calls_other": "{{calls}} chamadas telefônicas diárias",
+ "account_upgrade_dialog_tier_features_no_calls": "Nenhuma chamada",
+ "account_upgrade_dialog_tier_features_attachment_file_size": "{{filesize}} por ficheiro",
+ "account_upgrade_dialog_tier_features_attachment_total_size": "{{totalsize}} armazenamento total",
+ "account_upgrade_dialog_tier_price_per_month": "mês",
+ "account_upgrade_dialog_tier_price_billed_monthly": "{{price}} por ano. Cobrado mensalmente.",
+ "account_upgrade_dialog_tier_price_billed_yearly": "{{price}} cobrado anualmente. Gravar {{save}}.",
+ "account_upgrade_dialog_tier_selected_label": "Selecionado",
+ "account_upgrade_dialog_tier_current_label": "Atual",
+ "account_upgrade_dialog_billing_contact_email": "Para questões de cobrança, entre em contacto conosco diretamente.",
+ "account_upgrade_dialog_billing_contact_website": "Para perguntas sobre o faturamento, consulte o nosso website.",
+ "account_upgrade_dialog_button_cancel": "Cancelar",
+ "account_upgrade_dialog_button_redirect_signup": "Cadastre-se agora",
+ "account_upgrade_dialog_button_pay_now": "Pague agora para assinar",
+ "account_upgrade_dialog_button_cancel_subscription": "Cancelar assinatura",
+ "account_upgrade_dialog_button_update_subscription": "Atualizar assinatura",
+ "account_tokens_title": "Tokens de Acesso",
+ "account_tokens_description": "Use tokens de acesso ao publicar e assinar por meio da API ntfy, para que não precise enviar as credenciais da sua conta. Consulte a documentação para saber mais.",
+ "account_tokens_table_token_header": "Token",
+ "account_tokens_table_label_header": "Rótulo",
+ "account_tokens_table_last_access_header": "Último acesso",
+ "account_tokens_table_expires_header": "Expira",
+ "account_tokens_table_never_expires": "Nunca expira",
+ "account_tokens_table_current_session": "Sessão atual do navegador",
+ "account_tokens_table_copied_to_clipboard": "Token de acesso copiado",
+ "account_tokens_table_cannot_delete_or_edit": "Não é possível editar ou apagar o token da sessão atual",
+ "account_tokens_table_create_token_button": "Criar token de acesso",
+ "account_tokens_table_last_origin_tooltip": "Do endereço IP {{ip}}, clique para pesquisar",
+ "account_tokens_dialog_title_create": "Criar token de acesso",
+ "account_tokens_dialog_title_edit": "Editar token de acesso",
+ "account_tokens_dialog_title_delete": "Apagar token de acesso",
+ "account_tokens_dialog_label": "Rótulo, por exemplo, notificações de Radarr",
+ "account_tokens_dialog_button_create": "Criar token",
+ "account_tokens_dialog_button_update": "Atualizar token",
+ "account_tokens_dialog_button_cancel": "Cancelar",
+ "account_tokens_dialog_expires_label": "O token de acesso expira em",
+ "account_tokens_dialog_expires_unchanged": "Deixar a data de validade inalterada",
+ "account_tokens_dialog_expires_x_hours": "O token expira em {{hours}} horas",
+ "account_tokens_dialog_expires_x_days": "O token expira em {{days}} dias",
+ "account_tokens_dialog_expires_never": "O token nunca expira",
+ "account_tokens_delete_dialog_title": "Apagar token de acesso",
+ "account_tokens_delete_dialog_description": "Antes de apagar um token de acesso, certifique-se de que nenhuma aplicação ou script esteja usando-lo ativamente. Esta ação não pode ser desfeita.",
+ "account_tokens_delete_dialog_submit_button": "Apagar token permanentemente",
+ "prefs_notifications_web_push_title": "Notificações em segundo plano",
+ "prefs_notifications_web_push_enabled_description": "As notificações são recebidas mesmo quando a aplicação Web não está em execução (via Web Push)",
+ "prefs_notifications_web_push_disabled_description": "As notificações são recebidas quando a aplicação Web está em execução (via WebSocket)",
+ "prefs_notifications_web_push_enabled": "Ativado para {{server}}",
+ "prefs_notifications_web_push_disabled": "Desativado",
+ "prefs_users_table_cannot_delete_or_edit": "Não é possível apagar ou editar o utilizador conectado",
+ "prefs_appearance_theme_title": "Tema",
+ "prefs_appearance_theme_system": "Sistema (padrão)",
+ "prefs_appearance_theme_dark": "Modo escuro",
+ "prefs_appearance_theme_light": "Modo claro",
+ "prefs_reservations_title": "Tópicos reservados",
+ "prefs_reservations_description": "Pode reservar nomes de tópicos para uso pessoal aqui. A reserva de um tópico lhe dá propriedade sobre ele e permite que defina permissões de acesso para outros utilizadores sobre o tópico.",
+ "prefs_reservations_limit_reached": "Atingiu o seu limite de tópicos reservados.",
+ "prefs_reservations_add_button": "Adicionar tópico reservado",
+ "prefs_reservations_edit_button": "Editar o acesso ao tópico",
+ "prefs_reservations_delete_button": "Redefinir o acesso ao tópico",
+ "prefs_reservations_table": "Tabela de tópicos reservados",
+ "prefs_reservations_table_topic_header": "Tópico",
+ "prefs_reservations_table_access_header": "Acesso",
+ "prefs_reservations_table_everyone_deny_all": "Somente eu posso publicar e me inscrever",
+ "prefs_reservations_table_everyone_read_only": "Posso publicar e me inscrever, todos podem se inscrever",
+ "prefs_reservations_table_everyone_write_only": "Posso publicar e me inscrever, todos podem publicar",
+ "prefs_reservations_table_everyone_read_write": "Todos podem publicar e se inscreverem",
+ "prefs_reservations_table_not_subscribed": "Não inscrito",
+ "prefs_reservations_table_click_to_subscribe": "Clique para se inscrever",
+ "prefs_reservations_dialog_title_add": "Reservar tópico",
+ "prefs_reservations_dialog_title_edit": "Editar tópico reservado",
+ "prefs_reservations_dialog_title_delete": "Apagar reserva de tópico",
+ "prefs_reservations_dialog_description": "A reserva de um tópico lhe dá propriedade sobre ele e permite definir permissões de acesso para outros utilizadores sobre o tópico.",
+ "prefs_reservations_dialog_topic_label": "Tópico",
+ "prefs_reservations_dialog_access_label": "Acesso",
+ "reservation_delete_dialog_description": "A remoção de uma reserva abre mão da propriedade sobre o tópico e permite que outros o reservem. Pode manter ou apagar as mensagens e os anexos existentes.",
+ "reservation_delete_dialog_action_keep_title": "Manter mensagens e anexos em cache",
+ "reservation_delete_dialog_action_keep_description": "As mensagens e os anexos armazenados em cache no servidor ficarão visíveis publicamente para as pessoas que souberem o nome do tópico.",
+ "reservation_delete_dialog_action_delete_title": "Apagar mensagens e anexos armazenados em cache",
+ "reservation_delete_dialog_action_delete_description": "As mensagens e os anexos armazenados em cache serão apagados permanentemente. Esta ação não pode ser desfeita.",
+ "reservation_delete_dialog_submit_button": "Apagar reserva",
+ "error_boundary_button_reload_ntfy": "Recarregar ntfy",
+ "web_push_subscription_expiring_title": "As notificações serão pausadas",
+ "web_push_subscription_expiring_body": "Abra o ntfy para continuar recebendo notificações",
+ "web_push_unknown_notification_title": "Notificação desconhecida recebida do servidor",
+ "web_push_unknown_notification_body": "Talvez seja necessário atualizar o ntfy abrindo a aplicação da Web"
}