feat: add Portuguese (pt) locale support

This commit is contained in:
Nicolas Varrot
2026-02-14 20:02:12 +00:00
parent ef60af2bdd
commit 474701ba5e
3 changed files with 155 additions and 4 deletions

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{
"name": "pinchchat",
"version": "1.54.0",
"version": "1.55.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pinchchat",
"version": "1.54.0",
"version": "1.55.0",
"license": "MIT",
"dependencies": {
"@tailwindcss/vite": "^4.1.18",

View File

@@ -1,6 +1,6 @@
{
"name": "pinchchat",
"version": "1.54.0",
"version": "1.55.0",
"description": "A sleek, dark-themed webchat UI for OpenClaw — monitor sessions, stream responses, and inspect tool calls in real-time.",
"type": "module",
"repository": {

View File

@@ -775,7 +775,157 @@ const ja: Record<keyof typeof en, string> = {
'slash.help': '利用可能なコマンドを表示',
};
const messages: Record<string, Record<string, string>> = { en, fr, es, de, ja };
const pt: Record<keyof typeof en, string> = {
'login.title': 'PinchChat',
'login.subtitle': 'Conectar ao seu gateway OpenClaw',
'login.gatewayUrl': 'URL do Gateway',
'login.token': 'Token',
'login.tokenPlaceholder': 'Insira o token do gateway',
'login.connect': 'Conectar',
'login.connecting': 'Conectando…',
'login.showToken': 'Mostrar token',
'login.hideToken': 'Ocultar token',
'login.storedLocally': 'As credenciais são armazenadas localmente no navegador',
'login.wsHint': 'A URL deve começar com ws:// ou wss://',
'header.title': 'PinchChat',
'header.connected': 'Conectado',
'header.disconnected': 'Desconectado',
'header.logout': 'Sair',
'header.toggleSidebar': 'Alternar barra lateral',
'header.changeLanguage': 'Alterar idioma',
'header.soundOn': 'Ativar som de notificação',
'header.soundOff': 'Desativar som de notificação',
'chat.welcome': 'PinchChat',
'chat.welcomeSub': 'Envie uma mensagem para começar',
'chat.suggestions': 'Tente perguntar…',
'chat.suggestion1': 'Resuma meus e-mails recentes',
'chat.suggestion2': 'O que há na minha agenda hoje?',
'chat.suggestion3': 'Pesquise na web as últimas notícias',
'chat.suggestion4': 'Ajude-me a escrever um script',
'chat.loadingHistory': 'Carregando mensagens…',
'chat.inputPlaceholder': 'Digite uma mensagem…',
'chat.inputLabel': 'Mensagem',
'chat.attachFile': 'Anexar arquivo',
'chat.send': 'Enviar',
'chat.stop': 'Parar',
'chat.showPreview': 'Pré-visualizar markdown',
'chat.hidePreview': 'Ocultar pré-visualização',
'chat.scrollToBottom': 'Novas mensagens',
'chat.scrollDown': 'Rolar para baixo',
'chat.collapseTools': 'Recolher todas as ferramentas',
'chat.expandTools': 'Expandir todas as ferramentas',
'chat.messages': 'Mensagens do chat',
'chat.thinking': 'Pensando…',
'sidebar.title': 'Sessões',
'sidebar.empty': 'Nenhuma sessão',
'sidebar.search': 'Pesquisar sessões…',
'sidebar.noResults': 'Nenhuma sessão encontrada',
'sidebar.pin': 'Fixar sessão',
'sidebar.unpin': 'Desafixar sessão',
'sidebar.pinned': 'Fixada',
'sidebar.delete': 'Excluir sessão',
'sidebar.deleteConfirm': 'Excluir esta sessão? Esta ação não pode ser desfeita.',
'sidebar.deleteCancel': 'Cancelar',
'sidebar.openSplit': 'Abrir em visualização dividida',
'sidebar.close': 'Fechar barra lateral',
'sidebar.clearSearch': 'Limpar pesquisa',
'sidebar.filterAll': 'Todas',
'sidebar.filterActive': 'Ativas',
'split.close': 'Fechar visualização dividida',
'app.mainChat': 'Chat principal',
'app.splitPane': 'Painel dividido',
'app.skipToChat': 'Ir para o campo de entrada',
'thinking.label': 'Pensamento',
'thinking.reasoning': 'Raciocinando…',
'tool.parameters': 'Parâmetros',
'tool.result': 'Resultado',
'connection.reconnecting': 'Conexão perdida — reconectando…',
'connection.reconnected': 'Reconectado!',
'message.copy': 'Copiar mensagem',
'message.copied': 'Copiado!',
'message.retry': 'Reenviar mensagem',
'message.metadata': 'Detalhes da mensagem',
'message.rawJson': 'JSON bruto',
'message.hideRawJson': 'Ocultar JSON bruto',
'time.yesterday': 'Ontem',
'time.today': 'Hoje',
'shortcuts.title': 'Atalhos de teclado',
'shortcuts.send': 'Enviar mensagem',
'shortcuts.newline': 'Nova linha',
'shortcuts.search': 'Pesquisar sessões',
'shortcuts.switchSession': 'Sessão anterior / próxima',
'shortcuts.closeSidebar': 'Fechar barra lateral / pesquisa',
'shortcuts.stop': 'Parar geração',
'shortcuts.help': 'Mostrar atalhos',
'shortcuts.close': 'Fechar',
'shortcuts.chatSection': 'Chat',
'error.title': 'Algo deu errado',
'error.description': 'Ocorreu um erro inesperado ao renderizar a interface. Tente novamente ou recarregue a página.',
'error.retry': 'Tentar novamente',
'error.reload': 'Recarregar página',
'shortcuts.navigationSection': 'Navegação',
'shortcuts.generalSection': 'Geral',
'header.export': 'Exportar conversa em Markdown',
'header.compact': 'Compactar',
'header.compacting': 'Compactando…',
'header.sessionInfo': 'Informações da sessão',
'sessionInfo.sessionKey': 'Chave da sessão',
'sessionInfo.channel': 'Canal',
'sessionInfo.kind': 'Tipo',
'sessionInfo.model': 'Modelo',
'sessionInfo.agent': 'Agente',
'sessionInfo.messages': 'Mensagens',
'sessionInfo.totalTokens': 'Total de tokens',
'sessionInfo.inputTokens': 'Entrada',
'sessionInfo.outputTokens': 'Saída',
'sessionInfo.contextWindow': 'Contexto',
'sessionInfo.lastActive': 'Última atividade',
'theme.title': 'Tema',
'theme.mode': 'Modo',
'theme.accent': 'Cor de destaque',
'theme.system': 'Sistema',
'theme.dark': 'Escuro',
'theme.light': 'Claro',
'theme.oled': 'OLED',
'search.placeholder': 'Pesquisar mensagens…',
'search.noResults': '0 resultados',
'search.prev': 'Resultado anterior',
'search.next': 'Próximo resultado',
'shortcuts.searchMessages': 'Pesquisar mensagens',
'settings.sendShortcut': 'Tecla de envio',
'settings.sendEnter': 'Enter',
'settings.sendCtrlEnter': 'Ctrl+Enter',
'message.bookmark': 'Marcar mensagem',
'message.removeBookmark': 'Remover marcador',
'chat.bookmarks': 'Marcadores',
'chat.export': 'Exportar conversa',
'chat.contextCompacted': 'Contexto compactado — mensagens antigas salvas no cache local',
'slash.commands': 'Comandos',
'slash.status': 'Mostrar status e uso da sessão',
'slash.reasoning': 'Alternar modo de raciocínio',
'slash.verbose': 'Alternar saída detalhada',
'slash.model': 'Alterar modelo desta sessão',
'slash.compact': 'Compactar contexto da conversa',
'slash.reset': 'Redefinir sessão',
'slash.help': 'Mostrar comandos disponíveis',
};
const messages: Record<string, Record<string, string>> = { en, fr, es, de, ja, pt };
export const supportedLocales = Object.keys(messages) as string[];
@@ -786,6 +936,7 @@ export const localeLabels: Record<string, string> = {
es: 'ES',
de: 'DE',
ja: 'JA',
pt: 'PT',
};
function resolveInitialLocale(): string {