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:" + } +}