AGPL source offer and name cleanup

Every build writes the exact source it was built from, uncommitted work and
new files included, as source.tar.gz next to the app, named after that tree.
Docker builds, which have no git, pack the build context and name it by a
hash of its files. The sign-in page and Settings > About link to it instead of
a repository that can drift.

What users, operators and packagers see no longer names the upstream server:
- interface text, in all nine catalogues, with a token-session line for
  Security;
- server messages;
- the settings, now MAIL_SERVER_URL, MAIL_SERVERS_FILE, ADMIN_URL and
  MAIL_SERVER_FOLLOW_ADVERTISED_URLS, and mail-servers.example.json;
- the Tenants notice, which is gone;
- the README, CONTRIBUTING and SECURITY.

ihasmail's own FEATURES, KNOWN-ISSUES and ROADMAP stay with public ihasmail,
and INBUXA.md is folded into the README.
This commit is contained in:
2026-09-19 00:13:12 -07:00
parent 9d2de725c9
commit bb25355c23
59 changed files with 444 additions and 2436 deletions
+11 -12
View File
@@ -142,8 +142,8 @@ export const catalog: Catalog = {
"The numbers your role can see, as the server reports them.": "Os números que sua função pode ver, como o servidor os informa.",
"Nothing to show": "Nada para mostrar",
"Could not be loaded": "Não foi possível carregar",
"Detailed metrics, the delivery queue, logs and server settings are in Stalwart's own administration.": "Métricas detalhadas, a fila de entrega, os logs e as configurações do servidor ficam na administração do próprio Stalwart.",
"Open Stalwart admin": "Abrir a administração do Stalwart",
"Detailed metrics, the delivery queue, logs and server settings are in INBUXA Admin.": "Métricas detalhadas, a fila de entrega, os registros e as configurações do servidor ficam no INBUXA Admin.",
"Open INBUXA Admin": "Abrir o INBUXA Admin",
"Default group role": "Função padrão de grupo",
"A group needs an address.": "Um grupo precisa de um endereço.",
"New group": "Novo grupo",
@@ -212,10 +212,10 @@ export const catalog: Catalog = {
"New role": "Nova função",
"This role carries permissions yours doesn't, so you can view it but not change it.": "Esta função tem permissões que a sua não tem, então você pode vê-la, mas não alterá-la.",
"Your role lets you view roles but not change them.": "Sua função permite ver as funções, mas não alterá-las.",
"Stalwart gives this role by default to {kinds}. A change here reaches everyone who has it that way.": "O Stalwart atribui esta função por padrão a {kinds}. Uma alteração aqui afeta todos que a têm dessa forma.",
"The mail server gives this role by default to {kinds}. A change here reaches everyone who has it that way.": "O servidor de e-mail atribui esta função por padrão a {kinds}. Uma alteração aqui vale para todos que a têm dessa forma.",
"Builds on": "Baseia-se em",
"Permissions": "Permissões",
"Stalwart gives this role by default, so it can't be deleted. Change the defaults in Stalwart's own administration first.": "O Stalwart atribui esta função por padrão, então ela não pode ser excluída. Altere primeiro os padrões na administração do próprio Stalwart.",
"The mail server gives this role by default, so it can't be deleted. Change the defaults in INBUXA Admin first.": "O servidor de e-mail atribui esta função por padrão, então ela não pode ser excluída. Altere primeiro os padrões no INBUXA Admin.",
"This role carries permissions yours doesn't.": "Esta função tem permissões que a sua não tem.",
"Create role": "Criar função",
"builds on this one": "baseia-se nesta",
@@ -242,7 +242,7 @@ export const catalog: Catalog = {
"Delete role": "Excluir função",
"It can't be undone.": "Isso não pode ser desfeito.",
"Type {name} to confirm": "Digite {name} para confirmar",
"Stalwart's list of permissions could not be loaded, so permissions can't be changed here. ({reason})": "Não foi possível carregar a lista de permissões do Stalwart, então as permissões não podem ser alteradas aqui. ({reason})",
"The mail server's list of permissions could not be loaded, so permissions can't be changed here. ({reason})": "Não foi possível carregar a lista de permissões do servidor de e-mail, então as permissões não podem ser alteradas aqui. ({reason})",
"Named sets of permissions, given to accounts, groups and tenants.": "Conjuntos nomeados de permissões, atribuídos a contas, grupos e locatários.",
"Search roles": "Pesquisar funções",
"No roles match": "Nenhuma função corresponde",
@@ -265,11 +265,11 @@ export const catalog: Catalog = {
"{used} used": "{used} usados",
"Your role lets you view tenants but not change them.": "Sua função permite ver os locatários, mas não alterá-los.",
"Logo": "Logotipo",
"An https address or a data URL of an image. Stalwart shows it to the tenant's people where it shows a logo.": "Um endereço https ou uma URL data de uma imagem. O Stalwart a mostra às pessoas do locatário onde mostra um logotipo.",
"An https address or a data URL of an image. The mail server shows it to the tenant's people where it shows a logo.": "Um endereço https ou uma URL de dados de uma imagem. O servidor de e-mail a mostra às pessoas do locatário onde mostra um logotipo.",
"What it holds": "O que contém",
"{n} of {limit}": "{n} de {limit}",
"Limits": "Limites",
"Stalwart refuses to create more than a limit allows. An empty field is no limit.": "O Stalwart se recusa a criar mais do que um limite permite. Um campo vazio significa sem limite.",
"The mail server refuses to create more than a limit allows. An empty field is no limit.": "O servidor de e-mail se recusa a criar mais do que um limite permite. Um campo vazio significa sem limite.",
"The most anyone in this tenant can be allowed: their own roles are cut down to what these grant. Only roles whose permissions you hold yourself are offered.": "O máximo que alguém neste locatário pode ter: as funções próprias são reduzidas ao que estas concedem. Só são oferecidas funções cujas permissões você mesmo tem.",
"Checking what is still in this tenant…": "Verificando o que ainda há neste locatário…",
"It still holds accounts, domains or other things. Move them out first.": "Ele ainda tem contas, domínios ou outros itens. Mova-os primeiro.",
@@ -285,7 +285,6 @@ export const catalog: Catalog = {
"Still holds {things}. Move them out first.": "Ainda tem {things}. Mova-os primeiro.",
"Delete tenant": "Excluir locatário",
"Separate organizations on one server, each with its own people, domains and limits.": "Organizações separadas em um mesmo servidor, cada uma com suas próprias pessoas, domínios e limites.",
"Tenants are a Stalwart Enterprise feature.": "Locatários são um recurso do Stalwart Enterprise.",
"Search tenants": "Pesquisar locatários",
"No tenants match": "Nenhum locatário corresponde",
"No tenants yet": "Nenhum locatário ainda",
@@ -1146,14 +1145,14 @@ export const catalog: Catalog = {
"Your mail server delivers these straight to your browser, so they arrive with no ihasmail tab open, naming the sender and subject. Your browser still has to be running — if you quit it completely, notifications wait and arrive when you open it again.": "Seu servidor de e-mail as entrega direto ao navegador, então elas chegam sem nenhuma aba do ihasmail aberta, com o remetente e o assunto. Mesmo assim o navegador precisa estar em execução — se você fechá-lo por completo, as notificações esperam e chegam quando você abri-lo de novo.",
"Your mail server can wake this browser, but will not include the sender or subject. Your browser still has to be running.": "Seu servidor de e-mail consegue acordar este navegador, mas não informa o remetente nem o assunto. Mesmo assim o navegador precisa estar em execução.",
"This is what a new-mail notification looks like.": "É assim que uma notificação de e-mail novo aparece.",
"You're signed in as {user}. Your password is never stored in the browser; the server keeps it encrypted per-session for talking to Stalwart.": "Você está conectado como {user}. Sua senha nunca é guardada no navegador; o servidor a mantém criptografada por sessão para falar com o Stalwart.",
"You're signed in as {user}. Your password is never stored in the browser; the server keeps it encrypted per-session for talking to the mail server.": "Você entrou como {user}. Sua senha nunca é guardada no navegador; o servidor a mantém criptografada por sessão para se comunicar com o servidor de e-mail.",
"App passwords are managed by your mail administrator.": "As senhas de aplicativo são gerenciadas pelo seu administrador de e-mail.",
"Changing your password signs out your other webmail sessions. Any app passwords keep working.": "Mudar sua senha encerra suas outras sessões de webmail. As senhas de aplicativo continuam funcionando.",
"This account has two-factor authentication on. ihasmail can't sign you in with a code yet, so signing in on another device needs an app password — or you can turn two-factor authentication off here.": "Esta conta está com a autenticação em duas etapas ativada. O ihasmail ainda não consegue conectar você com um código, então entrar em outro dispositivo exige uma senha de aplicativo — ou você pode desativar a autenticação em duas etapas aqui.",
"A separate password for a mail app or device, which you can revoke on its own. App passwords skip two-factor codes, so they keep working in apps that can't ask for one.": "Uma senha separada para um aplicativo de e-mail ou dispositivo, que você pode revogar sozinha. As senhas de aplicativo dispensam os códigos de duas etapas, então continuam funcionando em aplicativos que não conseguem pedir um.",
"Copy it into {name} now — it isn't shown again.": "Copie-a para {name} agora — ela não será mostrada de novo.",
"No other users found in the directory, so nobody new can be added. Sharing already in place is listed below and can still be removed.": "Nenhum outro usuário encontrado no diretório, então ninguém novo pode ser adicionado. O que já está compartilhado aparece abaixo e ainda pode ser removido.",
"Stalwart does not publish its version number to mail clients, so ihasmail reports the edition where the server gives one. ihasmail requires 0.16 or newer, and sign-in refuses anything older.": "O Stalwart não informa seu número de versão aos clientes de e-mail, então o ihasmail indica a edição quando o servidor fornece uma. O ihasmail exige a versão 0.16 ou mais recente, e o login recusa qualquer versão anterior.",
"This webmail works with the INBUXA mail server, and sign-in refuses a server that doesn't offer what it needs.": "Este webmail funciona com o servidor de e-mail INBUXA, e a entrada recusa um servidor que não ofereça o que ele precisa.",
"It {damage}, so the rules in it can't be shown or edited — saving what did arrive would write it back over the rest. Reload the page to try again. Your rules are still on the server; nothing here has changed them.": "Ele {damage}, então as regras nele não podem ser mostradas nem editadas — salvar o que chegou sobrescreveria o resto. Recarregue a página para tentar de novo. Suas regras continuam no servidor; nada aqui as alterou.",
"The visual rule editor only manages scripts it created. You can edit the script in the {tab} tab, or start fresh with rules (the existing script will be kept but deactivated).": "O editor visual de regras só gerencia os scripts que ele mesmo criou. Você pode editar o script na aba {tab}, ou começar do zero com regras (o script existente será mantido, mas desativado).",
"Your filter script {damage}, so only part of it arrived. Adding a rule would write that part back over the whole thing. Reload the page and try again.": "Seu script de filtragem {damage}, então só parte dele chegou. Adicionar uma regra escreveria essa parte por cima do todo. Recarregue a página e tente de novo.",
@@ -1162,8 +1161,7 @@ export const catalog: Catalog = {
"Only languages ihasmail has been translated into appear here, so this list grows as translations land rather than ahead of them — a language offered without strings behind it would leave the page claiming to be in a language it is not.": "Aqui aparecem só os idiomas para os quais o ihasmail foi traduzido, então a lista cresce conforme as traduções chegam, e não antes — um idioma oferecido sem textos por trás faria a página afirmar estar em um idioma que não é o dela.",
"tell us about it": "conte para nós",
"This translation was generated by AI and has not been checked by a native speaker, so it is marked Beta until somebody who speaks it signs it off. Anything that reads wrongly is worth reporting — {report}.": "Esta tradução foi gerada por IA e não foi revisada por uma pessoa nativa, então está marcada como Beta até que alguém a aprove. Tudo o que soar errado vale um aviso — {report}.",
"ihasmail's own version is the date of the commit it was built from, followed by where that commit came from: {example} was built from a commit dated the 30th of August 2026 that arrived through pull request 129. A commit that did not come through one carries its short SHA instead — {sha}. The version deliberately says nothing about Stalwart; what this build needs from the server is the line above.": "A versão do próprio ihasmail é a data do commit a partir do qual ele foi compilado, seguida da origem desse commit: {example} foi compilado a partir de um commit de 30 de agosto de 2026 que veio pela pull request 129. Um commit que não veio por uma delas carrega no lugar o SHA curto — {sha}. A versão não diz nada sobre o Stalwart de propósito; o que esta compilação precisa do servidor está na linha acima.",
"ihasmail's own version is the date of the commit it was built from, followed by where that commit came from: {example} was built from a commit dated the 30th of August 2026 that arrived through pull request 129. A commit that did not come through one carries its short SHA instead — {sha}. The version deliberately says nothing about the mail server; what this build needs from the server is the line above.": "A versão do próprio ihasmail é a data do commit a partir do qual ele foi compilado, seguida da origem desse commit: {example} foi compilado a partir de um commit de 30 de agosto de 2026 que veio pela pull request 129. Um commit que não veio por uma delas carrega no lugar o SHA curto — {sha}. A versão não diz nada sobre o servidor de e-mail de propósito; o que esta compilação precisa do servidor está na linha acima.",
// ── Composer status, calendar title ────────────────────────────────
"New message": "Nova mensagem",
"Start a new message with what was shared?": "Iniciar uma nova mensagem com o que foi compartilhado?",
@@ -1218,6 +1216,7 @@ export const catalog: Catalog = {
"Could not save filters: {error}": "Não foi possível salvar os filtros: {error}",
"Could not send the receipt: {error}": "Não foi possível enviar a confirmação de leitura: {error}",
"Could not sign in.": "Não foi possível entrar.",
"You're signed in as {user}. This webmail never sees your password: it holds a sign-in token from your mail server, encrypted per session.": "Você entrou como {user}. Este webmail nunca vê sua senha: ele guarda um token de entrada do seu servidor de e-mail, criptografado por sessão.",
"About INBUXA webmail": "Sobre o INBUXA webmail",
"Mail server": "Servidor de e-mail",
"You'll enter your password on your mail server's sign-in page.": "Você vai digitar sua senha na página de entrada do seu servidor de e-mail.",