npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@devix-tecnologia/directus-email-ptbr

v0.1.0

Published

Traduz para português brasileiro os e-mails que o Directus envia sozinho: corpo por templates Liquid e assunto por filtro email.send

Readme

@devix-tecnologia/directus-email-ptbr

@devix-tecnologia/directus-email-ptbr

Traduz para português brasileiro os e-mails que o Directus envia por conta própria: recuperação de senha, convite e confirmação de cadastro.

O problema, em duas metades

O corpo do e-mail vem de um template Liquid e basta sobrescrever. O assunto não: ele é fixado no código do Directus, em services/users.ts, e a rota POST /auth/password/request nunca preenche o parâmetro que o mudaria.

A issue #23839 pediu que o assunto fosse configurável e foi fechada como não planejada, remetendo à #8239, ainda aberta. O caminho suportado é o filtro email.send, acrescentado pela PR #23024 em julho de 2024. Ele roda antes do envio e o payload que devolve substitui o original.

Por isso o pacote entrega duas coisas de naturezas diferentes: uma extensão, para o assunto, e arquivos de template, para o corpo.

Instalação

pnpm add -D @devix-tecnologia/directus-email-ptbr

A extensão, que traduz o assunto

O Directus carrega extensões de EXTENSIONS_PATH e também descobre as instaladas como dependência. Numa imagem própria, a forma mais previsível é copiar:

COPY node_modules/@devix-tecnologia/directus-email-ptbr/dist \
     /directus/extensions/directus-email-ptbr/dist
COPY node_modules/@devix-tecnologia/directus-email-ptbr/package.json \
     /directus/extensions/directus-email-ptbr/package.json

Os templates, que traduzem o corpo

O Directus não descobre template de e-mail dentro de extensão. Template de e-mail não é um tipo de extensão — a documentação diz que eles "não estão incluídos no Extensions SDK". O Directus olha apenas o diretório de EMAIL_TEMPLATES_PATH e o interno da própria API, então os .liquid precisam ser entregues à parte:

COPY node_modules/@devix-tecnologia/directus-email-ptbr/templates /directus/templates

Em desenvolvimento, um volume resolve:

volumes:
  - ./node_modules/@devix-tecnologia/directus-email-ptbr/templates:/directus/templates:ro

As variáveis de ambiente que mandam nisso

| Variável | O que faz | Padrão | | --- | --- | --- | | EMAIL_TEMPLATES_PATH | Onde o Directus procura os .liquid | ./templates | | EXTENSIONS_PATH | Onde o Directus procura as extensões | ./extensions |

Os dois padrões são relativos ao diretório de trabalho, que na imagem oficial é /directus. Resolvem, portanto, para /directus/templates e /directus/extensions — que são exatamente os caminhos usados acima. Por isso nenhum dos exemplos precisa definir a variável: eles entregam os arquivos no lugar onde o Directus já procura. Declará-la só é necessário para colocar os templates em outro lugar.

Duas armadilhas, ambas silenciosas

Os .liquid não podem ficar em subpasta. A documentação é explícita: "these cannot go in a subdirectory". O Directus não varre recursivamente o diretório.

EMAIL_TEMPLATES_PATH=/directus/templates

/directus/templates/base.liquid            ✅ encontrado
/directus/templates/password-reset.liquid  ✅ encontrado
/directus/templates/ptbr/base.liquid       ❌ ignorado

Apontar a variável um nível acima tem o mesmo efeito. Montar os arquivos em /directus/templates/ e definir EMAIL_TEMPLATES_PATH=/directus faz o Directus procurar em /directus e não achar nada.

Nos dois casos não há erro: o Directus cai para os templates internos e o e-mail sai em inglês. Como a falha não aparece no log, a forma de conferir é disparar uma recuperação de senha e ler o que chega.

O que vem dentro

| Arquivo | Papel | | --- | --- | | src/hooks/email/assuntos.ts | Regra pura: nome do template para assunto. | | src/hooks/email/index.ts | Registra o filtro email.send e aplica a regra. | | src/templates/base.liquid | Layout do e-mail, traduzido. | | src/templates/password-reset.liquid | Corpo da recuperação de senha. |

Os assuntos não citam o nome do projeto, porque ele já viaja no remetente, que o Directus monta com o projectName. Assunto curto também é mais legível na caixa de entrada. Um template que o pacote não conhece passa intacto, com o assunto que o Directus escolheu — inclusive um template customizado do projeto.

O que o projeto ainda precisa configurar

Este pacote traduz o texto, mas a identidade continua sendo do projeto. O Directus tira nome, cor, logotipo e URL de directus_settings, e cai para "Directus", roxo e o logotipo dele quando estão vazios. Sem preencher isso, o e-mail sai traduzido mas falando "Directus".

| Campo | Efeito no e-mail | | --- | --- | | project_name | título, corpo, assinatura, rodapé e nome do remetente | | project_logo | as duas imagens, cabeçalho e assinatura | | project_color | fundo do quadrado do logotipo | | project_url | o link "Gerenciar minha conta" no rodapé |

O logotipo é buscado pelo cliente de e-mail de forma anônima, então o arquivo precisa ser legível sem autenticação, e o PUBLIC_URL precisa ser um endereço que o destinatário alcance.

Versão do Directus

O base.liquid é cópia do layout do Directus, traduzida. Isso é dívida assumida: numa atualização do Directus, o layout de lá pode mudar e este não acompanha sozinho.

A regra é a linha maior deste pacote acompanhar a do Directus, como o próprio SDK de extensões faz:

| Este pacote | Directus | | --- | --- | | 0.x / 1.x | 11.x |

O cabeçalho do base.liquid registra a versão exata de origem e a lista de trocas feitas. Ao subir o Directus: comparar com o base.liquid da versão nova e reaplicar.

Desenvolvimento

pnpm --filter @devix-tecnologia/directus-email-ptbr test       # regra pura
pnpm --filter @devix-tecnologia/directus-email-ptbr build      # dist/ + templates/
pnpm --filter @devix-tecnologia/directus-email-ptbr validate   # extensão válida