From 63f75dc589e6c6effee498222b247d2616c5b7d0 Mon Sep 17 00:00:00 2001 From: Douglas Cunha Date: Thu, 24 Oct 2024 10:17:35 -0300 Subject: [PATCH 1/2] refactor: improve pt_BR localization clarity and consistency - Refactor pt_BR localization strings for improved clarity and consistency in UI text across various components. - Add password masking to the API key input field. --- src/Resources/Locales/pt_BR.axaml | 375 ++++++++++++++++-------------- src/Views/Preference.axaml | 1 + 2 files changed, 202 insertions(+), 174 deletions(-) diff --git a/src/Resources/Locales/pt_BR.axaml b/src/Resources/Locales/pt_BR.axaml index d00c37c11..45d3e3f96 100644 --- a/src/Resources/Locales/pt_BR.axaml +++ b/src/Resources/Locales/pt_BR.axaml @@ -2,102 +2,102 @@ - Sobre - Sobre o SourceGit • Construído com © 2024 sourcegit-scm • Editor de Texto de • Fontes monoespaçadas de + Sobre o SourceGit • Código-fonte pode ser encontrado em Cliente Git GUI Livre e de Código Aberto - Adicionar Worktree - O que Checar: - Branch Existente - Criar Nova Branch - Localização: + Sobre Caminho para este worktree. Caminho relativo é suportado. - Nome da Branch: + Localização: Opcional. O padrão é o nome da pasta de destino. + Nome do Branch: + Rastreando branch remoto Rastrear Branch: - Rastreando branch remota - Patch - Erro + Criar Novo Branch + Branch Existente + O que Checar: + Adicionar Worktree Erros levantados e se recusa a aplicar o patch - Erro Total + Erro Semelhante a 'erro', mas mostra mais - Arquivo de Patch: + Erro Total Selecione o arquivo .patch para aplicar + Arquivo de Patch: Ignorar mudanças de espaço em branco - Sem Aviso Desativa o aviso de espaço em branco no final + Sem Aviso Aplicar Patch - Aviso Emite avisos para alguns erros, mas aplica + Aviso Espaço em Branco: - Arquivar... - Salvar Arquivo Como: + Patch Selecione o caminho do arquivo de arquivo + Salvar Arquivo Como: Revisão: Arquivar + Arquivar... SourceGit Askpass - ARQUIVOS ASSUMIDOS COMO INALTERADOS - NENHUM ARQUIVO ASSUMIDO COMO INALTERADO + NENHUM ARQUIVO CONSIDERADO SEM ALTERAÇÕES REMOVER + ARQUIVOS CONSIDERADOS SEM ALTERAÇÕES ARQUIVO BINÁRIO NÃO SUPORTADO!!! - Responsabilizar - RESPONSABILIZAÇÃO PARA ESTE ARQUIVO NÃO SUPORTADA!!! - Checar ${0}$... + Blame + BLAME NESTE ARQUIVO NÃO É SUPORTADO!!! + Checkout ${0}$... Comparar com Branch Comparar com HEAD Comparar com Worktree - Copiar Nome da Branch + Copiar Nome do Branch Excluir ${0}$... - Excluir {0} branches selecionadas + Excluir {0} branches selecionados Descartar todas as alterações - Avançar para ${0}$ + Fast-Forward para ${0}$ Git Flow - Finalizar ${0}$ Mesclar ${0}$ em ${1}$... Puxar ${0}$ Puxar ${0}$ para ${1}$... - Empurrar ${0}$ + Subir ${0}$ Rebase ${0}$ em ${1}$... Renomear ${0}$... Definir Branch de Rastreamento - Desfazer Upstream - Comparar Branch + Remover Upstream + Comparação de Branches Bytes CANCELAR + Resetar para Revisão Pai Resetar para Esta Revisão - Resetar to Revisão Pai - ALTERAR MODO DE EXIBIÇÃO - Mostrar como Grade + Mostrar como Lista de Arquivos e Diretórios Mostrar como Lista de Caminhos - Mostrar como Árvore de Arquivos do Sistema - Checkout Branch - Checkout Commit - Aviso: Ao fazer o checkout de um commit, seu Head ficará desanexado + Mostrar como Árvore de Sistema de Arquivos + ALTERAR MODO DE EXIBIÇÃO Commit: - Branch: - Alterações Locais: + Aviso: Ao fazer o checkout de um commit, seu Head ficará desanexado + Checkout Commit Descartar Nada Stash & Reaplicar - Cherry-Pick + Alterações Locais: + Branch: + Checkout Branch Commit(s): Commitar todas as alterações - Limpar Stashes + Cherry-Pick Você está tentando limpar todas as stashes. Tem certeza que deseja continuar? - Clonar Repositório Remoto - Parâmetros Extras: + Limpar Stashes Argumentos adicionais para clonar o repositório. Opcional. - Nome Local: + Parâmetros Extras: Nome do repositório. Opcional. + Nome Local: Pasta Pai: URL do Repositório: + Clonar Repositório Remoto FECHAR Editor - Cherry-Pick Este Commit Checar Commit + Cherry-Pick Este Commit Comparar com HEAD Comparar com Worktree Copiar Informações @@ -109,12 +109,11 @@ Modificar Mensagem Salvar como Patch... Mesclar ao Commit Pai - ALTERAÇÕES Buscar Alterações... - ARQUIVOS + ALTERAÇÕES Arquivo LFS Submódulo - INFORMAÇÃO + ARQUIVOS AUTOR ALTERADO COMMITTER @@ -123,86 +122,88 @@ PAIS REFERÊNCIAS SHA - Insira o assunto do commit + INFORMAÇÃO Descrição - Configurar Repositório - TEMPLATE DE COMMIT - Nome do Template: + Insira o assunto do commit Conteúdo do Template: - Endereço de Email + Nome do Template: + TEMPLATE DE COMMIT Endereço de email - GIT + Endereço de Email Buscar remotos automaticamente Minuto(s) - RASTREADOR DE PROBLEMAS + GIT Adicionar Regra de Exemplo do Github Adicionar Regra de Exemplo do Jira Nova Regra Expressão Regex de Issue: Nome da Regra: - URL de Resultado: Por favor, use $1, $2 para acessar os valores de grupos do regex. - Proxy HTTP + URL de Resultado: + RASTREADOR DE PROBLEMAS Proxy HTTP usado por este repositório - Nome de Usuário + Proxy HTTP Nome de usuário para este repositório + Nome de Usuário + Configurar Repositório Copiar + Copiar Nome do Arquivo COPIAR MENSAGEM Copiar Caminho - Copiar Nome do Arquivo - Criar Branch... Baseado Em: - Checar a branch criada - Alterações Locais: + Checar o branch criado Descartar Não Fazer Nada Guardar & Reaplicar - Nome da Nova Branch: - Insira o nome da branch. + Alterações Locais: + Insira o nome do branch. + Nome do Novo Branch: Criar Branch Local - Criar Tag... + Criar Branch... Nova Tag Em: Assinatura GPG - Mensagem da Tag: Opcional. - Nome da Tag: + Mensagem da Tag: Formato recomendado: v1.0.0-alpha + Nome da Tag: Enviar para todos os remotos após criação Criar Nova Tag - Tipo: anotada leve + Tipo: + Criar Tag... Pressione Ctrl para iniciar diretamente Recortar - Excluir Branch Branch: Você está prestes a excluir uma branch remota!!! - Também excluir branch remota ${0}$ - Excluir Múltiplas Branches - Você está tentando excluir várias branches de uma vez. Certifique-se de verificar antes de agir! - Excluir Remoto + Também excluir branch remoto ${0}$ + Excluir Branch + Você está tentando excluir vários branches de uma vez. Certifique-se de verificar antes de agir! + Excluir Múltiplos Branches Remoto: + Excluir Remoto Alvo: Confirmar Exclusão do Grupo Confirmar Exclusão do Repositório - Excluir Submódulo Caminho do Submódulo: - Excluir Tag + Excluir Submódulo Tag: Excluir dos repositórios remotos - DIFERENÇA BINÁRIA + Excluir Tag NOVO ANTIGO + DIFERENÇA BINÁRIA Copiar Modo de Arquivo Alterado + Ignorar mudanças de espaço em branco MUDANÇA DE OBJETO LFS Próxima Diferença SEM MUDANÇAS OU APENAS MUDANÇAS DE EOL Diferença Anterior Mostrar símbolos ocultos Diferença Lado a Lado - SUBMÓDULO NOVO + SUBMÓDULO Trocar Realce de Sintaxe Quebra de Linha @@ -211,22 +212,22 @@ Aumentar Número de Linhas Visíveis SELECIONE O ARQUIVO PARA VISUALIZAR AS MUDANÇAS Abrir na Ferramenta de Mesclagem - Descartar Alterações Todas as alterações locais na cópia de trabalho. Alterações: Um total de {0} alterações será descartado Você não pode desfazer esta ação!!! + Descartar Alterações Favorito: Novo Nome: Alvo: Editar Grupo Selecionado Editar Repositório Selecionado Fast-Forward (sem checkout) - Buscar Buscar todos os remotos Buscar sem tags Remoto: Buscar Alterações Remotas + Buscar Assumir não alterado Descartar... Descartar {0} arquivos... @@ -241,11 +242,10 @@ Desfazer Preparação Desfazer Preparação de {0} arquivos Desfazer Preparação nas Linhas Selecionadas - Usar Deles (checkout --theirs) Usar Meu (checkout --ours) + Usar Deles (checkout --theirs) Histórico de Arquivos FILTRO - Git-Flow Branch de Desenvolvimento: Feature: Prefixo da Feature: @@ -268,80 +268,87 @@ Iniciar Release... FLOW - Iniciar Release Prefixo da Tag de Versão: - Git LFS - Adicionar Padrão de Rastreamento... + Git-Flow Padrão é nome do arquivo Padrão Personalizado: Adicionar Padrão de Rastreamento ao Git LFS - Buscar - Buscar Objetos LFS + Adicionar Padrão de Rastreamento... Execute `git lfs fetch` para baixar objetos Git LFS. Isso não atualiza a cópia de trabalho. + Buscar Objetos LFS + Buscar Instalar hooks do Git LFS - Mostrar Locks Sem Arquivos Bloqueados Bloquear Locks LFS Desbloquear Forçar Desbloqueio - Prune + Mostrar Locks Execute `git lfs prune` para excluir arquivos LFS antigos do armazenamento local - Puxar - Puxar Objetos LFS + Prune Execute `git lfs pull` para baixar todos os arquivos Git LFS para a referência atual e checkout - Enviar - Enviar Objetos LFS + Puxar Objetos LFS + Puxar Envie arquivos grandes enfileirados para o endpoint Git LFS + Enviar Objetos LFS + Enviar Remoto: Rastrear arquivos nomeados '{0}' Rastrear todos os arquivos *{0} - Históricos + Git LFS Alternar Layout Horizontal/Vertical AUTOR + DATA DO AUTOR GRÁFICO & ASSUNTO SHA HORA DO COMMIT SELECIONADO {0} COMMITS - Referência de Atalhos de Teclado - GLOBAL + Segure ⌘ ou ⇧ para selecionar múltiplos commits. + DICAS: + Segure 'Ctrl' ou 'Shift' para selecionar múltiplos commits. + Históricos Cancelar popup atual Fechar página atual - Ir para a página anterior Ir para a próxima página + Ir para a página anterior Criar nova página Abrir diálogo de preferências - REPOSITÓRIO + GLOBAL Commitar mudanças preparadas Commitar e enviar mudanças preparadas + Preparar todas as mudanças e commitar + Descartar mudanças selecionadas Modo de Dashboard (Padrão) + Modo de busca de commits Forçar recarregamento deste repositório Preparar/Despreparar mudanças selecionadas - Modo de busca de commits Alternar para 'Mudanças' Alternar para 'Históricos' Alternar para 'Stashes' - EDITOR DE TEXTO + REPOSITÓRIO Fechar painel de busca Encontrar próxima correspondência Encontrar correspondência anterior Abrir painel de busca + EDITOR DE TEXTO + Referência de Atalhos de Teclado + Descartar Preparar Despreparar - Descartar - Inicializar Repositório Caminho: + Inicializar Repositório Cherry-Pick em andamento. Pressione 'Abort' para restaurar o HEAD original. Merge em andamento. Pressione 'Abort' para restaurar o HEAD original. Rebase em andamento. Pressione 'Abort' para restaurar o HEAD original. Revert em andamento. Pressione 'Abort' para restaurar o HEAD original. - Rebase Interativo - Ramo Alvo: Em: + Ramo Alvo: + Rebase Interativo ERRO AVISO - Mesclar Ramo Para: Opção de Mesclagem: Ramo de Origem: + Mesclar Ramo Nome: O Git NÃO foi configurado. Por favor, vá para [Preferências] e configure primeiro. Abrir Pasta de Dados do Aplicativo @@ -355,68 +362,79 @@ Copiar Caminho do Repositório Repositórios Colar - Agora mesmo - {0} minutos atrás - {0} horas atrás - Ontem {0} dias atrás + {0} horas atrás + Agora mesmo Mês passado - {0} meses atrás Ano passado + {0} minutos atrás + {0} meses atrás {0} anos atrás - Preferências - APARÊNCIA + Ontem + Prompt para Analisar Diff + Chave da API + Prompt para Gerar Título + Modelo + Servidor + INTELIGÊNCIA ARTIFICIAL Fonte Padrão Tamanho da Fonte Padrão Fonte Monoespaçada - Usar apenas fonte monoespaçada no editor de texto + Usar fonte monoespaçada apenas no editor de texto Tema - Sobrescrever Tema - Usar largura fixa da aba na barra de título - FERRAMENTA DE DIF/MERGE + Substituições de Tema + Usar largura fixa de aba na barra de título + Usar moldura de janela nativa + APARÊNCIA + Insira o caminho para a ferramenta de diff/merge Caminho de Instalação - Insira o caminho para a ferramenta de dif/merge Ferramenta - GERAL + FERRAMENTA DE DIFF/MERGE Verificar atualizações na inicialização Idioma Commits do Histórico + Mostrar data do autor em vez da data do commit no gráfico Comprimento do Guia de Assunto - GIT + GERAL Habilitar Auto CRLF - Diretório Padrão de Clone - E-mail do Usuário - E-mail global do usuário git + Diretório de Clone Padrão + Email global do usuário git + Email do Usuário + Git (>= 2.23.0) é necessário para este aplicativo Caminho de Instalação - Nome do Usuário Nome global do usuário git + Nome do Usuário Versão do Git - Git (>= 2.23.0) é necessário para este aplicativo - ASSINATURA GPG - Assinatura GPG de Commit - Assinatura GPG de Tag + GIT + Assinatura GPG de commit Formato GPG + Insira o caminho para o programa gpg instalado Caminho de Instalação do Programa - Insira o caminho do programa gpg instalado - Chave de Assinatura do Usuário + Assinatura GPG de tag Chave de assinatura gpg do usuário - Prunar Remoto + Chave de Assinatura do Usuário + ASSINATURA GPG + INTEGRAÇÃO + Caminho + Shell/Terminal + SHELL/TERMINAL + Preferências Alvo: - Podar Worktrees + Prunar Remoto Podar informações de worktree em `$GIT_DIR/worktrees` - Puxar + Podar Worktrees Branch: Buscar todos os branches Para: - Alterações Locais: Descartar Não Fazer Nada Guardar & Reaplicar + Alterações Locais: Buscar sem tags Remoto: Puxar (Buscar & Mesclar) Usar rebase em vez de merge - Empurrar + Puxar Forçar push Branch Local: Remoto: @@ -424,177 +442,186 @@ Branch Remoto: Definir como branch de rastreamento Empurrar todas as tags - Empurrar Tag para o Remoto + Empurrar Empurrar para todos os remotos Remoto: Tag: + Empurrar Tag para o Remoto Sair - Rebase da Branch Atual Guardar & reaplicar alterações locais Em: Rebase: + Rebase da Branch Atual Atualizar Adicionar Remoto Editar Remoto - Nome: Nome do remoto - URL do Repositório: + Nome: URL do repositório git remoto + URL do Repositório: Copiar URL Excluir... Editar... Buscar Abrir no Navegador - Podar Alvo: - Confirmar Remoção de Worktree + Podar Habilitar Opção `--force` Alvo: - Renomear Branch - Novo Nome: + Confirmar Remoção de Worktree Nome único para este branch + Novo Nome: Branch: + Renomear Branch ABORTAR + Buscando automaticamente mudanças dos remotos... Limpar (GC & Podar) Execute o comando `git gc` para este repositório. Limpar tudo Configurar este repositório CONTINUAR + Habilitar opção '--reflog' Abrir no Navegador de Arquivos Pesquisar Branches/Tags/Submódulos FILTRADO POR: + Habilitar opção '--first-parent' BRANCHES LOCAIS Navegar para HEAD - Filtro do Primeiro Pai Criar Branch Abrir em {0} Abrir em Ferramentas Externas Atualizar - REMOTOS ADICIONAR REMOTO + REMOTOS RESOLVER - Pesquisar Commit Arquivo Mensagem SHA Autor & Committer + Branch Atual + Pesquisar Commit Mostrar Tags como Árvore Estatísticas - SUBMÓDULOS ADICIONAR SUBMÓDULO ATUALIZAR SUBMÓDULO - TAGS + SUBMÓDULOS NOVA TAG + TAGS Abrir no Terminal - WORKTREES ADICIONAR WORKTREE PODAR + WORKTREES URL do Repositório Git - Resetar Branch Atual para Revisão Modo de Reset: Mover Para: Branch Atual: + Resetar Branch Atual para Revisão Revelar no Explorador de Arquivos - Reverter Commit Commit: Commitar alterações de reversão - Reescrever Mensagem do Commit + Reverter Commit Use 'Shift+Enter' para inserir uma nova linha. 'Enter' é a tecla de atalho do botão OK + Reescrever Mensagem do Commit Executando. Por favor, aguarde... SALVAR Salvar Como... Patch salvo com sucesso! - Verificar atualizações... + Diretório Raiz: + Escanear Repositórios Nova versão deste software disponível: Falha ao verificar atualizações! Baixar Ignorar esta versão Atualização de Software Não há atualizações disponíveis no momento. + Verificar atualizações... Squash Commits - Chave SSH Privada: Caminho para a chave SSH privada + Chave SSH Privada: INICIAR - Stash Incluir arquivos não rastreados - Mensagem: Opcional. Nome deste stash + Mensagem: Guardar Alterações Locais + Stash Aplicar Descartar Pop - Descartar Stash Descartar: - Stashes + Descartar Stash ALTERAÇÕES STASHES - Estatísticas + Stashes COMMITS COMMITTER MÊS SEMANA - COMMITS: AUTORES: - SUBMÓDULOS + COMMITS: + Estatísticas Adicionar Submódulo Copiar Caminho Relativo Buscar submódulos aninhados Abrir Repositório do Submódulo - Caminho Relativo: Pasta relativa para armazenar este módulo. + Caminho Relativo: Excluir Submódulo + SUBMÓDULOS OK Copiar Nome da Tag Excluir ${0}$... Enviar ${0}$... - URL: - Atualizar Submódulos Todos os submódulos Inicializar conforme necessário Recursivamente Submódulo: Usar opção --remote + Atualizar Submódulos + URL: Aviso - Página de Boas-vindas Criar Grupo Raíz Criar Subgrupo Clonar Repositório Excluir ARRASTAR E SOLTAR PASTAS SUPORTADO. AGRUPAMENTO PERSONALIZADO SUPORTADO. Editar + Mover para Outro Grupo Abrir Todos os Repositórios Abrir Repositório Abrir Terminal + Reescanear Repositórios no Diretório de Clone Padrão Buscar Repositórios... Ordenar - Alterações - Git Ignore + Página de Boas-vindas Ignorar todos os arquivos *{0} Ignorar arquivos *{0} na mesma pasta Ignorar arquivos na mesma pasta Ignorar apenas este arquivo + Git Ignore Corrigir Você pode stagear este arquivo agora. COMMIT - COMMIT & PUSH - Template/Histories + COMMITAR E ENVIAR + Modelo/Históricos + Acionar evento de clique + Preparar todas as mudanças e commitar + Commit vazio detectado! Deseja continuar (--allow-empty)? + CONFLITOS DE ARQUIVO RESOLVIDOS CONFLITOS DETECTADOS - CONFLITOS DE ARQUIVOS RESOLVIDOS INCLUIR ARQUIVOS NÃO RASTREADOS - NENHUMA MENSAGEM DE ENTRADA RECENTE - NENHUM TEMPLATE DE COMMIT - STAGED + SEM MENSAGENS DE ENTRADA RECENTES + SEM MODELOS DE COMMIT + Clique com o botão direito nos arquivos selecionados e escolha como resolver conflitos. DESSTAGEAR - DESSTAGEAR TODOS - NÃO STAGED - STAGEAR - STAGEAR TODOS + STAGED VER SUPOR NÃO ALTERADO Template: ${0}$ - Clique com o botão direito nos arquivos selecionados e escolha como resolver conflitos. - WORKTREE + Alterações + Configurar Espaços de Trabalho... + ESPAÇO DE TRABALHO: Copiar Caminho Travar Remover Destravar + WORKTREE diff --git a/src/Views/Preference.axaml b/src/Views/Preference.axaml index 74ed1021e..c977a0e84 100644 --- a/src/Views/Preference.axaml +++ b/src/Views/Preference.axaml @@ -496,6 +496,7 @@ Date: Thu, 24 Oct 2024 18:35:50 -0300 Subject: [PATCH 2/2] feat: Add dynamic language support in commit message generation with OpenAI - Add support for dynamic language prompts in commit message generation. - Add property to store selected language in OpenAI model. - Add new icon definition for language selection in the icon resource file. - Add localization string for the tip regarding the selected language in the OpenAI Assistant feature. - Add OpenAI assistant strings for commit message generation in Brazilian Portuguese localization. - Add SelectedLanguage property to manage language preference. - Add method to create context menu for selecting language. - Refactor tooltips and adjust button layouts for better alignment and additional functionality. - Add a method to open a context menu for language selection in the WorkingCopy view. Signed-off-by: Douglas Cunha --- src/Commands/GenerateCommitMessage.cs | 15 +++++++++++-- src/Models/OpenAI.cs | 6 +++++ src/Resources/Icons.axaml | 1 + src/Resources/Locales/en_US.axaml | 1 + src/Resources/Locales/pt_BR.axaml | 3 +++ src/ViewModels/Preference.cs | 16 ++++++++++++++ src/ViewModels/WorkingCopy.cs | 32 +++++++++++++++++++++++++++ src/Views/WorkingCopy.axaml | 28 ++++++++++++++++------- src/Views/WorkingCopy.axaml.cs | 11 +++++++++ 9 files changed, 103 insertions(+), 10 deletions(-) diff --git a/src/Commands/GenerateCommitMessage.cs b/src/Commands/GenerateCommitMessage.cs index 3bcf70107..cbf36b711 100644 --- a/src/Commands/GenerateCommitMessage.cs +++ b/src/Commands/GenerateCommitMessage.cs @@ -70,12 +70,22 @@ public string Result() } } + private static string GetSelectedLanguagePrompt() + { + var selectedLanguage = Models.OpenAI.SelectedLanguage == "English" + ? string.Empty + : $"{Environment.NewLine}Always write in {Models.OpenAI.SelectedLanguage}"; + + return selectedLanguage; + } + private string GenerateChangeSummary(Models.Change change) { var rs = new GetDiffContent(_repo, new Models.DiffOption(change, false)).ReadToEnd(); var diff = rs.IsSuccess ? rs.StdOut : "unknown change"; + var selectedLanguagePrompt = GetSelectedLanguagePrompt(); - var rsp = Models.OpenAI.Chat(Models.OpenAI.AnalyzeDiffPrompt, $"Here is the `git diff` output: {diff}", _cancelToken); + var rsp = Models.OpenAI.Chat(Models.OpenAI.AnalyzeDiffPrompt + selectedLanguagePrompt, $"Here is the `git diff` output: {diff}", _cancelToken); if (rsp != null && rsp.Choices.Count > 0) return rsp.Choices[0].Message.Content; @@ -84,7 +94,8 @@ private string GenerateChangeSummary(Models.Change change) private string GenerateSubject(string summary) { - var rsp = Models.OpenAI.Chat(Models.OpenAI.GenerateSubjectPrompt, $"Here are the summaries changes:\n{summary}", _cancelToken); + var selectedLanguagePrompt = GetSelectedLanguagePrompt(); + var rsp = Models.OpenAI.Chat(Models.OpenAI.GenerateSubjectPrompt + selectedLanguagePrompt, $"Here are the summaries changes:\n{summary}", _cancelToken); if (rsp != null && rsp.Choices.Count > 0) return rsp.Choices[0].Message.Content; diff --git a/src/Models/OpenAI.cs b/src/Models/OpenAI.cs index b1bb94655..e04682db5 100644 --- a/src/Models/OpenAI.cs +++ b/src/Models/OpenAI.cs @@ -94,6 +94,12 @@ public static string Model set; } + public static string SelectedLanguage + { + get; + set; + } + public static string AnalyzeDiffPrompt { get; diff --git a/src/Resources/Icons.axaml b/src/Resources/Icons.axaml index 1a84597e0..e280fba47 100644 --- a/src/Resources/Icons.axaml +++ b/src/Resources/Icons.axaml @@ -61,6 +61,7 @@ M412 66C326 132 271 233 271 347c0 17 1 34 4 50-41-48-98-79-162-83a444 444 0 00-46 196c0 207 142 382 337 439h2c19 0 34 15 34 33 0 11-6 21-14 26l1 14C183 973 0 763 0 511 0 272 166 70 393 7A35 35 0 01414 0c19 0 34 15 34 33a33 33 0 01-36 33zm200 893c86-66 141-168 141-282 0-17-1-34-4-50 41 48 98 79 162 83a444 444 0 0046-196c0-207-142-382-337-439h-2a33 33 0 01-34-33c0-11 6-21 14-26L596 0C841 51 1024 261 1024 513c0 239-166 441-393 504A35 35 0 01610 1024a33 33 0 01-34-33 33 33 0 0136-33zM512 704a192 192 0 110-384 192 192 0 010 384z M512 64A447 447 0 0064 512c0 248 200 448 448 448s448-200 448-448S760 64 512 64zM218 295h31c54 0 105 19 145 55 13 12 13 31 3 43a35 35 0 01-22 10 36 36 0 01-21-7 155 155 0 00-103-39h-31a32 32 0 01-31-31c0-18 13-31 30-31zm31 433h-31a32 32 0 01-31-31c0-16 13-31 31-31h31A154 154 0 00403 512 217 217 0 01620 295h75l-93-67a33 33 0 01-7-43 33 33 0 0143-7l205 148-205 148a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67H620a154 154 0 00-154 154c0 122-97 220-217 220zm390 118a29 29 0 01-18 6 32 32 0 01-31-31c0-10 4-19 13-25l93-67h-75c-52 0-103-19-143-54-12-12-13-31-1-43a30 30 0 0142-3 151 151 0 00102 39h75L602 599a33 33 0 01-7-43 33 33 0 0143-7l205 148-203 151z M922 39H102A65 65 0 0039 106v609a65 65 0 0063 68h94v168a34 34 0 0019 31 30 30 0 0012 3 30 30 0 0022-10l182-192H922a65 65 0 0063-68V106A65 65 0 00922 39zM288 378h479a34 34 0 010 68H288a34 34 0 010-68zm0-135h479a34 34 0 010 68H288a34 34 0 010-68zm0 270h310a34 34 0 010 68H288a34 34 0 010-68z + M480-120q-74.31 0-140-28.42-65.69-28.43-114.42-77.16-48.73-48.73-77.16-114.42Q120-405.69 120-480q0-74.54 28.42-140.12 28.43-65.57 77.16-114.3 48.73-48.73 114.42-77.16Q405.69-840 480-840q74.54 0 140.12 28.42 65.57 28.43 114.3 77.16 48.73 48.73 77.16 114.3Q840-554.54 840-480q0 74.31-28.42 140-28.43 65.69-77.16 114.42-48.73 48.73-114.3 77.16Q554.54-120 480-120Zm0-39.69q35.23-45.23 58.08-88.85 22.84-43.61 37.15-97.61H384.77q15.85 57.07 37.92 100.69 22.08 43.61 57.31 85.77Zm-50.92-6q-28-33-51.12-81.58-23.11-48.58-34.42-98.88H190.15q34.39 74.61 97.5 122.38 63.12 47.77 141.43 58.08Zm101.84 0q78.31-10.31 141.43-58.08 63.11-47.77 97.5-122.38H616.46q-15.15 51.07-38.27 99.65-23.11 48.58-47.27 80.81ZM173.85-386.15h161.38q-4.54-24.62-6.42-47.97-1.89-23.34-1.89-45.88 0-22.54 1.89-45.88 1.88-23.35 6.42-47.97H173.85q-6.54 20.77-10.2 45.27Q160-504.08 160-480t3.65 48.58q3.66 24.5 10.2 45.27Zm201.38 0h209.54q4.54-24.62 6.42-47.2 1.89-22.57 1.89-46.65t-1.89-46.65q-1.88-22.58-6.42-47.2H375.23q-4.54 24.62-6.42 47.2-1.89 22.57-1.89 46.65t1.89 46.65q1.88 22.58 6.42 47.2Zm249.54 0h161.38q6.54-20.77 10.2-45.27Q800-455.92 800-480t-3.65-48.58q-3.66-24.5-10.2-45.27H624.77q4.54 24.62 6.42 47.97 1.89 23.34 1.89 45.88 0 22.54-1.89 45.88-1.88 23.35-6.42 47.97Zm-8.31-227.7h153.39Q734.69-690 673.5-736.23q-61.19-46.23-142.58-58.85 28 36.85 50.35 84.27 22.35 47.43 35.19 96.96Zm-231.69 0h190.46q-15.85-56.3-39.08-101.84-23.23-45.54-56.15-84.62-32.92 39.08-56.15 84.62-23.23 45.54-39.08 101.84Zm-194.62 0h153.39q12.84-49.53 35.19-96.96 22.35-47.42 50.35-84.27-82.16 12.62-142.96 59.23-60.81 46.62-95.97 122Z M875 117H149C109 117 75 151 75 192v640c0 41 34 75 75 75h725c41 0 75-34 75-75V192c0-41-34-75-75-75zM139 832V192c0-6 4-11 11-11h331v661H149c-6 0-11-4-11-11zm747 0c0 6-4 11-11 11H544v-661H875c6 0 11 4 11 11v640z M875 117H149C109 117 75 151 75 192v640c0 41 34 75 75 75h725c41 0 75-34 75-75V192c0-41-34-75-75-75zm-725 64h725c6 0 11 4 11 11v288h-747V192c0-6 4-11 11-11zm725 661H149c-6 0-11-4-11-11V544h747V832c0 6-4 11-11 11z M40 9 15 23 15 31 9 28 9 20 34 5 24 0 0 14 0 34 25 48 25 28 49 14zM26 29 26 48 49 34 49 15z diff --git a/src/Resources/Locales/en_US.axaml b/src/Resources/Locales/en_US.axaml index 2726aec26..4b5716486 100644 --- a/src/Resources/Locales/en_US.axaml +++ b/src/Resources/Locales/en_US.axaml @@ -19,6 +19,7 @@ Track Branch: Tracking remote branch OpenAI Assistant + Language used to generate commit message Use OpenAI to generate commit message Patch Error diff --git a/src/Resources/Locales/pt_BR.axaml b/src/Resources/Locales/pt_BR.axaml index 45d3e3f96..d5eac91d0 100644 --- a/src/Resources/Locales/pt_BR.axaml +++ b/src/Resources/Locales/pt_BR.axaml @@ -20,6 +20,9 @@ Branch Existente O que Checar: Adicionar Worktree + Assistente do OpenAI + Idioma usado a gerar a mensagem de commit + Usar OpenAI para gerar mensagem de commit Erros levantados e se recusa a aplicar o patch Erro Semelhante a 'erro', mas mostra mais diff --git a/src/ViewModels/Preference.cs b/src/ViewModels/Preference.cs index 72667f549..13f28f179 100644 --- a/src/ViewModels/Preference.cs +++ b/src/ViewModels/Preference.cs @@ -316,6 +316,19 @@ public string OpenAIModel } } + public string SelectedLanguage + { + get => Models.OpenAI.SelectedLanguage; + set + { + if (value != Models.OpenAI.SelectedLanguage) + { + Models.OpenAI.SelectedLanguage = value; + OnPropertyChanged(); + } + } + } + public string OpenAIAnalyzeDiffPrompt { get => Models.OpenAI.AnalyzeDiffPrompt; @@ -591,6 +604,9 @@ Your only goal is to retrieve a single commit message. - Be as concise as possible, keep the message under 50 characters. """; } + + if (string.IsNullOrEmpty(Models.OpenAI.SelectedLanguage)) + Models.OpenAI.SelectedLanguage = "English"; } private RepositoryNode FindNodeRecursive(string id, List collection) diff --git a/src/ViewModels/WorkingCopy.cs b/src/ViewModels/WorkingCopy.cs index 6fcbedd98..282f4cc46 100644 --- a/src/ViewModels/WorkingCopy.cs +++ b/src/ViewModels/WorkingCopy.cs @@ -8,6 +8,7 @@ using Avalonia.Threading; using CommunityToolkit.Mvvm.ComponentModel; +using SourceGit.Models; namespace SourceGit.ViewModels { @@ -1147,6 +1148,37 @@ public ContextMenu CreateContextMenuForStagedChanges() return menu; } + public ContextMenu CreateContextMenuForSelectedLanguage() + { + var menu = new ContextMenu(); + var selectedLanguage = string.IsNullOrEmpty(Preference.Instance.SelectedLanguage) + ? "English" + : Preference.Instance.SelectedLanguage; + + foreach (var locale in Locale.Supported) + { + var language = locale.Name; + + var item = new MenuItem + { + Header = language, + Icon = selectedLanguage.Equals(language, StringComparison.OrdinalIgnoreCase) + ? App.CreateMenuIcon("Icons.Check") + : null + }; + + item.Click += (_, e) => + { + Preference.Instance.SelectedLanguage = language; + e.Handled = true; + }; + + menu.Items.Add(item); + } + + return menu; + } + public ContextMenu CreateContextMenuForCommitMessages() { var menu = new ContextMenu(); diff --git a/src/Views/WorkingCopy.axaml b/src/Views/WorkingCopy.axaml index 3d080fc6f..0ef3c0331 100644 --- a/src/Views/WorkingCopy.axaml +++ b/src/Views/WorkingCopy.axaml @@ -55,7 +55,7 @@ Classes="icon_button" Width="26" Height="14" Padding="0" - ToolTip.Tip="{DynamicResource Text.WorkingCopy.Unstaged.StageAll}" + ToolTip.Tip="{DynamicResource Text.WorkingCopy.Unstaged.StageAll}" Command="{Binding StageAll}"> @@ -99,7 +99,7 @@ - @@ -135,7 +135,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -185,7 +185,7 @@ - + - + + + + - - +