Skip to content

Commit f31c3bb

Browse files
authored
feat(i18n): add pt-BR translation (#11427)
Adds a complete Brazilian Portuguese (pt-BR) translation for the LocalAI WebUI across 14 namespaces with full key parity against the English locale, including modelEditor.json. Registers pt-BR in SUPPORTED_LANGUAGES with the code 'pt-BR', name 'Português (Brasil)' and flag 'BR'. Brand/model/product names and technical identifiers are kept untranslated, matching the existing locale conventions. Assisted-by: opencode:deepseek-v4-flash-free python3 Signed-off-by: Matheus C. França <matheus-catarino@hotmail.com>
1 parent 1f30ecc commit f31c3bb

15 files changed

Lines changed: 1782 additions & 0 deletions

File tree

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
{
2+
"activity": {
3+
"title": "Atividade",
4+
"supporting": "Instalações, downloads e remoções nesta instância.",
5+
"hide": "Ocultar",
6+
"moveToHistory": "Mover para o histórico",
7+
"moreCount": "mais {{count}}",
8+
"waitingForInstaller": "aguardando o instalador",
9+
"progressLabel": "Progresso de {{name}}",
10+
"toNode": "para {{node}}",
11+
"nodesDone": "{{done}} de {{total}} nós concluídos",
12+
"timeLeft": "restam {{value}}",
13+
"cancel": "Cancelar",
14+
"cancelLabel": "Cancelar {{name}}",
15+
"pause": "Pausar",
16+
"pauseLabel": "Pausar {{name}} e manter os dados baixados",
17+
"retry": "Tentar novamente",
18+
"retryLabel": "Tentar novamente {{name}}",
19+
"nodeCount": "{{count}} nós",
20+
"showNodes": "Mostrar {{count}} nós",
21+
"hideNodes": "Ocultar detalhes por nó",
22+
"node": {
23+
"done": "Concluído",
24+
"failed": "Falhou",
25+
"queued": "Na fila",
26+
"workerBusy": "Worker ocupado",
27+
"downloading": "Baixando"
28+
},
29+
"kind": {
30+
"model": "modelo",
31+
"backend": "backend"
32+
},
33+
"verb": {
34+
"installing": "Instalando {{kind}}",
35+
"installed": "{{kind}} instalado",
36+
"removed": "{{kind}} removido",
37+
"staged": "Modelo preparado",
38+
"failed": "Não foi possível instalar {{kind}}",
39+
"queued": "Na fila",
40+
"staging": "Preparando modelo",
41+
"removing": "Removendo {{kind}}",
42+
"failedRemoval": "Não foi possível remover {{kind}}",
43+
"failedStaging": "Não foi possível preparar o modelo"
44+
},
45+
"phase": {
46+
"resolving": "Resolvendo arquivos",
47+
"downloading": "Baixando",
48+
"verifying": "Verificando",
49+
"committing": "Finalizando",
50+
"persisting": "Salvando configuração"
51+
},
52+
"clearHistory": "Limpar histórico",
53+
"inProgress": "Em andamento",
54+
"needsAttention": "Requer atenção",
55+
"record": "Registro",
56+
"historyNote": "Mantém as últimas 50 operações. O histórico fica na memória e é reiniciado quando o LocalAI reinicia.",
57+
"emptyTitle": "Nenhuma operação desde a inicialização",
58+
"emptyBody": "Instalações de modelos e backends aparecem aqui enquanto são executadas e permanecem como registro após a conclusão. O histórico fica na memória, portanto é reiniciado quando o LocalAI reinicia.",
59+
"browseModels": "Procurar modelos",
60+
"viewInModels": "Ver em Modelos",
61+
"viewInBackends": "Ver em Backends",
62+
"rowInstalled": "instalado em {{duration}}",
63+
"rowFailed": "falhou: {{error}}",
64+
"rowCancelled": "cancelado",
65+
"rowRemoved": "removido",
66+
"retryFailed": "Falha ao tentar novamente: {{message}}",
67+
"filter": {
68+
"all": "Todas",
69+
"models": "Modelos",
70+
"backends": "Backends",
71+
"cluster": "Cluster"
72+
},
73+
"summaryRunning_one": "{{count}} operação em andamento.",
74+
"summaryRunning_other": "{{count}} operações em andamento.",
75+
"summaryFailed_one": "{{count}} operação requer atenção.",
76+
"summaryFailed_other": "{{count}} operações requerem atenção.",
77+
"summaryQuiet_one": "Nada em execução. {{count}} operação desde a inicialização.",
78+
"summaryQuiet_other": "Nada em execução. {{count}} operações desde a inicialização.",
79+
"summaryIdle": "Nada em execução.",
80+
"emptyFiltered": "Nenhuma operação corresponde a este filtro.",
81+
"showAll": "Mostrar tudo",
82+
"rowInstalledPlain": "instalado"
83+
},
84+
"manage": {
85+
"title": "Sistema",
86+
"subtitle": "Gerenciar modelos e backends instalados"
87+
},
88+
"settings": {
89+
"title": "Configurações",
90+
"subtitle": "Configurar as configurações de runtime do LocalAI",
91+
"saved": "Configurações salvas com sucesso",
92+
"saveFailed": "Falha ao salvar: {{message}}",
93+
"loadFailed": "Falha ao carregar as configurações: {{message}}",
94+
"sections": {
95+
"branding": "Identidade visual",
96+
"watchdog": "Watchdog",
97+
"memory": "Memória",
98+
"backends": "Backends",
99+
"performance": "Desempenho",
100+
"tracing": "Rastreamento",
101+
"api": "API e CORS",
102+
"p2p": "P2P",
103+
"galleries": "Galerias",
104+
"apikeys": "Chaves de API",
105+
"agents": "Trabalhos de Agentes",
106+
"agentpool": "Pool de Agentes",
107+
"assistant": "Assistente LocalAI",
108+
"distributed": "Distribuído",
109+
"responses": "Respostas"
110+
}
111+
},
112+
"backends": {
113+
"title": "Gerenciamento de Backends",
114+
"subtitle": "Descubra e instale backends de IA para potencializar seus modelos"
115+
},
116+
"backendLogs": {
117+
"title": "Logs de Backends",
118+
"subtitle": "Ver logs dos backends em execução",
119+
"empty": "Nenhum log disponível"
120+
},
121+
"traces": {
122+
"title": "Rastreamentos",
123+
"subtitle": "Ver requisições, respostas e operações de backend registradas"
124+
},
125+
"nodes": {
126+
"title": "Nós Distribuídos",
127+
"subtitle": "Gerenciar nós workers de backend e de agentes"
128+
},
129+
"scheduling": {
130+
"title": "Agendamento",
131+
"subtitle": "Regras de posicionamento de modelos e réplicas no cluster"
132+
},
133+
"p2p": {
134+
"title": "Computação de IA Distribuída",
135+
"subtitle": "Escale suas cargas de trabalho de IA por vários dispositivos com distribuição ponto a ponto"
136+
},
137+
"users": {
138+
"title": "Usuários",
139+
"subtitle": "Gerenciar usuários registrados, funções e convites"
140+
},
141+
"usage": {
142+
"title": "Uso",
143+
"subtitle": "Estatísticas de uso de tokens da API",
144+
"sources": {
145+
"tab": "Origens",
146+
"mixTitle": "Mix de origens",
147+
"ribbonAria": "{{apikey}}% chaves de API, {{web}}% Web UI, {{legacy}}% Legado",
148+
"topSources": "Principais origens ao longo do tempo",
149+
"searchPlaceholder": "Buscar por nome ou prefixo",
150+
"sortBy": "Ordenar",
151+
"sortTokens": "Tokens",
152+
"sortRequests": "Requisições",
153+
"sortLastUsed": "Último uso",
154+
"sortName": "Nome",
155+
"sortUser": "Usuário",
156+
"webUI": "Web UI",
157+
"legacy": "Legado",
158+
"revoked": "revogada",
159+
"filteredTo": "Filtrado por: {{name}}",
160+
"clearFilter": "Limpar filtro",
161+
"other": "Outros ({{count}})",
162+
"noTrafficShort": "Nenhuma requisição neste período.",
163+
"noKeysYet": "Assim que houver requisições, você as verá detalhadas aqui.",
164+
"createKey": "Criar sua primeira chave de API",
165+
"truncatedWarning": "Mostrando as 200 principais chaves. Aplique um filtro para reduzir ainda mais."
166+
}
167+
},
168+
"explorer": {
169+
"title": "Explorador",
170+
"subtitle": "Navegar por arquivos e configurações"
171+
},
172+
"operate": {
173+
"overview": {
174+
"title": "Visão geral",
175+
"subtitle": "Tudo o que está em execução nesta instalação e tudo o que precisa de uma decisão.",
176+
"attention": {
177+
"heading": "Requer atenção",
178+
"clear": "Nada requer atenção. Os backends estão atualizados, nenhuma operação falhou e todos os nós estão saudáveis.",
179+
"backendUpdate": "Atualização disponível: {{from}} → {{to}}"
180+
},
181+
"sections": {
182+
"heading": "Seções",
183+
"runtime": "Runtime",
184+
"runtimeSummary": "{{backends}} backends · {{models}} modelos · {{updates}} atualizações · {{running}} em execução",
185+
"cluster": "Cluster",
186+
"clusterSummary": "{{nodes}} nós",
187+
"observability": "Observabilidade",
188+
"observabilitySummary": "Uso e rastreamentos",
189+
"administration": "Administração",
190+
"administrationSummary": "Usuários, middleware e configurações · {{memory}} de memória em uso",
191+
"clusterSingle": "Nó único",
192+
"observabilityCounted": "{{requests}} requisições · {{errors}} falhas · p95 {{p95}} ms"
193+
},
194+
"headline": {
195+
"requests": "Requisições · {{hours}}h",
196+
"errors": "Requisições com falha",
197+
"p95": "latência p95",
198+
"quiet": "Nenhuma requisição atendida nesta janela ainda.",
199+
"host": "Memória do host"
200+
}
201+
}
202+
}
203+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
{
2+
"title": "Agentes",
3+
"subtitle": "Gerenciar agentes de IA autônomos",
4+
"actions": {
5+
"agentHub": "Central de Agentes",
6+
"import": "Importar",
7+
"createAgent": "Criar Agente",
8+
"edit": "Editar",
9+
"chat": "Conversar",
10+
"export": "Exportar",
11+
"delete": "Excluir",
12+
"pause": "Pausar",
13+
"resume": "Retomar"
14+
},
15+
"table": {
16+
"name": "Nome",
17+
"status": "Status",
18+
"events": "Eventos",
19+
"actions": "Ações",
20+
"eventsTooltip": "{{count}} eventos - Clique para ver"
21+
},
22+
"search": {
23+
"placeholder": "Buscar agentes...",
24+
"summary_one": "{{shown}} de {{total}} agente",
25+
"summary_other": "{{shown}} de {{total}} agentes"
26+
},
27+
"empty": {
28+
"noConfigured": "Nenhum agente configurado",
29+
"noConfiguredText": "Crie um agente para começar com fluxos de trabalho autônomos de IA.",
30+
"browseHub": "Não sabe por onde começar? Explore a <1>Central de Agentes</1> para encontrar configurações de agentes prontas que você pode importar.",
31+
"noMatching": "Nenhum agente correspondente",
32+
"noMatchingText": "Nenhum agente corresponde a \"{{query}}\""
33+
},
34+
"sections": {
35+
"yourAgents": "Seus Agentes",
36+
"otherUsersAgents": "Agentes de Outros Usuários"
37+
},
38+
"deleteDialog": {
39+
"title": "Excluir Agente",
40+
"message": "Excluir o agente \"{{name}}\"? Esta ação não pode ser desfeita.",
41+
"confirm": "Excluir"
42+
},
43+
"toasts": {
44+
"loadFailed": "Falha ao carregar agentes: {{message}}",
45+
"deleted": "Agente \"{{name}}\" excluído",
46+
"deleteFailed": "Falha ao excluir agente: {{message}}",
47+
"paused": "Agente \"{{name}}\" pausado",
48+
"resumed": "Agente \"{{name}}\" retomado",
49+
"pauseFailed": "Falha ao pausar agente: {{message}}",
50+
"resumeFailed": "Falha ao retomar agente: {{message}}",
51+
"exported": "Agente \"{{name}}\" exportado",
52+
"exportFailed": "Falha ao exportar agente: {{message}}",
53+
"parseFailed": "Falha ao analisar o arquivo do agente: {{message}}"
54+
}
55+
}
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
{
2+
"login": {
3+
"subtitle": "Entre para continuar",
4+
"registerSubtitle": "Crie uma conta",
5+
"createAdminSubtitle": "Crie sua conta de administrador",
6+
"tokenSubtitle": "Digite sua chave de API para continuar",
7+
"email": "E-mail",
8+
"emailPlaceholder": "voce@exemplo.com",
9+
"name": "Nome",
10+
"namePlaceholder": "Seu nome (opcional)",
11+
"password": "Senha",
12+
"passwordPlaceholder": "Digite a senha...",
13+
"newPasswordPlaceholder": "Pelo menos 12 caracteres",
14+
"confirmPassword": "Confirmar Senha",
15+
"confirmPasswordPlaceholder": "Repita a senha",
16+
"inviteCodeLabel": "Código de Convite",
17+
"inviteCodeOptional": " (opcional — pule a espera de aprovação)",
18+
"inviteCodePlaceholder": "Cole seu código de convite...",
19+
"tokenPlaceholder": "Digite a chave de API...",
20+
"tokenAltPlaceholder": "Digite o token de API...",
21+
"signIn": "Entrar",
22+
"signingIn": "Entrando...",
23+
"register": "Registrar",
24+
"creatingAccount": "Criando conta...",
25+
"createAdminAccount": "Criar Conta de Administrador",
26+
"signInWithGitHub": "Entrar com GitHub",
27+
"signInWithSSO": "Entrar com SSO",
28+
"loginWithToken": "Entrar com Token",
29+
"showTokenLogin": "Entrar com Token de API",
30+
"hideTokenLogin": "Ocultar login com token",
31+
"noAccount": "Não tem uma conta?",
32+
"hasAccount": "Já tem uma conta?",
33+
"or": "ou",
34+
"errors": {
35+
"loginFailed": "Falha no login",
36+
"registrationFailed": "Falha no registro",
37+
"invalidToken": "Token inválido",
38+
"passwordsDoNotMatch": "As senhas não coincidem",
39+
"enterToken": "Digite um token",
40+
"networkError": "Erro de rede",
41+
"inviteRequired": "Um código de convite válido é obrigatório para registrar"
42+
},
43+
"messages": {
44+
"registrationPending": "Registro bem-sucedido, aguardando aprovação."
45+
}
46+
},
47+
"account": {
48+
"title": "Conta",
49+
"subtitle": "Perfil, credenciais e chaves de API",
50+
"unavailable": "Conta indisponível",
51+
"unavailableText": "A autenticação deve estar habilitada para gerenciar sua conta.",
52+
"tabs": {
53+
"profile": "Perfil",
54+
"security": "Segurança",
55+
"apiKeys": "Chaves de API"
56+
},
57+
"profile": {
58+
"displayName": "Nome de exibição",
59+
"displayNameDescription": "Seu nome público de exibição",
60+
"avatarUrl": "URL do avatar",
61+
"avatarUrlDescription": "URL da sua foto de perfil",
62+
"avatarUrlPlaceholder": "https://exemplo.com/avatar.png",
63+
"save": "Salvar",
64+
"saving": "Salvando...",
65+
"updated": "Perfil atualizado",
66+
"updateFailed": "Falha ao atualizar o perfil: {{message}}"
67+
},
68+
"security": {
69+
"currentPassword": "Senha atual",
70+
"currentPasswordDescription": "Digite sua senha existente para verificar sua identidade",
71+
"currentPasswordPlaceholder": "Senha atual",
72+
"newPassword": "Nova senha",
73+
"newPasswordDescription": "Deve ter pelo menos 12 caracteres",
74+
"newPasswordPlaceholder": "Nova senha",
75+
"confirmPassword": "Confirmar senha",
76+
"confirmPasswordDescription": "Digite novamente sua nova senha",
77+
"confirmPasswordPlaceholder": "Confirme a nova senha",
78+
"changePassword": "Alterar senha",
79+
"changing": "Alterando...",
80+
"changed": "Senha alterada",
81+
"passwordsDoNotMatch": "As senhas não coincidem",
82+
"tooShort": "A nova senha deve ter pelo menos 12 caracteres",
83+
"oauthOnly": "O gerenciamento de senha não está disponível para contas {{provider}}."
84+
},
85+
"apiKeys": {
86+
"create": "Criar chave de API",
87+
"createDescription": "Gere uma chave para acesso programático",
88+
"namePlaceholder": "Nome da chave (ex.: meu-app)",
89+
"createButton": "Criar",
90+
"creating": "Criando...",
91+
"createdToast": "Chave de API criada",
92+
"createFailed": "Falha ao criar a chave de API: {{message}}",
93+
"loadFailed": "Falha ao carregar as chaves de API: {{message}}",
94+
"revoke": "Revogar",
95+
"revokeKey": "Revogar chave",
96+
"revokeTitle": "Revogar Chave de API",
97+
"revokeMessage": "Revogar a chave de API \"{{name}}\"? Esta ação não pode ser desfeita.",
98+
"revoked": "Chave de API revogada",
99+
"revokeFailed": "Falha ao revogar a chave de API: {{message}}",
100+
"copyNow": "Copie agora — esta chave não será mostrada novamente",
101+
"copiedToast": "Copiado para a área de transferência",
102+
"copyFailed": "Falha ao copiar",
103+
"empty": "Nenhuma chave de API ainda. Crie uma acima para obter acesso programático.",
104+
"lastUsed": "último uso em {{date}}"
105+
}
106+
},
107+
"notFound": {
108+
"title": "Página Não Encontrada",
109+
"text": "Parece que esta página se perdeu. Vamos colocá-lo de volta no caminho certo.",
110+
"goHome": "Ir para a Página Inicial"
111+
}
112+
}

0 commit comments

Comments
 (0)