diff --git a/.tx/config b/.tx/config
index 58da2cc97d..d6f267592c 100644
--- a/.tx/config
+++ b/.tx/config
@@ -32,6 +32,7 @@ trans.nb = public/language/nb/category.json
trans.nl = public/language/nl/category.json
trans.pl = public/language/pl/category.json
trans.pt_BR = public/language/pt-BR/category.json
+trans.pt_PT = public/language/pt-PT/category.json
trans.ru = public/language/ru/category.json
trans.ro = public/language/ro/category.json
trans.rw = public/language/rw/category.json
@@ -78,6 +79,7 @@ trans.nb = public/language/nb/login.json
trans.nl = public/language/nl/login.json
trans.pl = public/language/pl/login.json
trans.pt_BR = public/language/pt-BR/login.json
+trans.pt_PT = public/language/pt-PT/login.json
trans.ru = public/language/ru/login.json
trans.ro = public/language/ro/login.json
trans.rw = public/language/rw/login.json
@@ -124,6 +126,7 @@ trans.nb = public/language/nb/recent.json
trans.nl = public/language/nl/recent.json
trans.pl = public/language/pl/recent.json
trans.pt_BR = public/language/pt-BR/recent.json
+trans.pt_PT = public/language/pt-PT/recent.json
trans.ru = public/language/ru/recent.json
trans.ro = public/language/ro/recent.json
trans.rw = public/language/rw/recent.json
@@ -170,6 +173,7 @@ trans.nb = public/language/nb/unread.json
trans.nl = public/language/nl/unread.json
trans.pl = public/language/pl/unread.json
trans.pt_BR = public/language/pt-BR/unread.json
+trans.pt_PT = public/language/pt-PT/unread.json
trans.ru = public/language/ru/unread.json
trans.ro = public/language/ro/unread.json
trans.rw = public/language/rw/unread.json
@@ -216,6 +220,7 @@ trans.nb = public/language/nb/modules.json
trans.nl = public/language/nl/modules.json
trans.pl = public/language/pl/modules.json
trans.pt_BR = public/language/pt-BR/modules.json
+trans.pt_PT = public/language/pt-PT/modules.json
trans.ru = public/language/ru/modules.json
trans.ro = public/language/ro/modules.json
trans.rw = public/language/rw/modules.json
@@ -262,6 +267,7 @@ trans.nb = public/language/nb/register.json
trans.nl = public/language/nl/register.json
trans.pl = public/language/pl/register.json
trans.pt_BR = public/language/pt-BR/register.json
+trans.pt_PT = public/language/pt-PT/register.json
trans.ru = public/language/ru/register.json
trans.ro = public/language/ro/register.json
trans.rw = public/language/rw/register.json
@@ -308,6 +314,7 @@ trans.nb = public/language/nb/user.json
trans.nl = public/language/nl/user.json
trans.pl = public/language/pl/user.json
trans.pt_BR = public/language/pt-BR/user.json
+trans.pt_PT = public/language/pt-PT/user.json
trans.ru = public/language/ru/user.json
trans.ro = public/language/ro/user.json
trans.rw = public/language/rw/user.json
@@ -354,6 +361,7 @@ trans.nb = public/language/nb/global.json
trans.nl = public/language/nl/global.json
trans.pl = public/language/pl/global.json
trans.pt_BR = public/language/pt-BR/global.json
+trans.pt_PT = public/language/pt-PT/global.json
trans.ru = public/language/ru/global.json
trans.ro = public/language/ro/global.json
trans.rw = public/language/rw/global.json
@@ -400,6 +408,7 @@ trans.nb = public/language/nb/notifications.json
trans.nl = public/language/nl/notifications.json
trans.pl = public/language/pl/notifications.json
trans.pt_BR = public/language/pt-BR/notifications.json
+trans.pt_PT = public/language/pt-PT/notifications.json
trans.ru = public/language/ru/notifications.json
trans.ro = public/language/ro/notifications.json
trans.rw = public/language/rw/notifications.json
@@ -446,6 +455,7 @@ trans.nb = public/language/nb/reset_password.json
trans.nl = public/language/nl/reset_password.json
trans.pl = public/language/pl/reset_password.json
trans.pt_BR = public/language/pt-BR/reset_password.json
+trans.pt_PT = public/language/pt-PT/reset_password.json
trans.ru = public/language/ru/reset_password.json
trans.ro = public/language/ro/reset_password.json
trans.rw = public/language/rw/reset_password.json
@@ -492,6 +502,7 @@ trans.nb = public/language/nb/users.json
trans.nl = public/language/nl/users.json
trans.pl = public/language/pl/users.json
trans.pt_BR = public/language/pt-BR/users.json
+trans.pt_PT = public/language/pt-PT/users.json
trans.ru = public/language/ru/users.json
trans.ro = public/language/ro/users.json
trans.rw = public/language/rw/users.json
@@ -538,6 +549,7 @@ trans.nb = public/language/nb/language.json
trans.nl = public/language/nl/language.json
trans.pl = public/language/pl/language.json
trans.pt_BR = public/language/pt-BR/language.json
+trans.pt_PT = public/language/pt-PT/language.json
trans.ru = public/language/ru/language.json
trans.ro = public/language/ro/language.json
trans.rw = public/language/rw/language.json
@@ -584,6 +596,7 @@ trans.nb = public/language/nb/pages.json
trans.nl = public/language/nl/pages.json
trans.pl = public/language/pl/pages.json
trans.pt_BR = public/language/pt-BR/pages.json
+trans.pt_PT = public/language/pt-PT/pages.json
trans.ru = public/language/ru/pages.json
trans.ro = public/language/ro/pages.json
trans.rw = public/language/rw/pages.json
@@ -630,6 +643,7 @@ trans.nb = public/language/nb/topic.json
trans.nl = public/language/nl/topic.json
trans.pl = public/language/pl/topic.json
trans.pt_BR = public/language/pt-BR/topic.json
+trans.pt_PT = public/language/pt-PT/topic.json
trans.ru = public/language/ru/topic.json
trans.ro = public/language/ro/topic.json
trans.rw = public/language/rw/topic.json
@@ -676,6 +690,7 @@ trans.nb = public/language/nb/success.json
trans.nl = public/language/nl/success.json
trans.pl = public/language/pl/success.json
trans.pt_BR = public/language/pt-BR/success.json
+trans.pt_PT = public/language/pt-PT/success.json
trans.ru = public/language/ru/success.json
trans.ro = public/language/ro/success.json
trans.rw = public/language/rw/success.json
@@ -722,6 +737,7 @@ trans.nb = public/language/nb/error.json
trans.nl = public/language/nl/error.json
trans.pl = public/language/pl/error.json
trans.pt_BR = public/language/pt-BR/error.json
+trans.pt_PT = public/language/pt-PT/error.json
trans.ru = public/language/ru/error.json
trans.ro = public/language/ro/error.json
trans.rw = public/language/rw/error.json
@@ -768,6 +784,7 @@ trans.nb = public/language/nb/tags.json
trans.nl = public/language/nl/tags.json
trans.pl = public/language/pl/tags.json
trans.pt_BR = public/language/pt-BR/tags.json
+trans.pt_PT = public/language/pt-PT/tags.json
trans.ru = public/language/ru/tags.json
trans.ro = public/language/ro/tags.json
trans.rw = public/language/rw/tags.json
@@ -814,6 +831,7 @@ trans.nb = public/language/nb/email.json
trans.nl = public/language/nl/email.json
trans.pl = public/language/pl/email.json
trans.pt_BR = public/language/pt-BR/email.json
+trans.pt_PT = public/language/pt-PT/email.json
trans.ru = public/language/ru/email.json
trans.ro = public/language/ro/email.json
trans.rw = public/language/rw/email.json
@@ -860,6 +878,7 @@ trans.nb = public/language/nb/search.json
trans.nl = public/language/nl/search.json
trans.pl = public/language/pl/search.json
trans.pt_BR = public/language/pt-BR/search.json
+trans.pt_PT = public/language/pt-PT/search.json
trans.ru = public/language/ru/search.json
trans.ro = public/language/ro/search.json
trans.rw = public/language/rw/search.json
@@ -906,6 +925,7 @@ trans.nb = public/language/nb/groups.json
trans.nl = public/language/nl/groups.json
trans.pl = public/language/pl/groups.json
trans.pt_BR = public/language/pt-BR/groups.json
+trans.pt_PT = public/language/pt-PT/groups.json
trans.ru = public/language/ru/groups.json
trans.ro = public/language/ro/groups.json
trans.rw = public/language/rw/groups.json
@@ -952,6 +972,7 @@ trans.nb = public/language/nb/uploads.json
trans.nl = public/language/nl/uploads.json
trans.pl = public/language/pl/uploads.json
trans.pt_BR = public/language/pt-BR/uploads.json
+trans.pt_PT = public/language/pt-PT/uploads.json
trans.ru = public/language/ru/uploads.json
trans.ro = public/language/ro/uploads.json
trans.rw = public/language/rw/uploads.json
diff --git a/public/language/pt-PT/category.json b/public/language/pt-PT/category.json
new file mode 100644
index 0000000000..244480c5e1
--- /dev/null
+++ b/public/language/pt-PT/category.json
@@ -0,0 +1,20 @@
+{
+ "category": "Categoria",
+ "subcategories": "Subcategorias",
+ "new_topic_button": "Novo tópico",
+ "guest-login-post": "Inicie sessão para publicar algo",
+ "no_topics": "Não existe nenhum tópico nesta categoria.
Que tal seres o primeiro a publicar aqui?",
+ "browsing": "navegação",
+ "no_replies": "Sem respostas",
+ "no_new_posts": "Não existem publicações novas.",
+ "share_this_category": "Partilhar esta categoria",
+ "watch": "Seguir",
+ "ignore": "Ignorar",
+ "watching": "Seguir",
+ "ignoring": "Ignorar",
+ "watching.description": "Mostrar tópicos em não lido",
+ "ignoring.description": "Não mostrar tópicos em não lido",
+ "watch.message": "Estás agora a ver atualizações desta categoria e todas as suas subcategorias",
+ "ignore.message": "Estás agora a ignorar todas as atualizações desta categoria e todas as suas subcategorias",
+ "watched-categories": "Categorias subscritas"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/email.json b/public/language/pt-PT/email.json
new file mode 100644
index 0000000000..8f347ea8b4
--- /dev/null
+++ b/public/language/pt-PT/email.json
@@ -0,0 +1,36 @@
+{
+ "password-reset-requested": "Pedido de password enviado - %1!",
+ "welcome-to": "Bem-vindo ao %1",
+ "invite": "Convite enviado por %1",
+ "greeting_no_name": "Olá",
+ "greeting_with_name": "Olá %1",
+ "welcome.text1": "Obrigado por te teres registado no %1!",
+ "welcome.text2": "De forma a finalizar o processo de activação da tua conta, precisamos de verificar que és o legítimo dono da conta de email registada.",
+ "welcome.text3": "Um administrador aceitou o teu registo de aplicação. Podes agora fazer login com o teu nome de utilizador/palavra-passe.",
+ "welcome.cta": "Clica aqui para confirmares o teu endereço de e-mail",
+ "invitation.text1": "%1 convidou-te para te juntares a %2",
+ "invitation.ctr": "Clica aqui para criares a tua conta.",
+ "reset.text1": "Recebemos um pedido para reiniciar a tua palavra-passe, possivelmente porque te esqueceste dela. Se este não é o caso, por favor ignora este e-mail.",
+ "reset.text2": "Para continuares com o reinício da tua palavra-passe, clica no seguinte link:",
+ "reset.cta": "Clica aqui para reiniciares a tua palavra-passe.",
+ "reset.notify.subject": "A tua palavra-passe foi mudada com sucesso",
+ "reset.notify.text1": "Estamos a notificar-te que a %1, a tua palavra-passe foi mudada com sucesso.",
+ "reset.notify.text2": "Se não autorizaste isto, por favor notifica o administrador imediatamente.",
+ "digest.notifications": "Tens notificações por ler de %1:",
+ "digest.latest_topics": "Últimos tópicos de %1",
+ "digest.cta": "Clica aqui para visitares %1",
+ "digest.unsub.info": "Este resumo foi-te enviado devido às tuas definições de subscrição.",
+ "digest.no_topics": "Não existem tópicos ativos desde %1",
+ "digest.day": "dia",
+ "digest.week": "semana",
+ "digest.month": "mês",
+ "digest.subject": "Resumo para %1",
+ "notif.chat.subject": "Nova mensagem de %1",
+ "notif.chat.cta": "Clique aqui para continuar a conversa",
+ "notif.chat.unsub.info": "Esta notificação de chat foi enviada devido às suas definições de subscrição",
+ "notif.post.cta": "Clique aqui para ler o tópico completo",
+ "notif.post.unsub.info": "Esta notificação foi envidada devido às tuas definições de subscrição.",
+ "test.text1": "Este é um e-mail de teste para verificar que o emailer está configurado corretamente para o teu NodeBB.",
+ "unsub.cta": "Clica aqui para alterares essas definições",
+ "closing": "Obrigado!"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/error.json b/public/language/pt-PT/error.json
new file mode 100644
index 0000000000..d8ee847d2f
--- /dev/null
+++ b/public/language/pt-PT/error.json
@@ -0,0 +1,131 @@
+{
+ "invalid-data": "Dados inválidos",
+ "not-logged-in": "Não tem sessão iniciada.",
+ "account-locked": "A sua conta foi bloqueada temporariamente",
+ "search-requires-login": "A pesquisa requer uma conta de utilizador - For favor inicie sessão ou crie uma conta.",
+ "invalid-cid": "ID de categoria inválido",
+ "invalid-tid": "ID de tópico inválido",
+ "invalid-pid": "ID de post inválido",
+ "invalid-uid": "ID de utilizador inválido",
+ "invalid-username": "Utilizador inválido",
+ "invalid-email": "Email inválido",
+ "invalid-title": "Título inválido!",
+ "invalid-user-data": "Dados de utilizador inválidos",
+ "invalid-password": "Senha inválida",
+ "invalid-username-or-password": "Por favor especificar um nome de utilizador e senha",
+ "invalid-search-term": "Termo de pesquisa inválido",
+ "csrf-invalid": "Não conseguimos efetuar o teu login, provavelmente devido a uma sessão que já expirou. Por favor, tenta novamente",
+ "invalid-pagination-value": "Valor de paginação errado, deve ser no mínimo %1 e no máximo %2",
+ "username-taken": "Nome de utilizar já utilizado",
+ "email-taken": "E-mail já utilizado",
+ "email-not-confirmed": "O teu e-mail ainda não foi confirmado, por favor clica aqui para confirmares o teu e-mail.",
+ "email-not-confirmed-chat": "Não podes utilizar o chat enquanto não confirmares o teu e-mail, por favor clica aqui para confirmares o teu e-mail.",
+ "email-not-confirmed-email-sent": "O teu e-mail ainda não foi confirmado, por favor verifica na tua caixa de entrada o e-mail de confirmação.",
+ "no-email-to-confirm": "Este forum requer confirmação de e-mail, por favor clica aqui para inserires um e-mail",
+ "email-confirm-failed": "Não conseguimos confirmar o teu e-mail, por favor tenta mais tarde.",
+ "confirm-email-already-sent": "O e-mail de confirmação já foi enviado, por favor espera %1 minuto(s) para enviares outro.",
+ "sendmail-not-found": "O executável sendmail não foi encontrado, por favor assegura-te que se encontra instalado e executável pelo utilizador a correr o NodeBB.",
+ "username-too-short": "Nome de utilizador muito curto",
+ "username-too-long": "Nome de utilizador muito longo",
+ "password-too-long": "Palavra-passe muito longa",
+ "user-banned": "Utilizador banido",
+ "user-banned-reason": "Desculpa, esta conta foi banida (Razão: %1)",
+ "user-too-new": "Desculpa, é necessário que esperes %1 segundo(s) antes de fazeres a tua primeira publicação",
+ "blacklisted-ip": "Desculpa, o teu endereço IP foi banido desta comunidade. Se sentes que isto é um erro, por favor contacta o administrador.",
+ "ban-expiry-missing": "Por favor providencia uma data para o fim deste banimento",
+ "no-category": "Categoria não existente",
+ "no-topic": "Tópico não existente",
+ "no-post": "Publicação não existente",
+ "no-group": "Grupo não existente",
+ "no-user": "Utilizador não existente",
+ "no-teaser": "Teaser não existente",
+ "no-privileges": "Não possuis privilégios suficientes para esta ação.",
+ "category-disabled": "Categoria desativada",
+ "topic-locked": "Tópico bloqueado",
+ "post-edit-duration-expired": "Só tens permissão para editar publicações %1 segundo(s) depois da sua publicação",
+ "post-edit-duration-expired-minutes": "Só tens permissão para editar publicações %1 minuto(s) depois da sua publicação",
+ "post-edit-duration-expired-minutes-seconds": "Só tens permissão para editar publicações %1 minuto(s) %2segundo(s) depois da sua publicação",
+ "post-edit-duration-expired-hours": "Só tens permissão para editar publicações %1 hora(s) depois da sua publicação",
+ "post-edit-duration-expired-hours-minutes": "Só tens permissão para editar publicações %1 hora(s) 2% minuto(s) depois da sua publicação",
+ "post-edit-duration-expired-days": "Só tens permissão para editar publicações %1 dia(s) depois da sua publicação",
+ "post-edit-duration-expired-days-hours": "Só tens permissão para editar publicações %1 dia(s) %2 hora(s) depois da sua publicação",
+ "post-delete-duration-expired": "Só tens permissão para eliminar publicações %1 segundo(s) depois da sua publicação",
+ "post-delete-duration-expired-minutes": "Só tens permissão para eliminar publicações %1 minuto(s) depois da sua publicação",
+ "post-delete-duration-expired-minutes-seconds": "Só tens permissão para eliminar publicações %1 minuto(s) %2 segundo(s) depois da sua publicação",
+ "post-delete-duration-expired-hours": "Só tens permissão para eliminar publicações %1 hora(s) depois da sua publicação",
+ "post-delete-duration-expired-hours-minutes": "Só tens permissão para eliminar publicações %1 hora(s) %2 minuto(s) depois da sua publicação",
+ "post-delete-duration-expired-days": "Só tens permissão para eliminar publicações %1 dia(s) depois da sua publicação",
+ "post-delete-duration-expired-days-hours": "Só tens permissão para eliminar publicações %1 dia(s) %2 hora(s) depois da sua publicação",
+ "cant-delete-topic-has-reply": "Não podes apagar um tópico após ele ter uma resposta",
+ "cant-delete-topic-has-replies": "Não podes apagar o tópico após ele ter %1 respostas",
+ "content-too-short": "Por favor insere uma publicação maior. As publicações devem ter no mínimo %1 caracter(es).",
+ "content-too-long": "Por favor introduz uma publicação mais curta. As publicações não devem ter mais que %1 caracter(es).",
+ "title-too-short": "Por favor introduz um título maior. Os títulos devem conter pelo menos %1 caracter(es).",
+ "title-too-long": "Por favor introduz um título mais curto. Os títulos deve ter no máximo %1 caracter(es).",
+ "category-not-selected": "Categoria não selecionada.",
+ "too-many-posts": "Só podes publicar a cada %1 segundo(s) - por favor espera até poderes publicar outra vez",
+ "too-many-posts-newbie": "Como novo utilizador, só podes publicar a cada %1 segundo(s) até teres conquistado %2 de reputação - por favor espera até poderes publicar outra vez",
+ "tag-too-short": "Por favor introduz um tag maior. Os tags devem ter pelo menos %1 caracter(s)",
+ "tag-too-long": "Por favor introduz um tag mais curto. Os tags devem ter no máximo %1 caracter(es)",
+ "not-enough-tags": "Não existem tags suficientes. Os tópicos devem ter pelo menos %1 tag(s)",
+ "too-many-tags": "Existem tags a mais. Os tópicos não podem ter mais do que 1% tag(s).",
+ "still-uploading": "Por favor aguarda até todos os uploads estarem completos.",
+ "file-too-big": "O tamanho máximo permitido para um ficheiro é de %1 kB - por favor carrega um ficheiro mais pequeno",
+ "guest-upload-disabled": "Upload por parte de convidados foi desativado",
+ "already-bookmarked": "Já marcaste esta publicação",
+ "already-unbookmarked": "Já desmarcaste esta publicação",
+ "cant-ban-other-admins": "Não podes banir outros administradores!",
+ "cant-remove-last-admin": "És o único administrador. Adicionar outro utilizador como administrador antes de te removeres como administrador.",
+ "cant-delete-admin": "Remove os privilégios de administrador desta conta antes de tentares apagá-la.",
+ "invalid-image-type": "Tipo de imagem inválida. Os tipos válidos são: %1",
+ "invalid-image-extension": "Extensão de imagem inválida",
+ "invalid-file-type": "Tipo de ficheiro inválido. Os tipos válidos são: %1",
+ "group-name-too-short": "Nome de grupo muito curto",
+ "group-name-too-long": "Nome de grupo muito longo",
+ "group-already-exists": "Grupo já existente",
+ "group-name-change-not-allowed": "Mudanças no nome do grupo não são permitidas",
+ "group-already-member": "Já pertences a este grupo",
+ "group-not-member": "Não és um membro deste grupo",
+ "group-needs-owner": "Este grupo requer pelo menos um dono",
+ "group-already-invited": "Este utilizador já foi convidado",
+ "group-already-requested": "O teu pedido de adesão já foi submetido",
+ "post-already-deleted": "Esta publicação já foi eliminada",
+ "post-already-restored": "Esta publicação já foi restaurada",
+ "topic-already-deleted": "Este tópico já foi eliminado",
+ "topic-already-restored": "Este tópico já foi restaurado",
+ "cant-purge-main-post": "Não podes purgar a publicação principal, em vez disso, apaga o tópico, por favor",
+ "topic-thumbnails-are-disabled": "Miniaturas para o tópico estão desativadas",
+ "invalid-file": "Ficheiro inválido",
+ "uploads-are-disabled": "Os uploads estão desativados",
+ "signature-too-long": "Desculpa, a tua assinatura não pode ser superior a %1 caracter(es).",
+ "about-me-too-long": "Desculpa, o teu \"sobre ti\" não pode ser superior a %1 caracter(es).",
+ "cant-chat-with-yourself": "Não podes conversar contigo mesmo!",
+ "chat-restricted": "Este utilizador colocou restrições sobre as suas mensagens de chat. Ele deve primeiro seguir-te antes que possas conversar com ele",
+ "chat-disabled": "Sistema de conversas desativado",
+ "too-many-messages": "Enviaste demasiadas mensagens, por favor espera um pouco.",
+ "invalid-chat-message": "Mensagem de chat inválida",
+ "chat-message-too-long": "Mensagem de chat demasiado longa",
+ "cant-edit-chat-message": "Não tens permissão para editar esta mensagem",
+ "cant-remove-last-user": "Não podes remover o último utilizador",
+ "cant-delete-chat-message": "Não tens permissão para eliminar esta mensagem",
+ "already-voting-for-this-post": "Já votaste nesta publicação.",
+ "reputation-system-disabled": "Sistema de reputação desativado.",
+ "downvoting-disabled": "Voto negativo desativado",
+ "not-enough-reputation-to-downvote": "Não tens reputação suficiente para atribuir um voto negativo a esta publicação",
+ "not-enough-reputation-to-flag": "Não tens reputação suficiente para sinalizar esta publicação",
+ "already-flagged": "Já sinalizaste esta publicação",
+ "reload-failed": "NodeBB encontrou um erro enquanto recarregava: \"%1\". NodeBB irá continuar a servir os ativos existentes do lado do utilizador. No entanto deverias desfazer o que fizeste mesmo antes de teres voltado a recarregar.",
+ "registration-error": "Erro de registro",
+ "parse-error": "Ocorreu um erro enquanto analisávamos a resposta do servidor",
+ "wrong-login-type-email": "Por favor utiliza o teu e-mail para efetuares o login",
+ "wrong-login-type-username": "Por favor utiliza o teu nome de utilizador para efetuares o login",
+ "invite-maximum-met": "Convidaste o máximo de pessoas (%1 em %2).",
+ "no-session-found": "Não encontramos sessões de login!",
+ "not-in-room": "Utilizador não se encontra na sala",
+ "no-users-in-room": "Não existem utilizadores nesta sala",
+ "cant-kick-self": "Não te podes expulsar a ti próprio do grupo",
+ "no-users-selected": "Não existe(m) utilizador(es) selecionado(s)",
+ "invalid-home-page-route": "Rota para a página principal inválida",
+ "invalid-session": "Sessão incompatível",
+ "invalid-session-text": "Parece que a sua sessão de login não se encontra mais ativa ou não tem correspondência com o servidor. por favor recarregue esta página."
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/global.json b/public/language/pt-PT/global.json
new file mode 100644
index 0000000000..ef1ce6063e
--- /dev/null
+++ b/public/language/pt-PT/global.json
@@ -0,0 +1,106 @@
+{
+ "home": "Página principal",
+ "search": "Procurar",
+ "buttons.close": "Fechar",
+ "403.title": "Acesso negado",
+ "403.message": "Parece que encontraste uma página à qual não tens acesso.",
+ "403.login": "Talvez devesses tentar fazer o login?",
+ "404.title": "Não encontrado",
+ "404.message": "Parece que encontraste uma página que não existe. Regressa para a página principal.",
+ "500.title": "Erro interno.",
+ "500.message": "Oops! Parece que algo correu mal!",
+ "400.title": "O pedido não correu bem.",
+ "400.message": "Parece que este link está mal formado. Por favor volta a confirma-lo e tenta novamente ou então retorna à página principal.",
+ "register": "Regista-te",
+ "login": "Login",
+ "please_log_in": "Por favor faz o login",
+ "logout": "Logout",
+ "posting_restriction_info": "Publicar está neste momento restrito a membros registados, clica aqui para efetuares o login.",
+ "welcome_back": "Bem-vindo de volta",
+ "you_have_successfully_logged_in": "Realizaste o login com sucesso",
+ "save_changes": "Salvar as alterações",
+ "save": "Salvar",
+ "close": "Fechar",
+ "pagination": "Paginação",
+ "pagination.out_of": "%1 de %2",
+ "pagination.enter_index": "Introduz o index",
+ "header.admin": "Administrador",
+ "header.categories": "Categorias",
+ "header.recent": "Recentes",
+ "header.unread": "Por ler",
+ "header.tags": "Marcadores",
+ "header.popular": "Popular",
+ "header.users": "Utilizadores",
+ "header.groups": "Grupos",
+ "header.chats": "Conversas",
+ "header.notifications": "Notificações",
+ "header.search": "Procurar",
+ "header.profile": "Perfil",
+ "header.navigation": "Navegação",
+ "notifications.loading": "Carregando as notificações",
+ "chats.loading": "Carregando as conversas",
+ "motd.welcome": "Bem-vindo ao NodeBB, a plataforma de discussões do futuro.",
+ "previouspage": "Página anterior",
+ "nextpage": "Página seguinte",
+ "alert.success": "Sucesso",
+ "alert.error": "Erro",
+ "alert.banned": "Banido",
+ "alert.banned.message": "Acabaste de ser banido, serás agora obrigado a fazer logout.",
+ "alert.unfollow": "Deixaste de seguir %1!",
+ "alert.follow": "Estás agora a seguir %1!",
+ "online": "Online",
+ "users": "Utilizadores",
+ "topics": "Tópicos",
+ "posts": "Publicações",
+ "best": "Melhores",
+ "upvoters": "Votantes a favor",
+ "upvoted": "Votado favoravelmente",
+ "downvoters": "Votantes contra",
+ "downvoted": "Votado negativamente",
+ "views": "Visualizações",
+ "reputation": "Reputação",
+ "read_more": "Ler mais",
+ "more": "Mais",
+ "posted_ago_by_guest": "publicou %1 por Convidado",
+ "posted_ago_by": "publicou %1 por %2",
+ "posted_ago": "publicou %1",
+ "posted_in": "publicado em %1",
+ "posted_in_by": "publicado em %1 por %2",
+ "posted_in_ago": "publicado em %1 %2",
+ "posted_in_ago_by": "publicado em %1 %2 por %3",
+ "user_posted_ago": "%1 publicou %2",
+ "guest_posted_ago": "Convidado publicou %1",
+ "last_edited_by": "última edição por %1",
+ "norecentposts": "Não existen publicações recentes",
+ "norecenttopics": "Não existem tópicos recentes",
+ "recentposts": "Publicações recentes",
+ "recentips": "Recentemente logged em IPs",
+ "moderator_tools": "Ferramentas de moderador",
+ "away": "Ausente",
+ "dnd": "Não perturbar",
+ "invisible": "Invisível",
+ "offline": "Offline",
+ "email": "E-mail",
+ "language": "Língua",
+ "guest": "Convidado",
+ "guests": "Convidados",
+ "updated.title": "Forum atualizado",
+ "updated.message": "Este forum acabou de ser atualizado para a última versão. Carrega aqui para atualizares a página.",
+ "privacy": "Privacidade",
+ "follow": "Seguir",
+ "unfollow": "Deixar de seguir",
+ "delete_all": "Apagar tudo",
+ "map": "Mapa",
+ "sessions": "Sessões de login",
+ "ip_address": "Endereço IP",
+ "enter_page_number": "Introduzir número da página",
+ "upload_file": "Carregar ficheiro",
+ "upload": "Carregar",
+ "allowed-file-types": "Os tipos de ficheiro permitidos são %1",
+ "unsaved-changes": "Tens alterações por salvar. Tens a certeza que pretendes mudar de página?",
+ "reconnecting-message": "Parece que a tua conexão com %1 foi perdida. Por favor, espera enquanto tentamos reconectar-te.",
+ "play": "Jogar",
+ "cookies.message": "Este website utiliza cookies para assegurar que tens a melhor experiência no nosso website.",
+ "cookies.accept": "Apontado!",
+ "cookies.learn_more": "Aprende mais"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/groups.json b/public/language/pt-PT/groups.json
new file mode 100644
index 0000000000..ea2555b52a
--- /dev/null
+++ b/public/language/pt-PT/groups.json
@@ -0,0 +1,56 @@
+{
+ "groups": "Grupos",
+ "view_group": "Ver o grupo",
+ "owner": "Dono do grupo",
+ "new_group": "Criar novo grupo",
+ "no_groups_found": "Não existem grupos para ver",
+ "pending.accept": "Aceitar",
+ "pending.reject": "Rejeitar",
+ "pending.accept_all": "Aceitar todos",
+ "pending.reject_all": "Rejeitar todas",
+ "pending.none": "Não existem membros pendentes neste momento",
+ "invited.none": "Não existem membros convidados neste momento",
+ "invited.uninvite": "Cancelar convite",
+ "invited.search": "Procura por um utilizador para convidares para este grupo",
+ "invited.notification_title": "Foste convidado para te juntares a %1",
+ "request.notification_title": "Pedido de adesão ao grupo por parte de %1",
+ "request.notification_text": "%1 pediu para se tornar um membro de %2",
+ "cover-save": "Gravar",
+ "cover-saving": "Gravando",
+ "details.title": "Detalhes do grupo",
+ "details.members": "Lista de membros",
+ "details.pending": "Membros pendentes",
+ "details.invited": "Membros convidados",
+ "details.has_no_posts": "Os membros deste grupo ainda não fizeram nenhuma publicação.",
+ "details.latest_posts": "Publicações mais recentes",
+ "details.private": "Privado",
+ "details.disableJoinRequests": "Desativar pedidos de adesão",
+ "details.grant": "Conceder/rescindir posse",
+ "details.kick": "Expulsar",
+ "details.owner_options": "Administração do grupo",
+ "details.group_name": "Nome do grupo",
+ "details.member_count": "Contagem de membros",
+ "details.creation_date": "Data de criação",
+ "details.description": "Descrição",
+ "details.badge_preview": "Pré-visualização da medalha",
+ "details.change_icon": "Mudar o icon",
+ "details.change_colour": "Mudar a cor",
+ "details.badge_text": "Texto da medalha",
+ "details.userTitleEnabled": "Mostrar medalha",
+ "details.private_help": "Se ativado, a adesão ao grupo requer a aprovação de um dos donos do grupo",
+ "details.hidden": "Escondido",
+ "details.hidden_help": "Se ativado, este grupo não será encontrado na listagem de grupos e os utilizadores terão de ser convidados manualmente",
+ "details.delete_group": "Eliminar grupo",
+ "details.private_system_help": "Tornar grupos privados é desativado ao nível do sistema. Esta opção não executa nada",
+ "event.updated": "Detalhes do grupo foram atualizados",
+ "event.deleted": "O grupo \"%1\" foi apagado",
+ "membership.accept-invitation": "Aceitar convite",
+ "membership.invitation-pending": "Convite em espera",
+ "membership.join-group": "Aderir ao grupo",
+ "membership.leave-group": "Sair do grupo",
+ "membership.reject": "Rejeitar",
+ "new-group.group_name": "Nome do grupo:",
+ "upload-group-cover": "Carregar capa do grupo",
+ "bulk-invite-instructions": "Introduz uma lista de nomes de utilizadores separados por vírgulas para convidar para este grupo",
+ "bulk-invite": "Convidar em grupo"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/language.json b/public/language/pt-PT/language.json
new file mode 100644
index 0000000000..2c368a51ae
--- /dev/null
+++ b/public/language/pt-PT/language.json
@@ -0,0 +1,5 @@
+{
+ "name": "Português",
+ "code": "pt-PT",
+ "dir": "ltr"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/login.json b/public/language/pt-PT/login.json
new file mode 100644
index 0000000000..e2e5cfc9d7
--- /dev/null
+++ b/public/language/pt-PT/login.json
@@ -0,0 +1,12 @@
+{
+ "username-email": "Nome de utilizador / E-mail",
+ "username": "Nome de utilizador",
+ "email": "E-mail",
+ "remember_me": "Lembras-te de mim?",
+ "forgot_password": "Esqueceste-te da palavra-passe?",
+ "alternative_logins": "Logins alternativos",
+ "failed_login_attempt": "Login sem sucesso",
+ "login_successful": "Fizeste o login com sucesso!",
+ "dont_have_account": "Não tens uma conta?",
+ "logged-out-due-to-inactivity": "Foste desligado do Painel de Controlo de Administrador devido a inatividade"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/modules.json b/public/language/pt-PT/modules.json
new file mode 100644
index 0000000000..c9e582d5b7
--- /dev/null
+++ b/public/language/pt-PT/modules.json
@@ -0,0 +1,47 @@
+{
+ "chat.chatting_with": "Conversa com ",
+ "chat.placeholder": "Escreve a mensagem aqui, pressiona enter para enviar",
+ "chat.send": "Enviar",
+ "chat.no_active": "Não tens conversas ativas.",
+ "chat.user_typing": "%1 está a escrever ...",
+ "chat.user_has_messaged_you": "%1 enviou-te uma mensagem.",
+ "chat.see_all": "Ver todas as conversas",
+ "chat.mark_all_read": "Marcar todas as conversas como lidas",
+ "chat.no-messages": "Por favor seleciona um destinatário para veres o histórico de mensagens",
+ "chat.no-users-in-room": "Não existem utilizadores nesta sala",
+ "chat.recent-chats": "Conversas recentes",
+ "chat.contacts": "Contactos",
+ "chat.message-history": "Histórico de mensagens",
+ "chat.pop-out": "Destacar a janela de conversação",
+ "chat.maximize": "Maximizar",
+ "chat.seven_days": "7 dias",
+ "chat.thirty_days": "30 dias",
+ "chat.three_months": "3 meses",
+ "chat.delete_message_confirm": "Tens a certeza que desejas apagar esta mensagem?",
+ "chat.add-users-to-room": "Adicionar utilizadores à sala",
+ "composer.compose": "Compor",
+ "composer.show_preview": "Mostrar pré-visualização",
+ "composer.hide_preview": "Ocultar pré-visualização",
+ "composer.user_said_in": "%1 disse em %2:",
+ "composer.user_said": "%1 disse:",
+ "composer.discard": "Tens a certeza que queres descartar esta publicação?",
+ "composer.submit_and_lock": "Submeter e bloquear",
+ "composer.toggle_dropdown": "Alternar entre caixas",
+ "composer.uploading": "Carregando %1",
+ "composer.formatting.bold": "Negrito",
+ "composer.formatting.italic": "Itálico",
+ "composer.formatting.list": "Lista",
+ "composer.formatting.strikethrough": "Riscado",
+ "composer.formatting.link": "ligação",
+ "composer.formatting.picture": "Fotografia",
+ "composer.upload-picture": "Carregar imagem",
+ "composer.upload-file": "Carregar um ficheiro",
+ "composer.zen_mode": "Modo Zen",
+ "composer.select_category": "Selecionar uma categoria",
+ "bootbox.ok": "OK",
+ "bootbox.cancel": "Cancelar",
+ "bootbox.confirm": "Confirmar",
+ "cover.dragging_title": "Posicionamento da fotografia de capa",
+ "cover.dragging_message": "Arrasta a fotografia de capa para a posição desejada e carregar \"Gravar\"",
+ "cover.saved": "Fotografia de capa e posição gravadas"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/notifications.json b/public/language/pt-PT/notifications.json
new file mode 100644
index 0000000000..c9b9fdd32a
--- /dev/null
+++ b/public/language/pt-PT/notifications.json
@@ -0,0 +1,35 @@
+{
+ "title": "Notificações",
+ "no_notifs": "Não tens notificações novas",
+ "see_all": "Ver todas as notificações",
+ "mark_all_read": "Marcar todas as notificações como lidas",
+ "back_to_home": "Voltar para %1",
+ "outgoing_link": "Link de saída",
+ "outgoing_link_message": "Estás agora a abandonar %1",
+ "continue_to": "Continuar para %1",
+ "return_to": "Voltar a %1",
+ "new_notification": "Nova notificação",
+ "you_have_unread_notifications": "Tens notificações por ler.",
+ "new_message_from": "Nova mensagem de %1",
+ "upvoted_your_post_in": "%1 votou de forma favorável na tua publicação em %2.",
+ "upvoted_your_post_in_dual": "%1 e %2 votaram favoravelmente à tua publicação em %3.",
+ "upvoted_your_post_in_multiple": "%1 e %2 outros utilizadores votaram favoravelmente na tua publicação em %3.",
+ "moved_your_post": "%1 moveu a tua publicação para %2",
+ "moved_your_topic": "%1 moveu %2",
+ "user_flagged_post_in": "%1 sinalizou uma publicação em %2",
+ "user_flagged_post_in_dual": "%1 e %2 sinalizaram uma publicação em %3",
+ "user_flagged_post_in_multiple": "%1 e %2 outros utilizadores sinalizaram uma publicação em %3",
+ "user_posted_to": "%1 publicou uma resposta a: %2",
+ "user_posted_to_dual": "%1 e %2 publicaram respostas a: %3",
+ "user_posted_to_multiple": "%1 e %2 outros utilizadores publicaram respostas a: %3",
+ "user_posted_topic": "%1 publicou um novo tópico: %2",
+ "user_started_following_you": "%1 começou a seguir-te.",
+ "user_started_following_you_dual": "%1 e %2 começaram a seguir-te.",
+ "user_started_following_you_multiple": "%1 e %2 outros utilizadores começaram a seguir-te.",
+ "new_register": "%1 enviou um pedido de registro.",
+ "new_register_multiple": "Existem %1 pedidos de registro aguardando pela tua revisão.",
+ "email-confirmed": "E-mail confirmado",
+ "email-confirmed-message": "Obrigado por validares o teu endereço de e-mai.. A tua conta está agora totalmente ativa.",
+ "email-confirm-error-message": "Ocorreu um problema a validar o teu endereço de e-mail. Talvez o código fosse inválido ou tenha expirado.",
+ "email-confirm-sent": "E-mail de confirmação enviado."
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/pages.json b/public/language/pt-PT/pages.json
new file mode 100644
index 0000000000..b0c9ea6b93
--- /dev/null
+++ b/public/language/pt-PT/pages.json
@@ -0,0 +1,50 @@
+{
+ "home": "Página inicial",
+ "unread": "Tópicos por ler",
+ "popular-day": "Tópicos populares de hoje",
+ "popular-week": "Tópicos populares esta semana",
+ "popular-month": "Tópicos populares este mês",
+ "popular-alltime": "Tópicos populares desde sempre",
+ "recent": "Tópicos recentes",
+ "flagged-posts": "Publicações sinalizadas",
+ "ip-blacklist": "Lista negra de IPs",
+ "users/online": "Utilizadores online",
+ "users/latest": "Últimos utilizadores",
+ "users/sort-posts": "Utilizadores com mais publicações",
+ "users/sort-reputation": "Utilizadores com a reputação mais elevada",
+ "users/banned": "Utilizadores banidos",
+ "users/most-flags": "Utilizadores mais sinalizados",
+ "users/search": "Pesquisa por utilizadores",
+ "notifications": "Notificações",
+ "tags": "Marcadores",
+ "tag": "Tópicos marcados sobre \"%1\"",
+ "register": "Registar uma conta",
+ "registration-complete": "Registro completo",
+ "login": "Faz login na tua conta",
+ "reset": "Reinicia a tua palavra-passe",
+ "categories": "Categorias",
+ "groups": "Grupos",
+ "group": "%1 group",
+ "chats": "Conversas",
+ "chat": "Conversando com %1",
+ "account/edit": "Editando \"%1\"",
+ "account/edit/password": "Editando palavra-passe de \"%1\"",
+ "account/edit/username": "Editando o nome de utilizador de \"%1\"",
+ "account/edit/email": "Editando o e-mail de \"%1\"",
+ "account/info": "Informação de conta",
+ "account/following": "Pessoas %1 que segue",
+ "account/followers": "Pessoas que seguem %1",
+ "account/posts": "Publicações feitas por %1",
+ "account/topics": "Tópicos criados por %1",
+ "account/groups": "Grupos de %1",
+ "account/bookmarks": "Publicações marcadas de %1",
+ "account/settings": "Definições de utilizador",
+ "account/watched": "Tópicos vistos por %1",
+ "account/upvoted": "Publicações votadas favoravelmente por %1",
+ "account/downvoted": "Publicações votadas negativamente por %1",
+ "account/best": "Melhores publicações feitas por %1",
+ "confirm": "E-mail confirmado",
+ "maintenance.text": "%1 está atualmente sobre manutenção. Por favor, volta noutra altura.",
+ "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:",
+ "throttled.text": "%1 não está disponível de momento devido a um carregamento excesso. Por favor, volta mais tarde."
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/recent.json b/public/language/pt-PT/recent.json
new file mode 100644
index 0000000000..e580776804
--- /dev/null
+++ b/public/language/pt-PT/recent.json
@@ -0,0 +1,19 @@
+{
+ "title": "Recentes",
+ "day": "Dia",
+ "week": "Semana",
+ "month": "Mês",
+ "year": "Ano",
+ "alltime": "Desde sempre",
+ "no_recent_topics": "Não existem tópicos recentes.",
+ "no_popular_topics": "Não existem tópicos populares.",
+ "there-is-a-new-topic": "Existe um novo tópico.",
+ "there-is-a-new-topic-and-a-new-post": "Existe um novo tópico e uma nova publicação.",
+ "there-is-a-new-topic-and-new-posts": "Existe um tópico novo e %1 publicações novas.",
+ "there-are-new-topics": "Existem %1 tópicos novos.",
+ "there-are-new-topics-and-a-new-post": "Existem %1 tópicos novos e uma nova publicação.",
+ "there-are-new-topics-and-new-posts": "Existem %1 tópicos novos e %2 publicações novas.",
+ "there-is-a-new-post": "Existe uma publicação nova.",
+ "there-are-new-posts": "Existem %1 novas publicações.",
+ "click-here-to-reload": "Carrega aqui para recarregar."
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/register.json b/public/language/pt-PT/register.json
new file mode 100644
index 0000000000..5ec6fa8f92
--- /dev/null
+++ b/public/language/pt-PT/register.json
@@ -0,0 +1,23 @@
+{
+ "register": "Regista-te",
+ "cancel_registration": "Cancelar o registro",
+ "help.email": "Por definição, o teu e-mail será oculto do público.",
+ "help.username_restrictions": "Um nome de utilizador único entre %1 e %2 caracteres. Outros podem mencionar-te através de @nome de utilizador.",
+ "help.minimum_password_length": "O comprimento da palavra-passe deve ter no mínimo %1 caracteres.",
+ "email_address": "Endereço de e-mail",
+ "email_address_placeholder": "Insere o endereço de e-mail",
+ "username": "Nome de utilizador",
+ "username_placeholder": "Inserir nome de utilizador",
+ "password": "Palavra-passe",
+ "password_placeholder": "Insere a palavra-passe",
+ "confirm_password": "Confirmar palavra-passe",
+ "confirm_password_placeholder": "Confirmar palavra-passe",
+ "register_now_button": "Regista-te agora",
+ "alternative_registration": "Registro alternativo",
+ "terms_of_use": "Termos de utilização",
+ "agree_to_terms_of_use": "Eu aceito os Termos de Utilização",
+ "terms_of_use_error": "Deves aceitar os Termos de Utilização",
+ "registration-added-to-queue": "O teu registro foi adicionado à fila de aprovação. Receberás um e-mail quando for aceite pelo administrador.",
+ "interstitial.intro": "Requeremos informação adicional antes de criarmos a tua conta.",
+ "interstitial.errors-found": "Não pudemos completar o teu registro:"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/reset_password.json b/public/language/pt-PT/reset_password.json
new file mode 100644
index 0000000000..a317ced7bc
--- /dev/null
+++ b/public/language/pt-PT/reset_password.json
@@ -0,0 +1,17 @@
+{
+ "reset_password": "Reinicia a palavra-passe",
+ "update_password": "Altera a palavra-passe",
+ "password_changed.title": "Palavra-passe alterada",
+ "password_changed.message": "
reinício da palavra-passe concluído. Por favor, faça o log in outra vez.",
+ "wrong_reset_code.title": "Código de reiniciação incorreto",
+ "wrong_reset_code.message": "O código de reinício recebido estava incorreto. Por favor, tenta novamente ou pede um novo código.",
+ "new_password": "Nova palavra-passe",
+ "repeat_password": "Confirmar palavra-passe",
+ "enter_email": "Por favor, insere o teu undergo de e-mail e nós iremos enviar-te um e-mail com instruções para reiniciares a tua conta.",
+ "enter_email_address": "Insere o endereço de e-mail",
+ "password_reset_sent": "Reinício de palavra-passe enviado",
+ "invalid_email": "E-mail inválido / E-mail não existe!",
+ "password_too_short": "A palavra-passe inserida é demasiado pequena. Por favor, escolhe uma nova.",
+ "passwords_do_not_match": "As duas palavras-passe que inseriste não coincidem.",
+ "password_expired": "A tua palavra-passe expirou, por favor escolher uma nova"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/search.json b/public/language/pt-PT/search.json
new file mode 100644
index 0000000000..3da2ed6281
--- /dev/null
+++ b/public/language/pt-PT/search.json
@@ -0,0 +1,40 @@
+{
+ "results_matching": "%1 resultado(s) correspondendo \"%2\", (%3 segundos)",
+ "no-matches": "Não foram encontradas correspondências",
+ "advanced-search": "Pesquisa avançada",
+ "in": "Em",
+ "titles": "Títulos",
+ "titles-posts": "Títulos e Publicações",
+ "posted-by": "Publicado por",
+ "in-categories": "Em Categorias",
+ "search-child-categories": "Procurar categorias infantis",
+ "reply-count": "Contagem de respostas",
+ "at-least": "Pelo menos",
+ "at-most": "No máximo",
+ "post-time": "Hora da publicação",
+ "newer-than": "Mais recente que",
+ "older-than": "Mais antigo que",
+ "any-date": "Qualquer data",
+ "yesterday": "Ontem",
+ "one-week": "Uma semana",
+ "two-weeks": "Duas semanas",
+ "one-month": "Um mês",
+ "three-months": "Três meses",
+ "six-months": "Seis meses",
+ "one-year": "Um ano",
+ "sort-by": "Sortear por",
+ "last-reply-time": "Tempo da última resposta",
+ "topic-title": "Título do tópico",
+ "number-of-replies": "Número de respostas",
+ "number-of-views": "Número de visualizações",
+ "topic-start-date": "Data de início do tópico",
+ "username": "Nome de utilizador",
+ "category": "Categoria",
+ "descending": "Em ordem descendente",
+ "ascending": "Em ordem ascendente",
+ "save-preferences": "Gravar preferências",
+ "clear-preferences": "Limpar preferências",
+ "search-preferences-saved": "Preferências de pesquisa gravadas",
+ "search-preferences-cleared": "Preferências de pesquisa gravadas",
+ "show-results-as": "Mostrar resultados como"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/success.json b/public/language/pt-PT/success.json
new file mode 100644
index 0000000000..ed023f1911
--- /dev/null
+++ b/public/language/pt-PT/success.json
@@ -0,0 +1,6 @@
+{
+ "success": "Sucesso",
+ "topic-post": "Publicaste com sucesso.",
+ "authentication-successful": "Autenticação bem sucedida",
+ "settings-saved": "Configurações guardadas!"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/tags.json b/public/language/pt-PT/tags.json
new file mode 100644
index 0000000000..b81359d694
--- /dev/null
+++ b/public/language/pt-PT/tags.json
@@ -0,0 +1,7 @@
+{
+ "no_tag_topics": "Não existem tópicos com estes marcadores.",
+ "tags": "Marcadores",
+ "enter_tags_here": "Insere os marcadores aqui, cada um com %1 a %2 caracteres.",
+ "enter_tags_here_short": "Insere marcadores...",
+ "no_tags": "Ainda não existem marcadores."
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/topic.json b/public/language/pt-PT/topic.json
new file mode 100644
index 0000000000..e6e023174b
--- /dev/null
+++ b/public/language/pt-PT/topic.json
@@ -0,0 +1,138 @@
+{
+ "topic": "Tópico",
+ "topic_id": "ID do tópico",
+ "topic_id_placeholder": "Inserir o ID do tópico",
+ "no_topics_found": "Tópicos não encontrados!",
+ "no_posts_found": "Publicações não encontradas!",
+ "post_is_deleted": "Esta publicação foi eliminada!",
+ "topic_is_deleted": "Este tópico foi eliminado!",
+ "profile": "Perfil",
+ "posted_by": "Publicado por %1",
+ "posted_by_guest": "Publicado por Convidado",
+ "chat": "Conversas",
+ "notify_me": "Ser notificado de novas respostas neste tópico",
+ "quote": "Citar",
+ "reply": "Responder",
+ "replies_to_this_post": "Respostas: %1",
+ "reply-as-topic": "Responder com um tópico",
+ "guest-login-reply": "Faz login para responder",
+ "edit": "Editar",
+ "delete": "Apagar",
+ "purge": "Remover",
+ "restore": "Restaurar",
+ "move": "Mover",
+ "fork": "Clonar",
+ "link": "Ligação",
+ "share": "Partilhar",
+ "tools": "Ferramentas",
+ "flag": "Sinalizar",
+ "locked": "Bloqueado",
+ "pinned": "Afixado",
+ "moved": "Movido",
+ "bookmark_instructions": "Carrega aqui para voltares à última publicação lide assunto.",
+ "flag_title": "Sinaliza esta publicação para moderação",
+ "flag_success": "Esta publicação foi sinalizada para moderação.",
+ "flag_manage_title": "Publicação sinalizada em %1",
+ "flag_manage_history": "Histórico de ação",
+ "flag_manage_no_history": "Não existe histórico de eventos para reportar",
+ "flag_manage_assignee": "Assinante",
+ "flag_manage_state": "Estado",
+ "flag_manage_state_open": "Novo/Abrir",
+ "flag_manage_state_wip": "Trabalho em progresso",
+ "flag_manage_state_resolved": "Resolvido",
+ "flag_manage_state_rejected": "Rejeitado",
+ "flag_manage_notes": "Notas partilhadas",
+ "flag_manage_update": "Atualiza o estado da sinalização",
+ "flag_manage_history_assignee": "Designado para %1",
+ "flag_manage_history_state": "Estado atualizado para %1",
+ "flag_manage_history_notes": "Notas da sinalização atualizadas",
+ "flag_manage_saved": "Detalhes de sinalização atualizados",
+ "deleted_message": "Este tópico foi eliminado. Somente utilizadores com privilégios de manutenção do tópico podem vê-lo.",
+ "following_topic.message": "A partir de agora receberás uma notificação sempre que alguém publicar neste tópico.",
+ "not_following_topic.message": "Verás este tópico na lista de tópicos por ler mas não irás receber notificações quando alguém publicar neste tópico.",
+ "ignoring_topic.message": "Não verás mais este tópico na tua lista de tópicos por ler. Serás notificado sempre que fores mencionado ou o teu tópico seja votado favoravelmente.",
+ "login_to_subscribe": "Por favor regista-te ou efetua o login para subscreveres este tópico.",
+ "markAsUnreadForAll.success": "Tópico marcado como \"por ler\" para todos.",
+ "mark_unread": "Marcar como não lido",
+ "mark_unread.success": "Tópico marcado como \"não lido\".",
+ "watch": "Ver",
+ "unwatch": "Marcar como \"não visto\"",
+ "watch.title": "Ser notificado de novas respostas neste tópicos",
+ "unwatch.title": "Parar de seguir este tópico",
+ "share_this_post": "Partilhar esta publicação",
+ "watching": "Vendo",
+ "not-watching": "Não está a ver",
+ "ignoring": "Ignorando",
+ "watching.description": "Notificar-me sobre novas respostas.
Mostrar o tópico em \"não lidos\".",
+ "not-watching.description": "Não me notificar de novas respostas.
Mostrar tópico em \"não lidos\" se a categoria não está ignorada.",
+ "ignoring.description": "Não me notificar de novas respostas.
Não mostrar este tópico em \"não lidos\".",
+ "thread_tools.title": "Ferramentas de tópicos",
+ "thread_tools.markAsUnreadForAll": "Marcar todas como não lidas",
+ "thread_tools.pin": "Fixar tópico",
+ "thread_tools.unpin": "Desafixar tópico",
+ "thread_tools.lock": "Bloquear tópico",
+ "thread_tools.unlock": "Desbloquear tópico",
+ "thread_tools.move": "Mover tópico",
+ "thread_tools.move_all": "Mover todos",
+ "thread_tools.fork": "Clonar tópico",
+ "thread_tools.delete": "Eliminar tópico",
+ "thread_tools.delete-posts": "Apagar publicações",
+ "thread_tools.delete_confirm": "Tens a certeza que desejas apagar este tópico?",
+ "thread_tools.restore": "Restaurar tópico",
+ "thread_tools.restore_confirm": "Tens a certeza que pretendes restaurar este tópico?",
+ "thread_tools.purge": "Purgar tópico",
+ "thread_tools.purge_confirm": "Tens a certeza que desejas continuar com a purgação deste tópico?",
+ "topic_move_success": "Este tópico foi movido com sucesso para %1",
+ "post_delete_confirm": "Tens a certeza que desejas eliminar esta publicação?",
+ "post_restore_confirm": "Tens a certeza que desejas restaurar esta publicação?",
+ "post_purge_confirm": "Tens a certeza que desejas purgar esta publicação?",
+ "load_categories": "Carregando Categorias",
+ "disabled_categories_note": "Desativar Categorias que estão a cinzento",
+ "confirm_move": "Mover",
+ "confirm_fork": "Clonar",
+ "bookmark": "Marcador",
+ "bookmarks": "Marcadores",
+ "bookmarks.has_no_bookmarks": "Ainda não marcaste nenhuma publicação.",
+ "loading_more_posts": "Carregando mais publicações",
+ "move_topic": "Mover tópico",
+ "move_topics": "Mover tópicos",
+ "move_post": "Mover publicação",
+ "post_moved": "Publicação movida!",
+ "fork_topic": "Clonar tópico",
+ "topic_will_be_moved_to": "Este tópico será movido para a categoria",
+ "fork_topic_instruction": "Carrega nas publicações que queres clonar",
+ "fork_no_pids": "Sem publicações selecionadas!",
+ "fork_pid_count": "%1 publicação(ões) selecionada(s)",
+ "fork_success": "Clonaste um tópico com sucesso! Carrega aqui para ires para o tópico clonado.",
+ "delete_posts_instruction": "Carrega em publicações que queres apagar/purgar",
+ "composer.title_placeholder": "Insere aqui o título do tópico...",
+ "composer.handle_placeholder": "Nome",
+ "composer.discard": "Descartar",
+ "composer.submit": "Submeter",
+ "composer.replying_to": "Respondendo a %1",
+ "composer.new_topic": "Novo tópico",
+ "composer.uploading": "carregando...",
+ "composer.thumb_url_label": "Cola um URL da miniatura do tópico",
+ "composer.thumb_title": "Adiciona uma miniatura a este tópico",
+ "composer.thumb_url_placeholder": "http://exemplo.com/dedo.png",
+ "composer.thumb_file_label": "Ou carrega um ficheiro",
+ "composer.thumb_remove": "Limpar os campos",
+ "composer.drag_and_drop_images": "Arrasta e larga imagens aqui",
+ "more_users_and_guests": "mais %1 utilizador(es) e %2 convidado(s)",
+ "more_users": "mais %1 utilizador(es)",
+ "more_guests": "mais %1 convidado(s)",
+ "users_and_others": "%1 e mais %2",
+ "sort_by": "Dispor por",
+ "oldest_to_newest": "Do mais antigo para o mais recente",
+ "newest_to_oldest": "Mais recente para mais antigo",
+ "most_votes": "Mais votos",
+ "most_posts": "Mais publicções",
+ "stale.title": "Em vez disso, criar novo tópico?",
+ "stale.warning": "O tópico ao qual estás a responder é bastante antigo. Gostarias antes de criar um novo tópico e referir este na tua resposta?",
+ "stale.create": "Criar um novo tópico",
+ "stale.reply_anyway": "Responder a este tópico à mesma",
+ "link_back": "Referindo: [%1](%2)",
+ "spam": "Spam",
+ "offensive": "Ofensivo",
+ "custom-flag-reason": "Introduzir uma razão para a sinalização"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/unread.json b/public/language/pt-PT/unread.json
new file mode 100644
index 0000000000..60b5b3b792
--- /dev/null
+++ b/public/language/pt-PT/unread.json
@@ -0,0 +1,13 @@
+{
+ "title": "Por ler",
+ "no_unread_topics": "Não existem tópicos por ler.",
+ "load_more": "Carregar mais",
+ "mark_as_read": "Marcar como lido",
+ "selected": "Selecionados",
+ "all": "Todos",
+ "all_categories": "Todas as categorias",
+ "topics_marked_as_read.success": "Tópicos marcados como lidos!",
+ "all-topics": "Todos os tópicos",
+ "new-topics": "Novos tópicos",
+ "watched-topics": "Tópicos vistos"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/uploads.json b/public/language/pt-PT/uploads.json
new file mode 100644
index 0000000000..b730ff4fe8
--- /dev/null
+++ b/public/language/pt-PT/uploads.json
@@ -0,0 +1,6 @@
+{
+ "uploading-file": "Carregando o ficheiro...",
+ "select-file-to-upload": "Seleciona um ficheiro para carregar!",
+ "upload-success": "Ficheiro carregador com sucesso!",
+ "maximum-file-size": "Máximo de %1 kb"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/user.json b/public/language/pt-PT/user.json
new file mode 100644
index 0000000000..4de96705e7
--- /dev/null
+++ b/public/language/pt-PT/user.json
@@ -0,0 +1,130 @@
+{
+ "banned": "Banido",
+ "offline": "Offline",
+ "username": "Nome de utilizador",
+ "joindate": "Juntar data",
+ "postcount": "Contagem de publicações",
+ "email": "E-mail",
+ "confirm_email": "Confirmar o e-mail",
+ "account_info": "Informação de conta",
+ "ban_account": "Banir conta",
+ "ban_account_confirm": "Queres realmente banir este utilizador?",
+ "unban_account": "Deixar de banir esta conta",
+ "delete_account": "Eliminar conta",
+ "delete_account_confirm": "Tens a certeza que queres eliminar a tua conta?
Esta ação é irreversível e não terás oportunidade de recuperar nenhuma das tuas informações
Insere o teu nome de utilizador para confirmar que desejas destruir esta conta.",
+ "delete_this_account_confirm": "Tens a certeza que queres apagar esta conta?
Esta acção é irreversível e não terás oportunidade de recuperar nenhuma informação
",
+ "account-deleted": "Conta eliminada",
+ "fullname": "Nome completo",
+ "website": "Website",
+ "location": "Localização",
+ "age": "Idade",
+ "joined": "Aderiu",
+ "lastonline": "Última vez online",
+ "profile": "Perfil",
+ "profile_views": "Visualizações ao perfil",
+ "reputation": "Reputação",
+ "bookmarks": "Marcadores",
+ "watched": "Visto ",
+ "followers": "Seguidores",
+ "following": "Seguindo",
+ "aboutme": "Sobre mim",
+ "signature": "Assinatura",
+ "birthday": "Data de nascimento",
+ "chat": "Conversa",
+ "chat_with": "Continuar a conversa com %1",
+ "new_chat_with": "Começa nova conversa com %1",
+ "follow": "Segue",
+ "unfollow": "Deixar de seguir",
+ "more": "Mais",
+ "profile_update_success": "Perfil foi atualizado com sucesso!",
+ "change_picture": "Mudar fotografia",
+ "change_username": "Mudar nome de utilizador",
+ "change_email": "Mudar e-mail",
+ "edit": "Editar",
+ "edit-profile": "Editar perfil",
+ "default_picture": "Icon pré-definido",
+ "uploaded_picture": "Fotografia carregada",
+ "upload_new_picture": "Carregar uma nova imagem",
+ "upload_new_picture_from_url": "Carrega uma nova imagem através de um URL",
+ "current_password": "Palavra-passe atual",
+ "change_password": "Palavra-passe alterada",
+ "change_password_error": "Palavra-passe inválida!",
+ "change_password_error_wrong_current": "A tua palavra-passe atual não está correta!",
+ "change_password_error_length": "Palavra-passe demasiado curta!",
+ "change_password_error_match": "As palavras-passe devem coincidir!",
+ "change_password_error_privileges": "Não tens os direitos necessários para alterar esta palavra-passe.",
+ "change_password_success": "A tua palavra-passe foi atualizada!",
+ "confirm_password": "Confirmar palavra-passe",
+ "password": "Palavra-passe",
+ "username_taken_workaround": "O nome de utilizador que escolheste já está em utilização por isso alteramo-lo ligeiramente. És agora conhecido como %1",
+ "password_same_as_username": "A tua palavra-passe é igual ao teu nome de utilizador. Por favor, escolhe outra palavra-passe.",
+ "password_same_as_email": "A tua palavra-passe é a mesma que o teu e-mail. Por favor, escolhe outra palavra-passe.",
+ "upload_picture": "Carregar imagem",
+ "upload_a_picture": "Carregar uma imagem",
+ "remove_uploaded_picture": "Remover imagem carregada",
+ "upload_cover_picture": "Carregar fotografia de capa",
+ "settings": "Definições",
+ "show_email": "Mostrar o meu e-mail",
+ "show_fullname": "Mostrar o meu nome completo",
+ "restrict_chats": "Só permitir mensagens de utilizadores que eu sigo",
+ "digest_label": "Subscrever o resumo",
+ "digest_description": "Subscrever atualizações por e-mail para este fórum (novas notificações e tópicos) de acordo com um horário definido",
+ "digest_off": "Desligado",
+ "digest_daily": "Diariamente ",
+ "digest_weekly": "Semanalmente",
+ "digest_monthly": "Mensalmente",
+ "send_chat_notifications": "Enviar um e-mail se receber uma nova mensagem e não estiver online",
+ "send_post_notifications": "Enviar um -email quando respostas forem dadas a tópicos que subscrevi",
+ "settings-require-reload": "Algumas alterações requerem um recarregamento. Carregue aqui para recarregar a página.",
+ "has_no_follower": "Este utilizador não tem nenhum seguidor :(",
+ "follows_no_one": "Este utilizador não está a seguir ninguém :(",
+ "has_no_posts": "Este utilizador ainda não publicou nada.",
+ "has_no_topics": "Este utilizar ainda não publicou nenhum tópico.",
+ "has_no_watched_topics": "Este utilizador ainda não visualizou qualquer tópico até ao momento.",
+ "has_no_upvoted_posts": "Este utilizador ainda não votou favoravelmente em nenhuma publicação.",
+ "has_no_downvoted_posts": "Este utilizador ainda não votou negativamente em nenhuma publicação.",
+ "has_no_voted_posts": "Este utilizador ainda não tem nenhuma publicação com votos",
+ "email_hidden": "E-mail escondido",
+ "hidden": "Escondido",
+ "paginate_description": "Paginar os tópicos e publicações em vez de usar o scroll infinito",
+ "topics_per_page": "Tópicos por página",
+ "posts_per_page": "Publicações por página",
+ "notification_sounds": "Tocar um som quando uma notificação for recebida",
+ "notifications_and_sounds": "Notificações & Sons",
+ "incoming-message-sound": "Som de mensagem recebida",
+ "outgoing-message-sound": "Som de mensagem enviada",
+ "notification-sound": "Som de notificação",
+ "no-sound": "Sem som",
+ "browsing": "Definições de navegação",
+ "open_links_in_new_tab": "Abrir links num novo separador",
+ "enable_topic_searching": "Permitir pesquisa dentro dos tópicos",
+ "topic_search_help": "Se ativada, a pesquisa dentro de tópicos irá sobrepor-se ao comportamento normal de pesquisa do browser pré-definido e irá permitir-te pesquisar ao longo de todo o tópico, em vez de pesquisar somente no que é mostrado no ecrã",
+ "delay_image_loading": "Atrasar o carregamento da imagem",
+ "image_load_delay_help": "Se ativado, as imagens nos tópicos não carregarão até que fiquem visíveis no ecrã",
+ "scroll_to_my_post": "Depois de publicar uma resposta, mostrar a nova publicação",
+ "follow_topics_you_reply_to": "Visualizar tópicos aos quais respondeste",
+ "follow_topics_you_create": "Visualizar tópicos que criaste",
+ "grouptitle": "Título do grupo",
+ "no-group-title": "Sem título de grupo",
+ "select-skin": "Seleciona uma máscara",
+ "select-homepage": "Seleciona a página inicial",
+ "homepage": "Página Inicial",
+ "homepage_description": "Seleciona a página que irás usar como página inicial do fórum ou \"Nenhum\" para usar a página inicial por defeito",
+ "custom_route": "Rota para a página inicial personalizada",
+ "custom_route_help": "Introduz aqui o nome da rota, sem uma barra a preceder (por exemplo: \"recente\", ou \"popular\")",
+ "sso.title": "Serviços de login único",
+ "sso.associated": "Associado a",
+ "sso.not-associated": "Carrega aqui para associares com",
+ "info.latest-flags": "Últimas sinalizações",
+ "info.no-flags": "Não foram encontrados publicações sinalizadas",
+ "info.ban-history": "Histórico de expulsões recentes",
+ "info.no-ban-history": "Este utilizador nunca foi banido",
+ "info.banned-until": "Banido até %1",
+ "info.banned-permanently": "Banido permanentemente",
+ "info.banned-reason-label": "Razão",
+ "info.banned-no-reason": "Sem razão atribuida.",
+ "info.username-history": "Históricos do nome de utilizador",
+ "info.email-history": "Histórico de e-mail",
+ "info.moderation-note": "Nota de moderação",
+ "info.moderation-note.success": "Nota de moderação gravada"
+}
\ No newline at end of file
diff --git a/public/language/pt-PT/users.json b/public/language/pt-PT/users.json
new file mode 100644
index 0000000000..3670e64b12
--- /dev/null
+++ b/public/language/pt-PT/users.json
@@ -0,0 +1,21 @@
+{
+ "latest_users": "Últimos utilizadores",
+ "top_posters": "Top de publicadores",
+ "most_reputation": "Maior reputação",
+ "most_flags": "Mais assinalados",
+ "search": "Procurar",
+ "enter_username": "Insere um nome de utilizador para pesquisar",
+ "load_more": "Carregar mais",
+ "users-found-search-took": "%1 utilizador(es) encontrados! A pesquisa demorou %2 segundos.",
+ "filter-by": "Filtrar por",
+ "online-only": "Só online",
+ "invite": "Convidar",
+ "invitation-email-sent": "Foi enviado um e-mail de convite para %1",
+ "user_list": "Lista de utilizadores",
+ "recent_topics": "Tópicos recentes",
+ "popular_topics": "Tópicos populares",
+ "unread_topics": "Tópicos por ler",
+ "categories": "Categorias",
+ "tags": "Marcadores",
+ "no-users-found": "Não foram encontrados utilizadores!"
+}
\ No newline at end of file