From dcfeb73b4f77d7a62b2224819ae06fb687fd6309 Mon Sep 17 00:00:00 2001
From: Cicero <150862765+cicerorph@users.noreply.github.com>
Date: Fri, 10 Jan 2025 18:20:14 -0300
Subject: [PATCH] added Brazilian Portuguese translations for accessibility,
notifications, and general UI
---
web/i18n/languages.json | 3 +-
web/i18n/pt-BR/a11y/dialog.json | 5 ++
web/i18n/pt-BR/a11y/donate.json | 4 +
web/i18n/pt-BR/a11y/general.json | 3 +
web/i18n/pt-BR/a11y/save.json | 13 ++++
web/i18n/pt-BR/a11y/tabs.json | 3 +
web/i18n/pt-BR/about.json | 35 +++++++++
web/i18n/pt-BR/about/credits.md | 63 ++++++++++++++++
web/i18n/pt-BR/about/general.md | 78 +++++++++++++++++++
web/i18n/pt-BR/about/privacy.md | 77 +++++++++++++++++++
web/i18n/pt-BR/about/terms.md | 58 ++++++++++++++
web/i18n/pt-BR/button.json | 20 +++++
web/i18n/pt-BR/dialog.json | 25 ++++++
web/i18n/pt-BR/donate.json | 37 +++++++++
web/i18n/pt-BR/error.json | 70 +++++++++++++++++
web/i18n/pt-BR/general.json | 7 ++
web/i18n/pt-BR/notification.json | 4 +
web/i18n/pt-BR/receiver.json | 5 ++
web/i18n/pt-BR/remux.json | 8 ++
web/i18n/pt-BR/save.json | 25 ++++++
web/i18n/pt-BR/settings.json | 126 +++++++++++++++++++++++++++++++
web/i18n/pt-BR/tabs.json | 8 ++
web/i18n/pt-BR/updates.json | 4 +
23 files changed, 680 insertions(+), 1 deletion(-)
create mode 100644 web/i18n/pt-BR/a11y/dialog.json
create mode 100644 web/i18n/pt-BR/a11y/donate.json
create mode 100644 web/i18n/pt-BR/a11y/general.json
create mode 100644 web/i18n/pt-BR/a11y/save.json
create mode 100644 web/i18n/pt-BR/a11y/tabs.json
create mode 100644 web/i18n/pt-BR/about.json
create mode 100644 web/i18n/pt-BR/about/credits.md
create mode 100644 web/i18n/pt-BR/about/general.md
create mode 100644 web/i18n/pt-BR/about/privacy.md
create mode 100644 web/i18n/pt-BR/about/terms.md
create mode 100644 web/i18n/pt-BR/button.json
create mode 100644 web/i18n/pt-BR/dialog.json
create mode 100644 web/i18n/pt-BR/donate.json
create mode 100644 web/i18n/pt-BR/error.json
create mode 100644 web/i18n/pt-BR/general.json
create mode 100644 web/i18n/pt-BR/notification.json
create mode 100644 web/i18n/pt-BR/receiver.json
create mode 100644 web/i18n/pt-BR/remux.json
create mode 100644 web/i18n/pt-BR/save.json
create mode 100644 web/i18n/pt-BR/settings.json
create mode 100644 web/i18n/pt-BR/tabs.json
create mode 100644 web/i18n/pt-BR/updates.json
diff --git a/web/i18n/languages.json b/web/i18n/languages.json
index 0760fe1d..fac9202b 100644
--- a/web/i18n/languages.json
+++ b/web/i18n/languages.json
@@ -1,4 +1,5 @@
{
"en": "english",
- "ru": "русский"
+ "ru": "русский",
+ "pt-BR": "português"
}
diff --git a/web/i18n/pt-BR/a11y/dialog.json b/web/i18n/pt-BR/a11y/dialog.json
new file mode 100644
index 00000000..36ff98a1
--- /dev/null
+++ b/web/i18n/pt-BR/a11y/dialog.json
@@ -0,0 +1,5 @@
+{
+ "picker.item.photo": "miniatura da foto",
+ "picker.item.video": "miniatura do vídeo",
+ "picker.item.gif": "miniatura do gif"
+}
diff --git a/web/i18n/pt-BR/a11y/donate.json b/web/i18n/pt-BR/a11y/donate.json
new file mode 100644
index 00000000..d3f1e688
--- /dev/null
+++ b/web/i18n/pt-BR/a11y/donate.json
@@ -0,0 +1,4 @@
+{
+ "share.qr.expand": "qr code. clique para expandir.",
+ "share.qr.collapse": "qr code expandido. clique para diminuir."
+}
diff --git a/web/i18n/pt-BR/a11y/general.json b/web/i18n/pt-BR/a11y/general.json
new file mode 100644
index 00000000..b8398e8b
--- /dev/null
+++ b/web/i18n/pt-BR/a11y/general.json
@@ -0,0 +1,3 @@
+{
+ "back": "voltar"
+}
diff --git a/web/i18n/pt-BR/a11y/save.json b/web/i18n/pt-BR/a11y/save.json
new file mode 100644
index 00000000..4023c7e9
--- /dev/null
+++ b/web/i18n/pt-BR/a11y/save.json
@@ -0,0 +1,13 @@
+{
+ "link_area": "área de entrada do link",
+ "link_area.turnstile": "área de entrada do link. verificando se você não é um robô.",
+ "clear_input": "limpar entrada",
+ "download": "baixar",
+ "download.think": "processando o link...",
+ "download.check": "verificando download...",
+ "download.done": "download concluído",
+ "download.error": "erro no download",
+
+ "tutorial.shortcut.photos": "adicionar atalho de fotos",
+ "tutorial.shortcut.files": "adicionar atalho de arquivos"
+}
diff --git a/web/i18n/pt-BR/a11y/tabs.json b/web/i18n/pt-BR/a11y/tabs.json
new file mode 100644
index 00000000..2c96dfa5
--- /dev/null
+++ b/web/i18n/pt-BR/a11y/tabs.json
@@ -0,0 +1,3 @@
+{
+ "tab_panel": "painel de abas"
+}
diff --git a/web/i18n/pt-BR/about.json b/web/i18n/pt-BR/about.json
new file mode 100644
index 00000000..7f01ae3a
--- /dev/null
+++ b/web/i18n/pt-BR/about.json
@@ -0,0 +1,35 @@
+{
+ "page.general": "o quê é o cobalt?",
+ "page.faq": "FAQ",
+
+ "page.community": "comunidade & suporte",
+
+ "page.privacy": "política de privacidade",
+ "page.terms": "termos e ética",
+ "page.credits": "agradecimentos & licenças",
+
+ "heading.general": "termos gerais",
+ "heading.licenses": "licenças",
+ "heading.summary": "melhor forma de salvar o que você ama",
+ "heading.privacy": "privacidade em primeiro lugar",
+ "heading.community": "comunidade aberta",
+ "heading.local": "processamento local",
+ "heading.saving": "salvando",
+ "heading.encryption": "criptografia",
+ "heading.plausible": "análise anônima de tráfego",
+ "heading.cloudflare": "privacidade & segurança web",
+ "heading.responsibility": "responsabilidades do usuário",
+ "heading.abuse": "denunciando abuso",
+ "heading.motivation": "motivação",
+ "heading.testers": "testadores beta",
+
+ "support.github": "confira o código fonte do cobalt, contribua com mudanças ou reporte problemas",
+ "support.discord": "converse com a comunidade e desenvolvedores sobre o cobalt ou peça ajuda",
+ "support.twitter": "siga as atualizações e desenvolvimento do cobalt na sua timeline do twitter",
+ "support.telegram": "mantenha-se atualizado com as últimas novidades do cobalt via canal do telegram",
+ "support.bluesky": "siga as atualizações e desenvolvimento do cobalt no seu feed do bluesky",
+
+ "support.description.issue": "se você quiser reportar um bug ou outro problema recorrente, por favor faça isso no github.",
+ "support.description.help": "use o discord para outras questões. descreva o problema adequadamente em #cobalt-support ou ninguém poderá ajudar você.",
+ "support.description.best-effort": "todo suporte é por melhor esforço e não garantido, uma resposta pode demorar um tempo."
+}
diff --git a/web/i18n/pt-BR/about/credits.md b/web/i18n/pt-BR/about/credits.md
new file mode 100644
index 00000000..79842db1
--- /dev/null
+++ b/web/i18n/pt-BR/about/credits.md
@@ -0,0 +1,63 @@
+
+
+
+
+
+o cobalt é feito com amor e carinho pela equipe de pesquisa e desenvolvimento da [imput](https://imput.net/).
+
+você pode nos apoiar na [página de doação](/donate)!
+
+
+
+
+
+um enorme agradecimento aos nossos testadores por testarem as atualizações antecipadamente e garantirem que sejam estáveis.
+eles também nos ajudaram a lançar o cobalt 10!
+
+
+todos os links são externos e levam aos seus sites pessoais ou redes sociais.
+
+
+
+
+
+meowbalt é o mascote veloz do cobalt. ele é um gato extremamente expressivo que adora internet rápida.
+
+todos os incríveis desenhos do meowbalt que você vê no cobalt foram feitos por [GlitchyPSI](https://glitchypsi.xyz/).
+ele também é o designer original do personagem.
+
+você não pode usar ou modificar as artes do meowbalt feitas pelo GlitchyPSI sem sua permissão explícita.
+
+você não pode usar ou modificar o design do personagem meowbalt comercialmente ou de qualquer forma que não seja fan art.
+
+
+
+
+
+o servidor de processamento do cobalt é de código aberto e licenciado sob [AGPL-3.0]({docs.apiLicense}).
+
+o frontend do cobalt é [source first](https://sourcefirst.com/) e licenciado sob [CC-BY-NC-SA 4.0]({docs.webLicense}).
+decidimos usar esta licença para impedir que oportunistas lucrem com nosso trabalho
+e criem clones maliciosos que enganem pessoas e prejudiquem nossa identidade pública.
+
+dependemos de muitas bibliotecas de código aberto, criamos e distribuímos as nossas próprias.
+você pode ver a lista completa de dependências no [github]({contacts.github}).
+
diff --git a/web/i18n/pt-BR/about/general.md b/web/i18n/pt-BR/about/general.md
new file mode 100644
index 00000000..a48e083e
--- /dev/null
+++ b/web/i18n/pt-BR/about/general.md
@@ -0,0 +1,78 @@
+
+
+
+
+
+O cobalt ajuda você a salvar qualquer coisa dos seus sites favoritos: vídeo, áudio, fotos ou gifs. basta colar o link e você está pronto para começar!
+
+sem anúncios, rastreadores, paywall ou outras bobagens. apenas um aplicativo web conveniente que funciona em qualquer lugar, sempre que você precisar.
+
+
+
+
+
+O cobalt foi criado para benefício público, para proteger as pessoas de anúncios e malware enviados por suas alternativas.
+acreditamos que o melhor software é seguro, aberto e acessível.
+
+é possível manter as principais instâncias funcionando graças ao nosso parceiro de infraestrutura de longa data, [royalehosting.net]({partners.royalehosting})!
+
+
+
+
+
+todas as solicitações ao backend são anônimas e todas as informações sobre túneis são criptografadas.
+temos uma política rigorosa de zero logs e não rastreamos *nada* sobre indivíduos.
+
+quando uma solicitação precisa de processamento adicional, o cobalt processa os arquivos em tempo real.
+isso é feito através do tunelamento das partes processadas diretamente para o cliente, sem nunca salvar nada no disco.
+por exemplo, este método é usado quando o serviço de origem fornece canais de vídeo e áudio como arquivos separados.
+
+além disso, você pode [ativar o tunelamento forçado](/settings/privacy#tunnel) para proteger sua privacidade.
+quando ativado, o cobalt tunelará todos os arquivos baixados.
+ninguém saberá de onde você baixa algo, nem mesmo seu provedor de rede.
+tudo o que eles verão é que você está usando uma instância do cobalt.
+
+
+
+
+
+
+
+os recursos mais recentes, como [remuxing](/remux), funcionam localmente no seu dispositivo.
+o processamento no dispositivo é eficiente e nunca envia nada pela internet.
+isso se alinha perfeitamente com nosso objetivo futuro de mover o máximo possível de processamento para o cliente.
+
diff --git a/web/i18n/pt-BR/about/privacy.md b/web/i18n/pt-BR/about/privacy.md
new file mode 100644
index 00000000..a0417dbd
--- /dev/null
+++ b/web/i18n/pt-BR/about/privacy.md
@@ -0,0 +1,77 @@
+
+
+
+
+
+a política de privacidade do cobalt é simples: não coletamos ou armazenamos nada sobre você. O que você faz é apenas da sua conta, não nossa ou de qualquer outra pessoa.
+
+estes termos são aplicáveis apenas ao usar a instância oficial do cobalt. Em outros casos, você pode precisar contatar o host para informações precisas.
+
+
+
+
+
+ferramentas que usam processamento no dispositivo funcionam offline, localmente, e nunca enviam dados para lugar algum. Elas são explicitamente marcadas como tal sempre que aplicável.
+
+
+
+
+
+ao usar a funcionalidade de salvamento, em alguns casos o cobalt irá criptografar e armazenar temporariamente informações necessárias para o tunelamento. Elas são armazenadas na RAM do servidor de processamento por 90 segundos e depois eliminadas irreversivelmente. Ninguém tem acesso a elas, nem mesmo os proprietários da instância, desde que não modifiquem a imagem oficial do cobalt.
+
+arquivos processados/tunelados nunca são armazenados em cache em lugar algum. Tudo é tunelado ao vivo. A funcionalidade de salvamento do cobalt é essencialmente um serviço de proxy sofisticado.
+
+
+
+
+
+os dados do túnel armazenados temporariamente são criptografados usando o padrão AES-256. As chaves de descriptografia são incluídas apenas no link de acesso e nunca são registradas/armazenadas em cache/armazenadas em qualquer lugar. Apenas o usuário final tem acesso ao link e às chaves de criptografia. As chaves são geradas exclusivamente para cada túnel solicitado.
+
+
+{#if env.PLAUSIBLE_ENABLED}
+
+
+
+por questões de privacidade, usamos [análise anônima de tráfego do Plausible](https://plausible.io/) para obter um número aproximado de usuários ativos do cobalt. Nenhuma informação identificável sobre você ou suas solicitações é armazenada. Todos os dados são anonimizados e agregados. A instância do Plausible que usamos é hospedada e gerenciada por nós.
+
+o Plausible não usa cookies e está totalmente em conformidade com GDPR, CCPA e PECR.
+
+[Saiba mais sobre o compromisso do Plausible com a privacidade.](https://plausible.io/privacy-focused-web-analytics)
+
+se você deseja desativar as análises anônimas, pode fazer isso nas [configurações de privacidade](/settings/privacy#analytics).
+
+{/if}
+
+
+
+
+usamos os serviços da Cloudflare para proteção contra DDoS e bots. Também usamos o Cloudflare Pages para implantar e hospedar o aplicativo web estático. Todos esses são necessários para fornecer a melhor experiência para todos. É o provedor mais privado e confiável que conhecemos.
+
+a Cloudflare está totalmente em conformidade com GDPR e HIPAA.
+
+[Saiba mais sobre o compromisso da Cloudflare com a privacidade.](https://www.cloudflare.com/trust-hub/privacy-and-data-protection/)
+
+
diff --git a/web/i18n/pt-BR/about/terms.md b/web/i18n/pt-BR/about/terms.md
new file mode 100644
index 00000000..d95d91c9
--- /dev/null
+++ b/web/i18n/pt-BR/about/terms.md
@@ -0,0 +1,58 @@
+
+
+
+
+
+estes termos são aplicáveis apenas ao usar a instância oficial do cobalt.
+em outros casos, você pode precisar contatar o operador da instância para obter informações precisas.
+
+
+
+
+
+a funcionalidade de salvamento simplifica o download de conteúdo da internet e não assume nenhuma responsabilidade sobre como o conteúdo salvo é utilizado.
+os servidores de processamento funcionam como proxies avançados e nunca gravam nenhum conteúdo no disco.
+tudo é manipulado na RAM e permanentemente eliminado assim que o túnel é finalizado.
+não mantemos registros de downloads e não podemos identificar ninguém.
+
+[você pode ler mais sobre como os túneis funcionam em nossa política de privacidade.](/about/privacy)
+
+
+
+
+
+você (usuário final) é responsável pelo que faz com nossas ferramentas, como usa e distribui o conteúdo resultante.
+por favor, seja consciente ao usar conteúdo de outros e sempre dê crédito aos criadores originais.
+certifique-se de não violar nenhum termo ou licença.
+
+quando usado para fins educacionais, sempre cite as fontes e dê crédito aos criadores originais.
+
+uso justo e créditos beneficiam a todos.
+
+
+
+
+
+não temos como detectar comportamento abusivo automaticamente porque o cobalt é 100% anônimo.
+no entanto, você pode nos reportar tais atividades via email e faremos o possível para resolver manualmente: abuse[at]imput.net
+
+**este email não é destinado ao suporte ao usuário, você não receberá resposta se sua questão não estiver relacionada a abuso.**
+
+se você está tendo problemas, entre em contato conosco através de qualquer método preferido na [página de suporte](/about/community).
+
+
diff --git a/web/i18n/pt-BR/button.json b/web/i18n/pt-BR/button.json
new file mode 100644
index 00000000..799e9748
--- /dev/null
+++ b/web/i18n/pt-BR/button.json
@@ -0,0 +1,20 @@
+{
+ "gotit": "consegui",
+ "cancel": "cancelar",
+ "reset": "resetar",
+ "done": "pronto",
+ "download.audio": "baixar audio",
+ "download": "baixar",
+ "share": "compartilhar",
+ "copy": "copiar",
+ "copy.section": "copiar link da seção",
+ "copied": "copiado",
+ "import": "importar",
+ "continue": "continuar",
+ "star": "estrela",
+ "follow": "seguir",
+ "save": "salvar",
+ "export": "exportar",
+ "yes": "sim",
+ "no": "não"
+}
diff --git a/web/i18n/pt-BR/dialog.json b/web/i18n/pt-BR/dialog.json
new file mode 100644
index 00000000..97254565
--- /dev/null
+++ b/web/i18n/pt-BR/dialog.json
@@ -0,0 +1,25 @@
+{
+ "reset.title": "resetar todas as informações?",
+ "reset.body": "você tem certeza que quer resetar todas as informações? essa ação é imediata e não tem como voltar atrás.",
+
+ "picker.title": "selecionar o quê salvar",
+ "picker.description.desktop": "clique em um item para salvar. imagens também podem ser salvas através do menu do botão direito.",
+ "picker.description.phone": "pressione um item para salvá-lo. imagens também podem ser salvas com um toque longo.",
+ "picker.description.ios": "pressione um item para salvá-lo com um atalho. imagens também podem ser salvas com um toque longo.",
+
+ "saving.title": "escolha como salvar",
+ "saving.blocked": "o cobalt tentou abrir o arquivo em uma nova aba, mas seu navegador bloqueou. você pode permitir pop-ups para o cobalt para evitar que isso aconteça novamente.",
+ "saving.timeout": "o cobalt tentou salvar o arquivo automaticamente, mas seu navegador o impediu. você precisa selecionar um método manualmente.",
+
+ "safety.title": "aviso importante de segurança",
+
+ "import.body": "importar arquivos desconhecidos ou corrompidos pode alterar ou quebrar inesperadamente a funcionalidade do cobalt. importe apenas arquivos que você exportou pessoalmente e não modificou. se alguém pediu para você importar este arquivo - não faça.\n\nnão nos responsabilizamos por qualquer dano causado pela importação de arquivos desconhecidos.",
+
+ "api.override.title": "substituição da instância de processamento",
+ "api.override.body": "{{ value }} agora é a instância de processamento. se você não confiar nela, pressione \"cancelar\" e ela será ignorada.\n\nvocê pode alterar sua escolha depois nas configurações de processamento.",
+
+ "safety.custom_instance.body": "instâncias personalizadas podem apresentar riscos à privacidade e segurança.\n\ninstâncias maliciosas podem:\n1. redirecionar você para fora do cobalt e tentar golpes.\n2. registrar todas as informações sobre suas solicitações, armazená-las indefinidamente e usá-las para rastrear você.\n3. fornecer arquivos maliciosos (como malware).\n4. forçar você a assistir anúncios ou cobrar pelo download.\n\ndepois deste ponto, não podemos proteger você. por favor, tenha cuidado com as instâncias que usar e sempre confie em seu instinto. se algo parecer estranho, volte a esta página, redefina a instância personalizada e nos informe no github.",
+
+ "processing.ongoing": "o cobalt está processando mídia nesta aba. sair irá cancelar o processo. tem certeza que quer fazer isso?",
+ "processing.title.ongoing": "o processamento será cancelado"
+}
diff --git a/web/i18n/pt-BR/donate.json b/web/i18n/pt-BR/donate.json
new file mode 100644
index 00000000..5e9c53e7
--- /dev/null
+++ b/web/i18n/pt-BR/donate.json
@@ -0,0 +1,37 @@
+{
+ "banner.title": "Apoie uma Internet\nsegura e aberta",
+ "banner.subtitle": "doe para a imput ou compartilhe\na alegria do cobalt com um amigo",
+
+ "body.motivation": "o cobalt ajuda produtores, educadores, criadores de vídeo e muitos outros a fazerem o que amam. é um tipo diferente de serviço que é feito com amor, não por lucro.",
+ "body.no_bullshit": "acreditamos que a internet não precisa ser assustadora, por isso o cobalt nunca terá anúncios ou outros tipos de conteúdo malicioso. é uma promessa que mantemos firmemente. tudo o que fazemos é construído com privacidade, acessibilidade e facilidade de uso em mente, tornando o cobalt disponível para todos.",
+ "body.keep_going": "se você achou o cobalt útil, considere apoiar nosso trabalho! você pode nos ajudar fazendo uma doação ou compartilhando o cobalt com um amigo. toda doação é muito apreciada e nos ajuda a continuar trabalhando no cobalt e em outros projetos.",
+
+ "card.once": "doação única",
+ "card.recurring": "doação recorrente",
+ "card.custom": "valor personalizado (a partir de $2)",
+
+ "card.processor": "via {{value}}",
+
+ "card.option.5": "um café",
+ "card.option.10": "uma pizza grande",
+ "card.option.15": "um almoço completo",
+ "card.option.30": "almoço para dois",
+ "card.option.50": "10kg de ração para gatos",
+ "card.option.100": "um ano de domínio",
+ "card.option.200": "uma air fryer",
+ "card.option.500": "uma cadeira de escritório chique",
+ "card.option.1599": "macbook pro básico",
+ "card.option.4900": "10.000 maçãs",
+ "card.option.7398": "macbook pro completão",
+ "card.option.8629": "um pequeno terreno",
+ "card.option.9433": "uma banheira de hidromassagem",
+
+ "card.custom.submit": "doar um valor personalizado",
+
+ "share.title": "compartilhe o cobalt com um amigo",
+
+ "alternative.title": "formas alternativas de doar",
+
+ "alt.copy": "{{ value }}. endereço da carteira crypto. pressione para copiar.",
+ "alt.open": "{{ value }}. pressione para abrir."
+}
diff --git a/web/i18n/pt-BR/error.json b/web/i18n/pt-BR/error.json
new file mode 100644
index 00000000..d53712b9
--- /dev/null
+++ b/web/i18n/pt-BR/error.json
@@ -0,0 +1,70 @@
+{
+ "import.no_data": "não há configurações para carregar nesse arquivo. tem certeza que é o arquivo certo?",
+ "import.invalid": "este arquivo não tem configurações válidas do cobalt para importar. tem certeza que é o arquivo certo?",
+ "import.unknown": "não foi possível carregar dados do arquivo. pode estar corrompido ou em formato errado. aqui está o erro que recebi:\n\n{{ value }}",
+
+ "remux.corrupted": "não foi possível ler os metadados deste arquivo, ele pode estar corrompido.",
+ "remux.out_of_resources": "o cobalt ficou sem recursos e não pode continuar com o processamento local. isso é causado pelas limitações do seu navegador. atualize ou reabra o app e tente novamente!",
+
+ "tunnel.probe": "não foi possível testar este túnel. seu navegador ou configuração de rede pode estar bloqueando o acesso a um dos servidores do cobalt. tem certeza que não tem nenhuma extensão estranha no navegador?",
+
+ "captcha_ongoing": "o cloudflare turnstile ainda está verificando se você não é um robô. se demorar muito, você pode tentar: desativar extensões estranhas do navegador, mudar de rede, usar um navegador diferente ou verificar seu dispositivo em busca de malware.",
+
+ "api.auth.jwt.missing": "não foi possível autenticar com a instância de processamento porque o token de acesso está faltando. tente novamente em alguns segundos ou recarregue a página!",
+ "api.auth.jwt.invalid": "não foi possível autenticar com a instância de processamento porque o token de acesso é inválido. tente novamente em alguns segundos ou recarregue a página!",
+ "api.auth.turnstile.missing": "não foi possível autenticar com a instância de processamento porque a solução do captcha está faltando. tente novamente em alguns segundos ou recarregue a página!",
+ "api.auth.turnstile.invalid": "não foi possível autenticar com a instância de processamento porque a solução do captcha é inválida. tente novamente em alguns segundos ou recarregue a página!",
+
+ "api.auth.key.missing": "uma chave de acesso é necessária para usar esta instância de processamento, mas está faltando. adicione nas configurações da instância!",
+ "api.auth.key.not_api_key": "uma chave de acesso é necessária para usar esta instância de processamento, mas está faltando. adicione nas configurações da instância!",
+
+ "api.auth.key.invalid": "a chave de acesso é inválida. redefina nas configurações da instância e use uma apropriada!",
+ "api.auth.key.not_found": "a chave de acesso que você usou não foi encontrada. tem certeza que esta instância tem sua chave?",
+ "api.auth.key.invalid_ip": "seu endereço IP não pôde ser processado. algo deu muito errado. reporte este problema!",
+ "api.auth.key.ip_not_allowed": "seu endereço IP não tem permissão para usar esta chave de acesso. use uma instância ou rede diferente!",
+ "api.auth.key.ua_not_allowed": "seu navegador não tem permissão para usar esta chave de acesso. use um cliente ou dispositivo diferente!",
+
+ "api.unreachable": "não foi possível conectar à instância de processamento. verifique sua conexão com a internet e tente novamente!",
+ "api.timed_out": "a instância de processamento demorou muito para responder. ela pode estar sobrecarregada no momento, tente novamente em alguns segundos!",
+ "api.rate_exceeded": "você está fazendo muitas requisições. tente novamente em {{ limit }} segundos.",
+ "api.capacity": "o cobalt está em capacidade máxima e não pode processar sua requisição no momento. tente novamente em alguns segundos!",
+
+ "api.generic": "algo deu errado e não consegui nada para você, tente novamente em alguns segundos. se o problema persistir, por favor reporte!",
+ "api.unknown_response": "não foi possível ler a resposta da instância de processamento. isso pode ser causado por uma incompatibilidade de versão entre as instâncias do cobalt.",
+
+ "api.service.unsupported": "este serviço ainda não é suportado. você colou o link certo?",
+ "api.service.disabled": "este serviço é geralmente suportado pelo cobalt, mas está desativado nesta instância de processamento. tente um link de outro serviço!",
+ "api.service.audio_not_supported": "este serviço não suporta extração de áudio. tente um link de outro serviço!",
+
+ "api.link.invalid": "seu link é inválido ou este serviço ainda não é suportado. você colou o link certo?",
+ "api.link.unsupported": "{{ service }} é suportado, mas não reconheci seu link. você colou o link certo?",
+
+ "api.fetch.fail": "algo deu errado ao buscar informações do {{ service }} e não consegui nada para você. se este problema persistir, por favor reporte!",
+ "api.fetch.critical": "o módulo {{ service }} retornou um erro que não reconheço. tente novamente em alguns segundos, mas se este problema persistir, por favor reporte!",
+ "api.fetch.empty": "não encontrei nenhuma mídia que eu pudesse baixar para você. tem certeza que você colou o link certo?",
+ "api.fetch.rate": "a instância de processamento foi limitada pelo {{ service }}. tente novamente em alguns segundos!",
+ "api.fetch.short_link": "não foi possível obter informações do link curto. tem certeza que funciona? se funcionar e você ainda receber este erro, por favor reporte o problema!",
+
+ "api.content.too_long": "a mídia que você solicitou é muito longa. o limite de duração nesta instância é {{ limit }} minutos. tente algo mais curto!",
+
+ "api.content.video.unavailable": "não consigo acessar este vídeo. ele pode estar restrito pelo {{ service }}. tente um link diferente!",
+ "api.content.video.live": "este vídeo está ao vivo no momento, então não posso baixá-lo ainda. espere a transmissão ao vivo terminar e tente novamente!",
+ "api.content.video.private": "este vídeo é privado, então não posso acessá-lo. mude sua visibilidade ou tente outro!",
+ "api.content.video.age": "este vídeo tem restrição de idade, então não posso acessá-lo anonimamente. tente um link diferente!",
+ "api.content.video.region": "este vídeo está bloqueado por região, e a instância de processamento está em um local diferente. tente um link diferente!",
+
+ "api.content.region": "este conteúdo está bloqueado por região, e a instância de processamento está em um local diferente. tente um link diferente!",
+ "api.content.paid": "este conteúdo requer compra. o cobalt não pode baixar conteúdo pago. tente um link diferente!",
+
+ "api.content.post.unavailable": "não encontrei nada sobre esta postagem. sua visibilidade pode estar limitada ou ela pode não existir. certifique-se que seu link funciona e tente novamente em alguns segundos!",
+ "api.content.post.private": "não consegui nada sobre esta postagem porque é de uma conta privada. tente um link diferente!",
+ "api.content.post.age": "esta postagem tem restrição de idade e não está disponível sem login. tente um link diferente!",
+
+ "api.youtube.no_matching_format": "o youtube não retornou uma combinação válida de vídeo + áudio, falta vídeo ou áudio. os formatos para este vídeo podem estar sendo recodificados pelo youtube ou algo deu errado ao processá-los. tente ativar a opção hls nas configurações de vídeo!",
+ "api.youtube.decipher": "o youtube atualizou seu algoritmo de decodificação e não consegui extrair as informações do vídeo. tente novamente em alguns segundos, mas se este problema persistir, por favor reporte!",
+ "api.youtube.login": "não foi possível obter este vídeo porque o youtube pediu para a instância fazer login. isso pode ser causado pela instância de processamento não ter tokens de conta ativos ou o youtube ter atualizado algo em sua api. tente novamente em alguns segundos, mas se ainda não funcionar, por favor reporte este problema!",
+ "api.youtube.token_expired": "não foi possível obter este vídeo porque o token do youtube expirou e não consegui renová-lo. tente novamente em alguns segundos, mas se ainda não funcionar, avise o dono da instância sobre este erro!",
+ "api.youtube.no_hls_streams": "não encontrei nenhum stream HLS compatível para este vídeo. tente baixá-lo sem HLS!",
+ "api.youtube.api_error": "o youtube atualizou algo em sua api e não consegui obter informações sobre este vídeo. tente novamente em alguns segundos, mas se este problema persistir, por favor reporte!",
+ "api.youtube.temporary_disabled": "o download do youtube está temporariamente desativado devido a restrições do youtube. já estamos procurando maneiras de contorná-las.\n\npedimos desculpas pelo inconveniente e estamos fazendo o possível para restaurar esta funcionalidade. acompanhe as redes sociais do cobalt ou github para atualizações!"
+}
diff --git a/web/i18n/pt-BR/general.json b/web/i18n/pt-BR/general.json
new file mode 100644
index 00000000..1d00fb5e
--- /dev/null
+++ b/web/i18n/pt-BR/general.json
@@ -0,0 +1,7 @@
+{
+ "cobalt": "cobalt",
+ "meowbalt": "meowbalt",
+ "beta": "beta",
+
+ "embed.description": "cobalt permite que você salve o que ama sem anúncios, rastreamento, paywalls ou outras bobagens. apenas cole o link e você está pronto para começar!"
+}
diff --git a/web/i18n/pt-BR/notification.json b/web/i18n/pt-BR/notification.json
new file mode 100644
index 00000000..f79356ef
--- /dev/null
+++ b/web/i18n/pt-BR/notification.json
@@ -0,0 +1,4 @@
+{
+ "update.title": "uma atualização está dísponivel!",
+ "update.subtext": "clique para recarregar"
+}
diff --git a/web/i18n/pt-BR/receiver.json b/web/i18n/pt-BR/receiver.json
new file mode 100644
index 00000000..a36adbf2
--- /dev/null
+++ b/web/i18n/pt-BR/receiver.json
@@ -0,0 +1,5 @@
+{
+ "title": "solte ou seleciona um arquivo",
+ "title.drop": "solte o arquivo aqui!",
+ "accept": "formatos suportados: {{ formats }}."
+}
diff --git a/web/i18n/pt-BR/remux.json b/web/i18n/pt-BR/remux.json
new file mode 100644
index 00000000..041ada98
--- /dev/null
+++ b/web/i18n/pt-BR/remux.json
@@ -0,0 +1,8 @@
+{
+ "bullet.purpose.title": "o quê esse remux faz?",
+ "bullet.purpose.description": "o remux corrige quaisquer problemas com o container do arquivo, como informações de tempo ausentes. isso ajuda a aumentar a compatibilidade com softwares antigos, como vegas pro, windows media player ou o pc da sua avó.",
+ "bullet.explainer.title": "como que funciona?",
+ "bullet.explainer.description": "o remux pega os dados do codec existentes e os copia para um novo container de mídia. é sem perdas, os dados da mídia não são recodificados.",
+ "bullet.privacy.title": "processamento local",
+ "bullet.privacy.description": "o cobalt faz o remux localmente. os arquivos nunca saem do seu dispositivo, então o processamento é quase instantâneo."
+}
diff --git a/web/i18n/pt-BR/save.json b/web/i18n/pt-BR/save.json
new file mode 100644
index 00000000..7f5afca7
--- /dev/null
+++ b/web/i18n/pt-BR/save.json
@@ -0,0 +1,25 @@
+{
+ "paste": "colar",
+ "paste.long": "colar e baixar",
+ "auto": "auto",
+ "audio": "audio",
+ "mute": "mudo",
+ "input.placeholder": "cole o link aqui",
+ "terms.note.agreement": "por continuar, você concorda com os nossos",
+ "terms.note.link": "termos e éticas de uso",
+ "services.title": "serviços suportados",
+ "services.title_show": "mostrar serviços suportados",
+ "services.title_hide": "esconder serviços suportados",
+ "services.disclaimer": "o cobalt não é afiliado a nenhum dos serviços listados acima.",
+
+ "tutorial.title": "como salvar no iOS?",
+ "tutorial.intro": "para salvar mídia convenientemente no iOS, você precisará usar um atalho da Siri complementar na folha de compartilhamento.",
+ "tutorial.step.1": "adicione os atalhos da Siri complementares:",
+ "tutorial.step.2": "pressione o botão \"compartilhar\" na janela de salvamento do Cobalt.",
+ "tutorial.step.3": "selecione o atalho respectivo na folha de compartilhamento.",
+ "tutorial.outro": "estes atalhos funcionarão apenas no aplicativo Cobalt, compartilhar links de outros aplicativos não funcionará.",
+ "tutorial.shortcut.photos": "para fotos",
+ "tutorial.shortcut.files": "para arquivos",
+
+ "label.community_instance": "instância da comunidade"
+}
diff --git a/web/i18n/pt-BR/settings.json b/web/i18n/pt-BR/settings.json
new file mode 100644
index 00000000..0441db39
--- /dev/null
+++ b/web/i18n/pt-BR/settings.json
@@ -0,0 +1,126 @@
+{
+ "page.appearance": "aparência",
+ "page.privacy": "privacidade",
+ "page.video": "video",
+ "page.audio": "audio",
+ "page.download": "baixando",
+ "page.advanced": "avançado",
+ "page.debug": "info para nerds",
+ "page.instances": "instâncias",
+
+ "section.general": "geral",
+ "section.save": "salvar",
+
+ "theme": "tema",
+ "theme.auto": "automático",
+ "theme.light": "claro",
+ "theme.dark": "escuro",
+ "theme.description": "o tema automático alterna entre temas claro e escuro dependendo do modo de exibição do seu dispositivo.",
+
+ "video.quality": "qualidade do vídeo",
+ "video.quality.max": "8k+",
+ "video.quality.2160": "4k",
+ "video.quality.1440": "1440p",
+ "video.quality.1080": "1080p",
+ "video.quality.720": "720p",
+ "video.quality.480": "480p",
+ "video.quality.360": "360p",
+ "video.quality.240": "240p",
+ "video.quality.144": "144p",
+ "video.quality.description": "se a qualidade preferida não estiver disponível, a próxima melhor será escolhida.",
+
+ "video.youtube.codec": "codec e container do youtube",
+ "video.youtube.codec.description": "h264: melhor compatibilidade, qualidade média. qualidade máxima é 1080p.\nav1: melhor qualidade e eficiência. suporta 8k e HDR.\nvp9: mesma qualidade do av1, mas arquivo é ~2x maior. suporta 4k e HDR.\n\nav1 e vp9 não são tão amplamente suportados quanto h264. se av1 ou vp9 não estiver disponível, h264 será usado.",
+
+ "video.youtube.hls": "formatos hls do youtube",
+ "video.youtube.hls.title": "preferir hls para vídeo e áudio",
+ "video.youtube.hls.description": "arquivos baixam mais rápido e são menos propensos a erros ou cortes abruptos. apenas codecs h264 e vp9 estão disponíveis neste modo. o codec de áudio original é aac, é recodificado para compatibilidade, a qualidade do áudio pode ser um pouco pior que a versão não-HLS.\n\nesta opção é experimental, pode desaparecer ou mudar no futuro.",
+
+ "video.twitter.gif": "twitter/x",
+ "video.twitter.gif.title": "converter vídeos em loop para GIF",
+ "video.twitter.gif.description": "a conversão para GIF é ineficiente, o arquivo convertido pode ficar enormemente grande e com baixa qualidade.",
+
+ "video.tiktok.h265": "tiktok",
+ "video.tiktok.h265.title": "preferir formato HEVC/H265",
+ "video.tiktok.h265.description": "permite baixar vídeos em 1080p ao custo de compatibilidade.",
+
+ "audio.format": "formato de áudio",
+ "audio.format.best": "melhor",
+ "audio.format.mp3": "mp3",
+ "audio.format.ogg": "ogg",
+ "audio.format.wav": "wav",
+ "audio.format.opus": "opus",
+ "audio.format.description": "todos os formatos exceto \"melhor\" são convertidos do formato original, haverá alguma perda de qualidade. quando o formato \"melhor\" é selecionado, o áudio é mantido em seu formato original sempre que possível.",
+
+ "audio.bitrate": "taxa de bits do áudio",
+ "audio.bitrate.kbps": "kb/s",
+ "audio.bitrate.description": "a taxa de bits é aplicada apenas ao converter áudio para um formato com perdas. o cobalt não pode melhorar a qualidade do áudio original, então escolher uma taxa acima de 128kbps pode inflar o tamanho do arquivo sem diferença audível. a qualidade percebida pode variar por formato.",
+
+ "audio.youtube.dub": "faixa de áudio do youtube",
+ "audio.youtube.dub.title": "idioma de dublagem preferido",
+ "audio.youtube.dub.description": "o cobalt usará uma faixa de áudio dublada para o idioma selecionado se estiver disponível. se não, o original será usado.",
+ "youtube.dub.original": "original",
+
+ "audio.tiktok.original": "tiktok",
+ "audio.tiktok.original.title": "baixar som original",
+ "audio.tiktok.original.description": "o cobalt baixará o som do vídeo sem alterações feitas pelo autor da postagem.",
+
+ "metadata.filename": "estilo do nome do arquivo",
+ "metadata.filename.classic": "clássico",
+ "metadata.filename.basic": "básico",
+ "metadata.filename.pretty": "bonito",
+ "metadata.filename.nerdy": "nerd",
+ "metadata.filename.description": "o estilo do nome do arquivo só será usado para arquivos tunelados pelo cobalt. alguns serviços não suportam estilos diferentes do clássico.",
+
+ "metadata.filename.preview.video": "Título do Vídeo",
+ "metadata.filename.preview.audio": "Título do Áudio - Autor do Áudio",
+
+ "metadata.file": "metadados do arquivo",
+ "metadata.disable.title": "desativar metadados do arquivo",
+ "metadata.disable.description": "título, artista e outras informações não serão adicionadas ao arquivo.",
+
+ "saving.title": "método de salvamento",
+ "saving.ask": "perguntar",
+ "saving.download": "baixar",
+ "saving.share": "compartilhar",
+ "saving.copy": "copiar",
+ "saving.description": "forma preferida de salvar o arquivo ou link do cobalt. se o método preferido não estiver disponível ou algo der errado, o cobalt perguntará o que fazer.",
+
+ "accessibility": "acessibilidade",
+ "accessibility.transparency.title": "reduzir transparência visual",
+ "accessibility.transparency.description": "reduz a transparência das superfícies e desativa efeitos de desfoque. também pode melhorar o desempenho da interface em dispositivos de baixo desempenho.",
+ "accessibility.motion.title": "reduzir movimento",
+ "accessibility.motion.description": "desativa animações e transições sempre que possível.",
+
+ "language": "idioma",
+ "language.auto.title": "seleção automática",
+ "language.auto.description": "o cobalt usará o idioma padrão do seu navegador se a tradução estiver disponível. se não, inglês será usado.",
+ "language.preferred.title": "idioma preferido",
+ "language.preferred.description": "este idioma será usado quando a seleção automática estiver desativada. qualquer texto não traduzido será exibido em inglês.\n\nalguns idiomas usam traduções da comunidade, podem estar imprecisas ou incompletas.",
+
+ "privacy.analytics": "análise de tráfego anônima",
+ "privacy.analytics.title": "não contribuir com análises",
+ "privacy.analytics.description": "análises de tráfego anônimas são necessárias para ter um número aproximado de usuários ativos do cobalt. nenhuma informação identificável sobre você é armazenada. todos os dados processados são anonimizados e agregados.\n\nusamos uma instância própria do plausible que não usa cookies e é totalmente compatível com GDPR, CCPA e PECR.",
+ "privacy.analytics.learnmore": "saiba mais sobre o compromisso do plausible com a privacidade.",
+
+ "privacy.tunnel": "tunelamento",
+ "privacy.tunnel.title": "sempre tunelar arquivos",
+ "privacy.tunnel.description": "o cobalt ocultará seu endereço IP, informações do navegador e contornará restrições de rede local. quando ativado, os arquivos também terão nomes legíveis que de outra forma seriam ilegíveis.",
+
+ "advanced.debug": "depuração",
+ "advanced.debug.title": "ativar recursos para nerds",
+ "advanced.debug.description": "dá acesso fácil a informações do app que podem ser úteis para depuração. ativar isso não afeta a funcionalidade do cobalt de nenhuma forma.",
+
+ "advanced.data": "gerenciamento de dados",
+
+ "processing.community": "instâncias da comunidade",
+ "processing.enable_custom.title": "usar um servidor de processamento personalizado",
+ "processing.enable_custom.description": "o cobalt usará uma instância de processamento personalizada se você escolher. mesmo que o cobalt tenha algumas medidas de segurança, não nos responsabilizamos por quaisquer danos causados por uma instância da comunidade, pois não temos controle sobre elas.\n\npor favor, tenha cuidado com as instâncias que usar e certifique-se de que são hospedadas por pessoas em quem você confia.",
+
+ "processing.access_key": "chave de acesso da instância",
+ "processing.access_key.title": "usar uma chave de acesso da instância",
+ "processing.access_key.description": "o cobalt usará esta chave para fazer requisições à instância de processamento em vez de outros métodos de autenticação. certifique-se de que a instância suporta chaves de API!",
+
+ "processing.custom_instance.input.alt_text": "domínio da instância personalizada",
+ "processing.access_key.input.alt_text": "chave de acesso u-u-i-d"
+}
diff --git a/web/i18n/pt-BR/tabs.json b/web/i18n/pt-BR/tabs.json
new file mode 100644
index 00000000..92ef4b18
--- /dev/null
+++ b/web/i18n/pt-BR/tabs.json
@@ -0,0 +1,8 @@
+{
+ "save": "salvar",
+ "settings": "configurações",
+ "updates": "atualizações",
+ "donate": "doar",
+ "about": "sobre",
+ "remux": "remux"
+}
diff --git a/web/i18n/pt-BR/updates.json b/web/i18n/pt-BR/updates.json
new file mode 100644
index 00000000..172b8c2e
--- /dev/null
+++ b/web/i18n/pt-BR/updates.json
@@ -0,0 +1,4 @@
+{
+ "button.next": "ir para changelog mais antiga ({{ value }})",
+ "button.previous": "ir para a changelog mais recente ({{ value }})"
+}