diff --git a/constants.py b/constants.py
index 3f78275..a3e9321 100755
--- a/constants.py
+++ b/constants.py
@@ -40,7 +40,7 @@
REGISTRATION = True # (bool)
# Supported languages for the application
-LANGUAGES = ["en", "tr", "es", "de", "zh", "fr", "uk", "ru"] # (list)
+LANGUAGES = ["en", "tr", "es", "de", "zh", "fr", "uk", "ru", "pt"] # (list)
### LOGGER SETTINGS ###
diff --git a/templates/tailwindUI/changeLanguage.html.jinja b/templates/tailwindUI/changeLanguage.html.jinja
index 97027f0..209100b 100644
--- a/templates/tailwindUI/changeLanguage.html.jinja
+++ b/templates/tailwindUI/changeLanguage.html.jinja
@@ -16,6 +16,9 @@
🇹🇷 Türkçe
+
+ 🇵🇹 Português
+
🇪🇸 Español
diff --git a/translations/pt.json b/translations/pt.json
new file mode 100644
index 0000000..eb16495
--- /dev/null
+++ b/translations/pt.json
@@ -0,0 +1,320 @@
+{
+ "about": {
+ "title": "Sobre",
+ "version": "Versão",
+ "description": "Aplicativo de blog simples feito com Flask, SQLite3, WTForms, Passlib, reCAPTCHA, Requests, TailwindCSS, Tabler Icons",
+ "moreInfo": "Clique para mais informações sobre",
+ "sourceRepo": "código-fonte",
+ "credits": "Feito com por Doğukan Ürker"
+ },
+ "accountSettings": {
+ "title": "Configurações da Conta",
+ "username": "alterar nome de usuário",
+ "password": "alterar senha",
+ "delete": "excluir conta",
+ "language": "alterar idioma",
+ "profilePicture": "alterar foto de perfil"
+ },
+ "adminPanel": {
+ "title": "Painel de Administração",
+ "users": "Usuários",
+ "posts": "Postagens",
+ "comments": "Comentários"
+ },
+ "adminPanelComments": {
+ "title": "Painel de Administração - Comentários",
+ "comments": "Comentários",
+ "postID": "ID do Post",
+ "creationTime": "Hora da Criação",
+ "creationDate": "Data da Criação",
+ "author": "Autor"
+ },
+ "adminPanelUsers": {
+ "title": "Painel de Administração - Usuários",
+ "id": "ID",
+ "users": "Usuários",
+ "email": "E-mail",
+ "joinTime": "Hora de Entrada",
+ "joinDate": "Data de Entrada",
+ "role": "Função",
+ "points": "Pontos",
+ "delete": "excluir usuário",
+ "setUser": "definir função de usuário como usuário",
+ "setAdmin": "definir função de usuário como administrador"
+ },
+ "categories": {
+ "all": "Todos",
+ "apps": "Aplicativos",
+ "art": "Arte",
+ "books": "Livros",
+ "business": "Negócios",
+ "code": "Código",
+ "education": "Educação",
+ "finance": "Finanças",
+ "foods": "Comida",
+ "games": "Jogos",
+ "health": "Saúde",
+ "history": "História",
+ "movies": "Filmes",
+ "music": "Música",
+ "nature": "Natureza",
+ "science": "Ciência",
+ "series": "Séries",
+ "sports": "Esportes",
+ "technology": "Tecnologia",
+ "travel": "Viagens",
+ "web": "Web",
+ "other": "Outro"
+ },
+ "changeLanguage": {
+ "title": "Selecione o Idioma"
+ },
+ "changePassword": {
+ "title": "Mudar Senha",
+ "currentPassword": "Senha Atual",
+ "newPassword": "Nova Senha",
+ "confirmPassword": "Confirmar Senha",
+ "change": "Mudar Senha"
+ },
+ "changeProfilePicture": {
+ "title": "Mudar Foto de Perfil",
+ "default": "A foto padrão é o seu nome de usuário",
+ "info": "clique para mais informações sobre sementes de foto de perfil",
+ "set": "Definir Foto de Perfil",
+ "placeholder": "Digite a semente para a foto de perfil"
+ },
+ "changeUserName": {
+ "title": "Mudar Nome de Usuário",
+ "placeholder": "Novo Nome de Usuário",
+ "change": "Mudar Nome de Usuário"
+ },
+ "createPost": {
+ "title": "Criar Post",
+ "titlePlaceholder": "título do post",
+ "category": "Selecionar Categoria",
+ "content": "Conteúdo",
+ "banner": "Carregar um Banner",
+ "bannerPlaceholder": "banner do post",
+ "tags": "tags",
+ "post": "Publicar",
+ "separate": "(Separe as tags com vírgulas)"
+ },
+ "csrfError": {
+ "reason": "Motivo",
+ "description": "Preencha o mesmo formulário novamente."
+ },
+ "dashboard": {
+ "title": "Painel de Controle",
+ "titleAdmin": "Painel de Administração - Postagens",
+ "posts": "Postagens",
+ "comments": "Comentários",
+ "tags": "Tags",
+ "views": "Visualizações",
+ "creationTime": "Hora da Criação",
+ "creationDate": "Data da Criação",
+ "editTime": "Última Hora de Edição",
+ "editDate": "Última Data de Edição",
+ "author": "Autor",
+ "category": "Categoria",
+ "noPosts": "Este usuário ainda não criou nenhuma postagem.",
+ "noPost": "Nenhuma postagem ainda,",
+ "create": "criar uma",
+ "go": "ir para a postagem"
+ },
+ "editPost": {
+ "title": "Editar Postagem",
+ "titlePlaceholder": "título do post",
+ "category": "Selecionar uma Categoria",
+ "current": "Banner Atual",
+ "new": "Novo Banner",
+ "tags": "tags",
+ "separate": "(Separe as tags com vírgulas)",
+ "save": "Salvar Alterações",
+ "bannerPlaceholder": "banner do post"
+ },
+ "login": {
+ "title": "Entrar",
+ "username": "nome de usuário",
+ "password": "senha",
+ "forgot": "Esqueceu a Senha?"
+ },
+ "notFound": {
+ "text": "Não sei o que é",
+ "sorry": "desculpe",
+ "home": "ir para a página inicial"
+ },
+ "passwordReset": {
+ "title": "Redefinição de Senha",
+ "email": "e-mail",
+ "username": "nome de usuário",
+ "send": "Enviar E-mail de Redefinição",
+ "reset": "Redefinir Senha",
+ "code": "Enviar Código",
+ "codePlaceholder": "Digite o código que você recebeu",
+ "newPassword": "Nova Senha",
+ "confirmPassword": "Confirmar Senha"
+ },
+ "post": {
+ "placeholder": "Quais são seus pensamentos?"
+ },
+ "sortMenu": {
+ "asc": "Ascendente",
+ "desc": "Descendente",
+ "create": "Data da Criação",
+ "title": "Título",
+ "views": "Visualizações",
+ "category": "Categoria",
+ "edit": "Última Data de Edição"
+ },
+ "search": {
+ "title": "Buscar",
+ "noResults": "Nenhum resultado",
+ "users": "Usuários",
+ "posts": "Postagens",
+ "results": "Resultados"
+ },
+ "searchBar": {
+ "title": "Buscar",
+ "placeholder": "buscar"
+ },
+ "signup": {
+ "title": "Cadastrar-se",
+ "username": "nome de usuário",
+ "email": "e-mail",
+ "password": "senha",
+ "confirm": "confirmar senha",
+ "policy": "Política de Privacidade",
+ "by": "Ao se cadastrar, você aceita"
+ },
+ "unauthorized": {
+ "title": "Erro reCAPTCHA",
+ "request": "Por favor, envie o formulário novamente.",
+ "info": "A Verificação reCAPTCHA falhou."
+ },
+ "user": {
+ "posts": "Postagens",
+ "comments": "Comentários",
+ "points": "Pontos",
+ "joinDate": "Data de Entrada",
+ "createDate": "Data da Criação",
+ "createTime": "Hora da Criação",
+ "dashboard": "painel de controle",
+ "role": "Função",
+ "user": "Usuário",
+ "admin": "administrador",
+ "settings": "configurações",
+ "views": "Visualizações",
+ "go": "ir para a postagem"
+ },
+ "verifyUser": {
+ "title": "Verificar Conta",
+ "placeholder": "Digite o código que você recebeu",
+ "send": "Clique para enviar o código de verificação"
+ },
+ "flash": {
+ "changePassword": {
+ "same": "A nova senha não pode ser a mesma que a senha antiga.",
+ "match": "As senhas não correspondem.",
+ "success": "A senha foi alterada.",
+ "old": "A senha antiga está errada.",
+ "login": "Você precisa fazer login para alterar sua senha."
+ },
+ "changeProfilePicture": {
+ "success": "A foto de perfil foi alterada."
+ },
+ "changeUserName": {
+ "same": "Este já é seu nome de usuário.",
+ "success": "O nome de usuário foi alterado.",
+ "taken": "Este nome de usuário já está em uso.",
+ "ascii": "O nome de usuário só pode conter caracteres ASCII."
+ },
+ "createPost": {
+ "success": "Você ganhou 20 pontos por criar uma postagem.",
+ "login": "Você precisa fazer login para criar uma postagem.",
+ "empty": "Você não pode deixar o título ou o conteúdo em branco."
+ },
+ "dashboard": {
+ "login": "Você precisa fazer login para ver seu painel de controle."
+ },
+ "editPost": {
+ "success": "A postagem foi editada.",
+ "login": "Você precisa fazer login para editar uma postagem.",
+ "empty": "Você não pode deixar o título ou o conteúdo em branco.",
+ "author": "Você não pode editar a postagem de outra pessoa."
+ },
+ "login": {
+ "success": "Você fez login com sucesso.",
+ "password": "Senha errada",
+ "notFound": "Usuário não encontrado"
+ },
+ "logout": {
+ "success": "Você saiu com sucesso."
+ },
+ "passwordReset": {
+ "success": "A senha foi redefinida. Você pode fazer login com sua nova senha.",
+ "email": "E-mail foi enviado.",
+ "code": "Código foi enviado.",
+ "same": "A nova senha não pode ser a mesma que a senha antiga.",
+ "match": "As senhas não correspondem.",
+ "notFound": "Usuário não encontrado.",
+ "wrong": "Código errado."
+ },
+ "delete": {
+ "user": "Usuário foi excluído.",
+ "post": "Postagem foi excluída.",
+ "comment": "Comentário foi excluído."
+ },
+ "setLanguage": {
+ "success": "O idioma foi alterado."
+ },
+ "post": {
+ "success": "Você ganhou 5 pontos ao comentar."
+ },
+ "signup": {
+ "success": "Você se cadastrou com sucesso.",
+ "ascii": "O nome de usuário só pode conter caracteres ASCII.",
+ "username": "Este nome de usuário já está em uso.",
+ "email": "Este e-mail já está em uso.",
+ "password": "As senhas não correspondem.",
+ "taken": "Este nome de usuário e e-mail já estão em uso."
+ },
+ "verifyUser": {
+ "success": "Sua conta foi verificada.",
+ "code": "Código foi enviado.",
+ "notFound": "Usuário não encontrado.",
+ "wrong": "Código errado."
+ },
+ "error": {
+ "wrongCall": "Você fez uma chamada errada de mensagem flash no lado do servidor."
+ }
+ },
+ "roles": {
+ "user": "Usuário",
+ "admin": "Admin"
+ },
+ "privacyPolicy": {
+ "title": "Política de Privacidade",
+ "intro": "Esta Política de Privacidade descreve como o Flask Blog de Doğukan Ürker ('nós', 'nos', ou 'nosso') coleta, usa e divulga suas informações quando você usa nosso aplicativo móvel ('App').",
+ "information": "Coleta e Uso de Informações",
+ "informationText": "Quando você usa nosso App, coletamos e registramos vários tipos de dados de atividade do usuário, incluindo, mas não se limitando a:",
+ "informationUser": "Dados de login do usuário: Coletamos informações relacionadas às atividades de login do usuário para fins de autenticação e segurança.",
+ "informationPost": "Dados de postagens e comentários: Coletamos informações sobre postagens e comentários feitos dentro do App para funcionalidade e engajamento do usuário.",
+ "informationGeneral": "Atividade geral do usuário: Registramos várias atividades do usuário dentro do App para melhorar a experiência do usuário, solucionar problemas técnicos e analisar padrões de uso.",
+ "cookies": "Cookies",
+ "cookiesText": "Nosso App usa cookies para melhorar a experiência do usuário. Os cookies que usamos incluem:",
+ "cookiesTheme": "Cookie de tema da UI: Armazenamos a preferência de tema da UI selecionada pelo usuário para personalizar a aparência do App.",
+ "cookiesLanguage": "Idioma padrão do navegador: Armazenamos a preferência de idioma padrão do navegador do usuário para fornecer conteúdo localizado.",
+ "serviceProviders": "Provedores de Serviços",
+ "serviceProvidersText": "Podemos empregar empresas ou indivíduos terceirizados para facilitar nosso App ou fornecer serviços em nosso nome. Esses terceiros podem ter acesso às suas informações para realizar tarefas como análise, hospedagem e suporte técnico. No entanto, eles são obrigados a não divulgar ou usar essas informações para qualquer outro propósito.",
+ "otherLinks": "Links para Outros Sites",
+ "otherLinksText": "Nosso App pode conter links para sites externos, incluindo X e o site pessoal de Doğukan Ürker. Não somos responsáveis pelo conteúdo ou pelas práticas de privacidade desses sites externos. Incentivamos os usuários a revisar as políticas de privacidade desses sites antes de fornecer qualquer informação pessoal.",
+ "security": "Segurança",
+ "securityText": "Tomamos precauções razoáveis para proteger as informações coletadas através do nosso App. No entanto, esteja ciente de que nenhum método de transmissão pela internet ou método de armazenamento eletrônico é 100% seguro e não podemos garantir segurança absoluta.",
+ "children": "Privacidade das Crianças",
+ "childrenText": "Nosso App não é destinado ao uso por indivíduos com menos de 13 anos. Não coletamos intencionalmente informações pessoais identificáveis de crianças menores de 13 anos. Se você for um pai ou responsável e souber que seu filho forneceu informações pessoais, entre em contato conosco para que possamos tomar as medidas necessárias.",
+ "changes": "Alterações nesta Política de Privacidade",
+ "changesText": "Podemos atualizar nossa Política de Privacidade de tempos em tempos. Assim, você é aconselhado a revisar esta página periodicamente para quaisquer alterações. Nós o notificaremos sobre quaisquer alterações publicando a nova Política de Privacidade nesta página. Essas alterações são eficazes imediatamente após serem publicadas nesta página.",
+ "contact": "Contate-Nos",
+ "contactText": "Se você tiver alguma dúvida ou sugestão sobre nossa Política de Privacidade, não hesite em entrar em contato conosco. E-mail:"
+ }
+}