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':