From 46f9ac6b101214a4de4dbe46233a36f7c9142f0e Mon Sep 17 00:00:00 2001
From: felipemontenegro91
<265153241+felipemontenegro91@users.noreply.github.com>
Date: Tue, 20 Oct 2026 19:05:30 -0300
Subject: [PATCH 1/3] fix(i18n): complete missing pt-BR settings and labels
---
app/src/i18n/locales/pt-BR/translation.json | 23 ++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/app/src/i18n/locales/pt-BR/translation.json b/app/src/i18n/locales/pt-BR/translation.json
index df53072c7..531dc586a 100644
--- a/app/src/i18n/locales/pt-BR/translation.json
+++ b/app/src/i18n/locales/pt-BR/translation.json
@@ -717,7 +717,8 @@
"show": "Mostrar instruções de entrega",
"hide": "Ocultar instruções de entrega",
"tooltip": "Instruções de entrega (tom, emoção, ritmo)",
- "placeholder": "Instruções de entrega — ex.: Fale devagar e com calor, Autoritário e claro…"
+ "placeholder": "Instruções de entrega — ex.: Fale devagar e com calor, Autoritário e claro…",
+ "placeholderOmnivoice": "Atributos de voz separados por vírgulas — ex.: female, low pitch, british accent (vocabulário fixo: gênero, idade, altura da voz, sussurro, sotaque)"
},
"voiceSelector": {
"placeholder": "Selecione uma voz…"
@@ -1001,6 +1002,21 @@
"preserveTechnical": {
"title": "Preservar termos técnicos",
"description": "Mantém identificadores de código, nomes de comandos e siglas exatamente como falados. Ative quando ditar em um prompt de código."
+ },
+ "customEndpoint": {
+ "title": "Servidor LLM personalizado (avançado)",
+ "description": "Delegue o refinamento e as reescritas conforme a personalidade a qualquer servidor compatível com OpenAI — llama.cpp, vLLM, LM Studio, LocalAI, o adaptador do Ollama ou a própria API da OpenAI. Deixe em branco para usar o Qwen3 integrado.",
+ "endpointLabel": "URL do servidor",
+ "endpointPlaceholder": "http://localhost:8090/v1",
+ "modelLabel": "Nome do modelo",
+ "modelPlaceholder": "Nome do modelo (ex.: qwen3-4b)",
+ "apiKeyLabel": "Chave de API",
+ "apiKeyPlaceholder": "Chave de API (opcional)",
+ "apiKeyPlaceholderReplace": "Digite uma nova chave para substituir a armazenada",
+ "apiKeyConfigured": "Armazenada",
+ "apiKeyClear": "Limpar",
+ "statusBuiltin": "Usando o modelo Qwen3 integrado selecionado acima.",
+ "statusRemote": "Enviando todos os refinamentos e reescritas conforme a personalidade para {{endpoint}}."
}
},
"playback": {
@@ -1039,6 +1055,10 @@
"title": "Totalmente local.",
"body": "O Whisper e o LLM de refinamento rodam no seu hardware. Sem nuvem, sem contas, sua voz nunca sai da máquina."
},
+ "remote": {
+ "title": "O refinamento é executado remotamente.",
+ "body": "O Whisper continua transcrevendo no seu hardware, mas as transcrições refinadas e as reescritas conforme a personalidade são enviadas para {{endpoint}}. O áudio da voz nunca sai da máquina."
+ },
"playAs": {
"title": "Reproduza como qualquer voz.",
"body": "As transcrições podem ser lidas de volta em qualquer perfil que você clonou."
@@ -1171,6 +1191,7 @@
"about": {
"tagline": "O estúdio de síntese de voz de código aberto. Clone vozes, gere fala, aplique efeitos e crie apps com voz — tudo rodando localmente na sua máquina.",
"createdBy": "Criado por",
+ "builtWith": "Desenvolvido com",
"buyCoffee": "Me pague um café",
"license": "Licenciado sob a MIT"
}
From f23c9dda6e768953e076d1ab4cbb76e224a9f10c Mon Sep 17 00:00:00 2001
From: felipemontenegro91
<265153241+felipemontenegro91@users.noreply.github.com>
Date: Tue, 20 Oct 2026 21:38:30 -0300
Subject: [PATCH 2/3] fix(i18n): update stale pt-BR GPU switch description
The English text for settings.gpu.switchToCpu.description changed from
"You can re-download CUDA later" to "You can re-download the GPU backend
later" when ROCm support landed, but the Brazilian Portuguese string still
mentioned CUDA. Translate the current source text.
Co-Authored-By: Claude Opus 5.5
---
app/src/i18n/locales/pt-BR/translation.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/i18n/locales/pt-BR/translation.json b/app/src/i18n/locales/pt-BR/translation.json
index 531dc586a..b95605c0d 100644
--- a/app/src/i18n/locales/pt-BR/translation.json
+++ b/app/src/i18n/locales/pt-BR/translation.json
@@ -1157,7 +1157,7 @@
},
"switchToCpu": {
"title": "Mudar para o backend de CPU",
- "description": "Desativa a aceleração por GPU. Você pode baixar o CUDA novamente depois.",
+ "description": "Desativa a aceleração por GPU. Você pode baixar o backend de GPU novamente depois.",
"button": "Mudar"
},
"remove": {
From dfb7ecef6fdc57f2be09a9c5c11fea3603ad4c0b Mon Sep 17 00:00:00 2001
From: felipemontenegro91
<265153241+felipemontenegro91@users.noreply.github.com>
Date: Tue, 20 Oct 2026 21:38:30 -0300
Subject: [PATCH 3/3] fix(i18n): use date-fns pt-BR locale for relative dates
getDateLocale() had no case for pt-BR, so relative timestamps in history,
captures and MCP bindings stayed in English ("5 minutes ago") while the rest
of the interface was in Portuguese. Map pt-BR to date-fns ptBR, following the
existing es/fr/ja/zh pattern.
Co-Authored-By: Claude Opus 5.5
---
app/src/lib/utils/format.ts | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/app/src/lib/utils/format.ts b/app/src/lib/utils/format.ts
index 6719c20c5..82cd5a56e 100644
--- a/app/src/lib/utils/format.ts
+++ b/app/src/lib/utils/format.ts
@@ -1,5 +1,5 @@
import { formatDistance } from 'date-fns';
-import { es, fr, ja, zhCN, zhTW } from 'date-fns/locale';
+import { es, fr, ja, ptBR, zhCN, zhTW } from 'date-fns/locale';
import i18n from '@/i18n';
export function formatDuration(seconds: number): string {
@@ -14,6 +14,8 @@ function getDateLocale() {
return es;
case 'ja':
return ja;
+ case 'pt-BR':
+ return ptBR;
case 'zh-CN':
return zhCN;
case 'zh-TW':