From 795cd952d49ed06f7a6c30b6b41a8f1db24b49ab Mon Sep 17 00:00:00 2001 From: lucasferreiralimax Date: Mon, 24 Jun 2024 12:14:31 -0300 Subject: [PATCH 1/4] config i18n --- setup.py | 3 +- src/commands/__init__.py | 6 +- src/commands/check_outdated.py | 9 +-- src/commands/check_status.py | 11 ++-- src/commands/get_cli_version.py | 5 +- .../{ncu_update_projects.py => ncu_update.py} | 34 ++++++---- ...{update_projects.py => projects_update.py} | 30 +++++---- src/main.py | 65 ++++++++++++++----- translations/check_outdated.en.yml | 5 ++ translations/check_outdated.pt.yml | 5 ++ translations/check_status.en.yml | 5 ++ translations/check_status.pt.yml | 5 ++ translations/comman.en.yml | 3 + translations/comman.pt.yml | 3 + translations/main.en.yml | 13 ++++ translations/main.pt.yml | 13 ++++ translations/ncu_update.en.yml | 16 +++++ translations/ncu_update.pt.yml | 16 +++++ translations/update.en.yml | 15 +++++ translations/update.pt.yml | 15 +++++ 20 files changed, 217 insertions(+), 60 deletions(-) rename src/commands/{ncu_update_projects.py => ncu_update.py} (54%) rename src/commands/{update_projects.py => projects_update.py} (66%) create mode 100644 translations/check_outdated.en.yml create mode 100644 translations/check_outdated.pt.yml create mode 100644 translations/check_status.en.yml create mode 100644 translations/check_status.pt.yml create mode 100644 translations/comman.en.yml create mode 100644 translations/comman.pt.yml create mode 100644 translations/main.en.yml create mode 100644 translations/main.pt.yml create mode 100644 translations/ncu_update.en.yml create mode 100644 translations/ncu_update.pt.yml create mode 100644 translations/update.en.yml create mode 100644 translations/update.pt.yml diff --git a/setup.py b/setup.py index 502331d..df70581 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,7 @@ 'gitman = src.main:app', ], }, - keywords='github cli projects dependencies', packages=find_packages(), + install_requires=["python-i18n"], + keywords='github cli projects dependencies', ) diff --git a/src/commands/__init__.py b/src/commands/__init__.py index fb94d32..9eb96c7 100644 --- a/src/commands/__init__.py +++ b/src/commands/__init__.py @@ -1,8 +1,8 @@ -from .update_projects import update_projects -from .ncu_update_projects import ncu_update_projects +from .projects_update import projects_update +from .ncu_update import ncu_update from .get_cli_version import get_cli_version from .check_outdated import check_outdated from .check_status import check_status # Exportando funções/módulos -__all__ = ["update_projects", "ncu_update_projects", "get_cli_version", "check_outdated", "check_status"] \ No newline at end of file +__all__ = ["projects_update", "ncu_update", "get_cli_version", "check_outdated", "check_status"] \ No newline at end of file diff --git a/src/commands/check_outdated.py b/src/commands/check_outdated.py index 5bf2dc6..8edde2f 100644 --- a/src/commands/check_outdated.py +++ b/src/commands/check_outdated.py @@ -1,22 +1,23 @@ import os import subprocess +import i18n # Função para verificar dependências desatualizadas em todos os projetos def check_outdated(base_dir): for dir in os.listdir(base_dir): full_path = os.path.join(base_dir, dir) if os.path.isdir(full_path): - print("Entrando no diretório:", full_path) + print(i18n.t('check_outdated.entering_directory', fullpath=full_path)) os.chdir(full_path) try: - print("Rodando 'outdated' em", full_path) + print(i18n.t('check_outdated.running_outdated', fullpath=full_path)) subprocess.run(['npm', 'outdated'], check=True) except subprocess.CalledProcessError as e: - print(f"Erro ao verificar dependências desatualizadas em {full_path}:") + print(i18n.t('check_outdated.error', fullpath=full_path)) print(e.stderr) os.chdir('..') - print("Verificação concluída.") \ No newline at end of file + print(i18n.t('check_status.complete_status')) \ No newline at end of file diff --git a/src/commands/check_status.py b/src/commands/check_status.py index 2a65dbe..9c9e2db 100644 --- a/src/commands/check_status.py +++ b/src/commands/check_status.py @@ -1,22 +1,23 @@ import os import subprocess +import i18n # Função para verificar o status do Git em todos os projetos def check_status(base_dir): for dir in os.listdir(base_dir): full_path = os.path.join(base_dir, dir) if os.path.isdir(full_path): - print("Entrando no diretório:", full_path) + print(i18n.t('check_status.entering_directory', fullpath=full_path)) os.chdir(full_path) try: - print("Verificando o status do Git em", full_path) + print(i18n.t('check_status.checking_git_status', fullpath=full_path)) subprocess.run(['git', 'status'], check=True) except subprocess.CalledProcessError as e: - print(f"Erro ao verificar o status do Git em {full_path}:") + print(i18n.t('check_status.git_error', fullpath=full_path)) print(e.stderr) os.chdir('..') - - print("Verificação de status do Git concluída.") \ No newline at end of file + + print(i18n.t('check_status.complete_status')) \ No newline at end of file diff --git a/src/commands/get_cli_version.py b/src/commands/get_cli_version.py index 236952f..7f819c9 100644 --- a/src/commands/get_cli_version.py +++ b/src/commands/get_cli_version.py @@ -1,8 +1,9 @@ from importlib.metadata import version +import i18n # Função para exibir a versão do programa def get_cli_version(): try: - return version('gitman') + print(i18n.t('comman.version', version=version('gitman'))) except Exception: - return "Versão desconhecida" \ No newline at end of file + print(i18n.t('comman.version_not_found')) \ No newline at end of file diff --git a/src/commands/ncu_update_projects.py b/src/commands/ncu_update.py similarity index 54% rename from src/commands/ncu_update_projects.py rename to src/commands/ncu_update.py index ac062c3..b1c2897 100644 --- a/src/commands/ncu_update_projects.py +++ b/src/commands/ncu_update.py @@ -1,27 +1,28 @@ import os import subprocess +import i18n -# Função para rodar npx npm-check-updates e atualizar dependências -def ncu_update_projects(projects, commit_message, base_dir): +# Função para rodar npx npm-check-updates e atualizar +def ncu_update(projects, commit_message, base_dir): project_list = projects.split(',') for project_dir in project_list: full_path = os.path.join(base_dir, project_dir) if not os.path.isdir(full_path): - print(f"O diretório {full_path} não existe.") + print(i18n.t('ncu_update.ncu_directory_not_exist').format(fullpath=full_path)) continue + print(i18n.t('ncu_update.ncu_entering_directory').format(fullpath=full_path)) os.chdir(full_path) - print(f"Atualizando todas as dependências em {full_path} com npm-check-updates") - try: + print(i18n.t('ncu_update.ncu_running').format(fullpath=full_path)) # Executa npx npm-check-updates ncu_result = subprocess.run(['npx', 'npm-check-updates', '-u'], capture_output=True, text=True) # Exibir a saída completa para depuração - print(f"Saída do npx npm-check-updates:\n{ncu_result.stdout}") - print(f"Erros do npx npm-check-updates:\n{ncu_result.stderr}") + print(i18n.t('ncu_update.ncu_output').format(output=ncu_result.stdout)) + print(i18n.t('ncu_update.ncu_errors').format(errors=ncu_result.stderr)) # Se houver atualizações, ncu_result.returncode será 1 if ncu_result.returncode not in [0, 1]: @@ -31,8 +32,8 @@ def ncu_update_projects(projects, commit_message, base_dir): install_result = subprocess.run(['npm', 'install'], capture_output=True, text=True) # Exibir a saída completa para depuração - print(f"Saída do npm install:\n{install_result.stdout}") - print(f"Erros do npm install:\n{install_result.stderr}") + print(i18n.t('ncu_update.ncu_npm_install_output').format(output=install_result.stdout)) + print(i18n.t('ncu_update.ncu_npm_install_errors').format(errors=install_result.stderr)) if install_result.returncode != 0: raise subprocess.CalledProcessError(install_result.returncode, install_result.args, output=install_result.stdout, stderr=install_result.stderr) @@ -41,12 +42,17 @@ def ncu_update_projects(projects, commit_message, base_dir): subprocess.run(['git', 'add', 'package.json', 'package-lock.json'], check=True) subprocess.run(['git', 'commit', '-m', commit_message], check=True) subprocess.run(['git', 'push'], check=True) + + print(i18n.t('ncu_update.ncu_git_commit_message').format(message=commit_message)) + print(i18n.t('ncu_update.ncu_git_push')) except subprocess.CalledProcessError as e: - print(f"Erro ao executar npm-check-updates ou npm install em {full_path}:") - print(f"Comando: {e.cmd}") - print(f"Retorno do comando: {e.returncode}") - print(f"Saída: {e.output}") - print(f"Erro: {e.stderr}") + print(i18n.t('ncu_update.ncu_error').format(fullpath=full_path)) + print(i18n.t('ncu_update.ncu_command').format(command=e.cmd)) + print(i18n.t('ncu_update.ncu_return_code').format(returncode=e.returncode)) + print(i18n.t('ncu_update.ncu_output').format(output=e.output.decode())) + print(i18n.t('ncu_update.ncu_error_details').format(errors=e.stderr.decode())) os.chdir('..') + + print(i18n.t('ncu_update.ncu_complete')) \ No newline at end of file diff --git a/src/commands/update_projects.py b/src/commands/projects_update.py similarity index 66% rename from src/commands/update_projects.py rename to src/commands/projects_update.py index c55015b..7c883e2 100644 --- a/src/commands/update_projects.py +++ b/src/commands/projects_update.py @@ -1,19 +1,20 @@ import os import subprocess +import i18n # Função para atualizar dependências de um projeto -def update_projects(projects, ignored_deps, commit_message, base_dir): +def projects_update(projects, ignored_deps, commit_message, base_dir): project_list = projects.split(',') for project_dir in project_list: full_path = os.path.join(base_dir, project_dir) if not os.path.isdir(full_path): - print(f"O diretório {full_path} não existe.") + print(i18n.t('update.up_directory_not_exist').format(fullpath=full_path)) continue os.chdir(full_path) - print(f"Verificando dependências desatualizadas em {full_path}") + print(i18n.t('update.up_checking_outdated').format(fullpath=full_path)) try: # Gera uma lista de dependências desatualizadas com nome e versão @@ -23,8 +24,8 @@ def update_projects(projects, ignored_deps, commit_message, base_dir): ) # Exibir a saída completa para depuração - print(f"Saída do npm outdated:\n{outdated_result.stdout}") - print(f"Erros do npm outdated:\n{outdated_result.stderr}") + print(i18n.t('update.up_outdated_output').format(output=outdated_result.stdout)) + print(i18n.t('update.up_outdated_errors').format(errors=outdated_result.stderr)) # Se houver dependências desatualizadas, outdated_result.returncode será 1 if outdated_result.returncode not in [0, 1]: @@ -41,7 +42,7 @@ def update_projects(projects, ignored_deps, commit_message, base_dir): ) if outdated_packages: - print("Dependências desatualizadas encontradas. Atualizando dependências:") + print(i18n.t('update.up_outdated_found')) for package in outdated_packages.split('\n'): package_name = package.split(':')[1] print(f" - {package_name}") @@ -49,21 +50,24 @@ def update_projects(projects, ignored_deps, commit_message, base_dir): # Atualiza cada pacote individualmente for package in outdated_packages.split('\n'): package_name = package.split(':')[1] - print(f"Atualizando {package_name}") + print(i18n.t('update.up_updating_package').format(package_name=package_name)) subprocess.run(['npm', 'install', package_name, '--legacy-peer-deps'], check=True) # Adiciona mudanças ao Git, cria um commit e faz push subprocess.run(['git', 'add', 'package.json', 'package-lock.json'], check=True) subprocess.run(['git', 'commit', '-m', commit_message], check=True) subprocess.run(['git', 'push'], check=True) + + print(i18n.t('update.up_git_commit_message').format(message=commit_message)) + print(i18n.t('update.up_git_push')) else: - print(f"Todas as dependências estão atualizadas em {full_path}") + print(i18n.t('update.up_all_to_date').format(fullpath=full_path)) except subprocess.CalledProcessError as e: - print(f"Erro ao verificar/atualizar dependências em {full_path}:") - print(f"Comando: {e.cmd}") - print(f"Retorno do comando: {e.returncode}") - print(f"Saída: {e.output}") - print(f"Erro: {e.stderr}") + print(i18n.t('update.up_error').format(fullpath=full_path)) + print(i18n.t('update.up_command').format(command=e.cmd)) + print(i18n.t('update.up_return_code').format(returncode=e.returncode)) + print(i18n.t('update.up_output').format(output=e.output.decode())) + print(i18n.t('update.up_error_details').format(errors=e.stderr.decode())) os.chdir('..') \ No newline at end of file diff --git a/src/main.py b/src/main.py index f41fb5e..dd28725 100644 --- a/src/main.py +++ b/src/main.py @@ -1,25 +1,54 @@ #!/usr/bin/env python3 import os import sys - -from commands import update_projects -from commands import ncu_update_projects +import i18n +import platform +from commands import projects_update +from commands import ncu_update from commands import get_cli_version from commands import check_outdated from commands import check_status +# Obter informações do sistema +system_info = platform.system() + +if system_info == 'Windows': + # Para Windows, usando o módulo winreg para obter o idioma + import winreg + + key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Control Panel\\International", 0, winreg.KEY_READ) + system_lang, _ = winreg.QueryValueEx(key, "LocaleName") + winreg.CloseKey(key) + +elif system_info == 'Darwin': + # Para macOS, usando o comando 'defaults' para obter o idioma + import subprocess + + proc = subprocess.Popen(['defaults', 'read', '-g', 'AppleLocale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, _ = proc.communicate() + system_lang = out.strip().decode('utf-8') + +else: + # Para Linux e outros sistemas baseados em Unix, usando 'locale' para obter o idioma + import subprocess + + proc = subprocess.Popen(['locale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, _ = proc.communicate() + system_lang = out.split()[0].decode('utf-8').split('=')[1] + +if system_lang: + system_lang = system_lang[:2] + +i18n.load_path.append('translations') +i18n.set('fallback', 'en') +i18n.set('locale', system_lang) + # Função para exibir o uso correto do script def usage(): - print("Uso: {} [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]".format(sys.argv[0])) - print(" -b Diretório base onde os projetos estão localizados. (padrão: ~/Documents)") - print(" -u Atualiza as dependências do diretório de projeto especificado.") - print(" Se múltiplos projetos forem fornecidos, separe-os por vírgula.") - print(" -i Lista de dependências a serem ignoradas, separadas por vírgula.") - print(" -a Verifica dependências desatualizadas em todos os projetos.") - print(" -g Verifica o status do Git em todos os projetos.") - print(" -n Roda npx npm-check-updates -u && npm install seguido de um commit.") - print(" -m Mensagem de commit a ser usada nas atualizações. (opcional)") - print(" -v, --version Mostra a versão do programa.") + print(i18n.t('main.usage.description', name=sys.argv[0])) + for i in range(1, 9): + new_line = 'line' + str(i) + print(i18n.t('main.usage.'+ new_line)) sys.exit(1) # Função principal do programa @@ -55,20 +84,20 @@ def app(): elif opt == '-m': commit_message = args.pop(0) elif opt in ('-v', '--version'): - print(f"Versão do programa: {get_cli_version()}") + get_cli_version() sys.exit(0) else: usage() # Executa o comando apropriado baseado nos parâmetros fornecidos if ncu_flag: - ncu_update_projects(project_directory, commit_message, base_directory) + ncu_update(project_directory, commit_message, base_directory) elif project_directory: - update_projects(project_directory, ignored_dependencies, commit_message, base_directory) + projects_update(project_directory, ignored_dependencies, commit_message, base_directory) except KeyboardInterrupt: - print("\nExecução do script interrompida.") + print(i18n.t('main.interrupted')) sys.exit(0) if __name__ == "__main__": - app() \ No newline at end of file + app() diff --git a/translations/check_outdated.en.yml b/translations/check_outdated.en.yml new file mode 100644 index 0000000..078d681 --- /dev/null +++ b/translations/check_outdated.en.yml @@ -0,0 +1,5 @@ +en: + entering_directory: "Entering directory: %{fullpath}" + running_outdated: "Running 'outdated' in %{fullpath}" + error: "Error checking outdated dependencies in %{fullpath}:" + complete_check: "Check completed." diff --git a/translations/check_outdated.pt.yml b/translations/check_outdated.pt.yml new file mode 100644 index 0000000..3140e21 --- /dev/null +++ b/translations/check_outdated.pt.yml @@ -0,0 +1,5 @@ +pt: + entering_directory: "Entrando no diretório: %{fullpath}" + running_outdated: "Rodando 'outdated' em %{fullpath}" + error: "Erro ao verificar dependências desatualizadas em %{fullpath}:" + complete_check: "Verificação concluída." diff --git a/translations/check_status.en.yml b/translations/check_status.en.yml new file mode 100644 index 0000000..78c1a25 --- /dev/null +++ b/translations/check_status.en.yml @@ -0,0 +1,5 @@ +en: + entering_directory: "Entering directory: %{fullpath}" + checking_git_status: "Checking Git status in %{fullpath}" + git_error: "Error checking Git status in %{fullpath}:" + complete_status: "Git status check completed." diff --git a/translations/check_status.pt.yml b/translations/check_status.pt.yml new file mode 100644 index 0000000..d7fa64a --- /dev/null +++ b/translations/check_status.pt.yml @@ -0,0 +1,5 @@ +pt: + entering_directory: "Entrando no diretório: %{fullpath}" + checking_git_status: "Verificando o status do Git em %{fullpath}" + git_error: "Erro ao verificar o status do Git em %{fullpath}:" + complete_status: "Verificação de status do Git concluída." diff --git a/translations/comman.en.yml b/translations/comman.en.yml new file mode 100644 index 0000000..520328d --- /dev/null +++ b/translations/comman.en.yml @@ -0,0 +1,3 @@ +en: + version: "Program version: %{version}" + version_not_found: "Version not found" diff --git a/translations/comman.pt.yml b/translations/comman.pt.yml new file mode 100644 index 0000000..2e99d9f --- /dev/null +++ b/translations/comman.pt.yml @@ -0,0 +1,3 @@ +pt: + version: "Versão do programa: %{version}" + version_not_found: "Versão desconhecida" diff --git a/translations/main.en.yml b/translations/main.en.yml new file mode 100644 index 0000000..6bd0783 --- /dev/null +++ b/translations/main.en.yml @@ -0,0 +1,13 @@ +en: + usage: + description: "Usage: %{name} [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" + line1: "-b Base directory where projects are located. (default: ~/Documents)" + line2: "-u Updates the dependencies of the specified project directory." + line3: " If multiple projects are provided, separate them with a comma." + line4: "-i List of dependencies to be ignored, separated by a comma." + line5: "-a Checks outdated dependencies in all projects." + line6: "-g Checks the Git status in all projects." + line7: "-n Runs npx npm-check-updates -u && npm install followed by a commit." + line8: "-m Commit message to be used in updates. (optional)" + line9: "-v, --version Shows the program version." + interrupted: "\nScript execution interrupted." diff --git a/translations/main.pt.yml b/translations/main.pt.yml new file mode 100644 index 0000000..7a2d0ca --- /dev/null +++ b/translations/main.pt.yml @@ -0,0 +1,13 @@ +pt: + usage: + description: "Uso: %{name} [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" + line1: "-b Diretório base onde os projetos estão localizados. (padrão: ~/Documents)" + line2: "-u Atualiza as dependências do diretório de projeto especificado." + line3: " Se múltiplos projetos forem fornecidos, separe-os por vírgula." + line4: "-i Lista de dependências a serem ignoradas, separadas por vírgula." + line5: "-a Verifica dependências desatualizadas em todos os projetos." + line6: "-g Verifica o status do Git em todos os projetos." + line7: "-n Roda npx npm-check-updates -u && npm install seguido de um commit." + line8: "-m Mensagem de commit a ser usada nas atualizações. (opcional)" + line9: "-v, --version Mostra a versão do programa." + interrupted: "\nExecução do script interrompida." diff --git a/translations/ncu_update.en.yml b/translations/ncu_update.en.yml new file mode 100644 index 0000000..4d80956 --- /dev/null +++ b/translations/ncu_update.en.yml @@ -0,0 +1,16 @@ +en: + ncu_entering_directory: "Entering directory: %{fullpath}" + ncu_running: "Updating all dependencies in %{fullpath} with npm-check-updates" + ncu_output: "npm-check-updates output:\n%{output}" + ncu_errors: "npm-check-updates errors:\n%{errors}" + ncu_npm_install_output: "npm install output:\n%{output}" + ncu_npm_install_errors: "npm install errors:\n%{errors}" + ncu_git_commit_message: "Commit made with message: %{message}" + ncu_git_push: "Push made to remote repository" + ncu_error: "Error executing npm-check-updates or npm install in %{fullpath}:" + ncu_command: "Command: %{command}" + ncu_return_code: "Command return code: %{returncode}" + ncu_output: "Output: %{output}" + ncu_error_details: "Error details: %{errors}" + ncu_complete: "Dependencies update completed." + ncu_directory_not_exist: "The directory %{fullpath} does not exist." diff --git a/translations/ncu_update.pt.yml b/translations/ncu_update.pt.yml new file mode 100644 index 0000000..2f3784e --- /dev/null +++ b/translations/ncu_update.pt.yml @@ -0,0 +1,16 @@ +pt: + ncu_entering_directory: "Entrando no diretório: %{fullpath}" + ncu_running: "Atualizando todas as dependências em %{fullpath} com npm-check-updates" + ncu_output: "Saída do npm-check-updates:\n%{output}" + ncu_errors: "Erros do npm-check-updates:\n%{errors}" + ncu_npm_install_output: "Saída do npm install:\n%{output}" + ncu_npm_install_errors: "Erros do npm install:\n%{errors}" + ncu_git_commit_message: "Commit realizado com a mensagem: %{message}" + ncu_git_push: "Push realizado para o repositório remoto" + ncu_error: "Erro ao executar npm-check-updates ou npm install em %{fullpath}:" + ncu_command: "Comando: %{command}" + ncu_return_code: "Retorno do comando: %{returncode}" + ncu_output: "Saída: %{output}" + ncu_error_details: "Erro: %{errors}" + ncu_complete: "Atualização de dependências concluída." + ncu_directory_not_exist: "O diretório %{fullpath} não existe." diff --git a/translations/update.en.yml b/translations/update.en.yml new file mode 100644 index 0000000..3c0575c --- /dev/null +++ b/translations/update.en.yml @@ -0,0 +1,15 @@ +en: + up_directory_not_exist: "The directory %{fullpath} does not exist." + up_checking_outdated: "Checking outdated dependencies in %{fullpath}" + up_outdated_output: "npm outdated output:\n%{output}" + up_outdated_errors: "npm outdated errors:\n%{errors}" + up_outdated_found: "Outdated dependencies found. Updating dependencies:" + up_updating_package: "Updating %{package_name}" + up_all_to_date: "All dependencies are up to date in %{fullpath}" + up_error: "Error checking/updating dependencies in %{fullpath}:" + up_command: "Command: %{command}" + up_return_code: "Command return code: %{returncode}" + up_output: "Output: %{output}" + up_error_details: "Error details: %{errors}" + up_git_commit_message: "Commit made with message: %{message}" + up_git_push: "Push made to remote repository" diff --git a/translations/update.pt.yml b/translations/update.pt.yml new file mode 100644 index 0000000..6e7d850 --- /dev/null +++ b/translations/update.pt.yml @@ -0,0 +1,15 @@ +pt: + up_directory_not_exist: "O diretório %{fullpath} não existe." + up_checking_outdated: "Verificando dependências desatualizadas em %{fullpath}" + up_outdated_output: "Saída do npm outdated:\n%{output}" + up_outdated_errors: "Erros do npm outdated:\n%{errors}" + up_outdated_found: "Dependências desatualizadas encontradas. Atualizando dependências:" + up_updating_package: "Atualizando %{package_name}" + up_all_to_date: "Todas as dependências estão atualizadas em %{fullpath}" + up_error: "Erro ao verificar/atualizar dependências em %{fullpath}:" + up_command: "Comando: %{command}" + up_return_code: "Retorno do comando: %{returncode}" + up_output: "Saída: %{output}" + up_error_details: "Erro: %{errors}" + up_git_commit_message: "Commit realizado com a mensagem: %{message}" + up_git_push: "Push realizado para o repositório remoto" From 301a21a0b46108a195bf8373100e92a1f4c93efe Mon Sep 17 00:00:00 2001 From: lucasferreiralimax Date: Mon, 24 Jun 2024 13:29:38 -0300 Subject: [PATCH 2/4] create file config i18n --- gitman/config.py | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 gitman/config.py diff --git a/gitman/config.py b/gitman/config.py new file mode 100644 index 0000000..b98019c --- /dev/null +++ b/gitman/config.py @@ -0,0 +1,34 @@ +import i18n +import platform +import subprocess + +def i18nConfig(): + # Obter informações do sistema + system_info = platform.system() + + if system_info == 'Windows': + # Para Windows, usando o módulo winreg para obter o idioma + import winreg + + key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Control Panel\\International", 0, winreg.KEY_READ) + system_lang, _ = winreg.QueryValueEx(key, "LocaleName") + winreg.CloseKey(key) + + elif system_info == 'Darwin': + # Para macOS, usando o comando 'defaults' para obter o idioma + proc = subprocess.Popen(['defaults', 'read', '-g', 'AppleLocale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, _ = proc.communicate() + system_lang = out.strip().decode('utf-8') + + else: + # Para Linux e outros sistemas baseados em Unix, usando 'locale' para obter o idioma + proc = subprocess.Popen(['locale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, _ = proc.communicate() + system_lang = out.split()[0].decode('utf-8').split('=')[1] + + if system_lang: + system_lang = system_lang[:2] + + i18n.load_path.append('gitman/translations') + i18n.set('fallback', 'en') + i18n.set('locale', system_lang) \ No newline at end of file From 9e7ca08f4f756344969a1b99032cd42a1b5922bb Mon Sep 17 00:00:00 2001 From: lucasferreiralimax Date: Mon, 24 Jun 2024 13:29:57 -0300 Subject: [PATCH 3/4] config new translations in setuptools --- setup.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index df70581..21a7bca 100644 --- a/setup.py +++ b/setup.py @@ -23,13 +23,17 @@ 'Operating System :: Unix', ], python_requires='>=3.12', - py_modules=['src.main'], + py_modules=['gitman.main'], entry_points={ 'console_scripts': [ - 'gitman = src.main:app', + 'gitman = gitman.main:app', ], }, packages=find_packages(), + include_package_data=True, + package_data={ + '': ['translations/*.yml'], + }, install_requires=["python-i18n"], keywords='github cli projects dependencies', ) From eea052050cca1d9285b48e9b4788ff4cc2dc5a8c Mon Sep 17 00:00:00 2001 From: lucasferreiralimax Date: Mon, 24 Jun 2024 13:30:17 -0300 Subject: [PATCH 4/4] refactory folders --- {src => gitman}/__init__.py | 0 {src => gitman}/commands/__init__.py | 0 {src => gitman}/commands/check_outdated.py | 0 {src => gitman}/commands/check_status.py | 0 {src => gitman}/commands/get_cli_version.py | 0 {src => gitman}/commands/ncu_update.py | 0 {src => gitman}/commands/projects_update.py | 0 {src => gitman}/main.py | 68 +++++++------------ .../translations}/check_outdated.en.yml | 0 .../translations}/check_outdated.pt.yml | 0 .../translations}/check_status.en.yml | 0 .../translations}/check_status.pt.yml | 0 .../translations}/comman.en.yml | 0 .../translations}/comman.pt.yml | 0 .../translations}/main.en.yml | 3 +- .../translations}/main.pt.yml | 3 +- .../translations}/ncu_update.en.yml | 0 .../translations}/ncu_update.pt.yml | 0 .../translations}/update.en.yml | 0 .../translations}/update.pt.yml | 0 20 files changed, 28 insertions(+), 46 deletions(-) rename {src => gitman}/__init__.py (100%) rename {src => gitman}/commands/__init__.py (100%) rename {src => gitman}/commands/check_outdated.py (100%) rename {src => gitman}/commands/check_status.py (100%) rename {src => gitman}/commands/get_cli_version.py (100%) rename {src => gitman}/commands/ncu_update.py (100%) rename {src => gitman}/commands/projects_update.py (100%) rename {src => gitman}/main.py (55%) rename {translations => gitman/translations}/check_outdated.en.yml (100%) rename {translations => gitman/translations}/check_outdated.pt.yml (100%) rename {translations => gitman/translations}/check_status.en.yml (100%) rename {translations => gitman/translations}/check_status.pt.yml (100%) rename {translations => gitman/translations}/comman.en.yml (100%) rename {translations => gitman/translations}/comman.pt.yml (100%) rename {translations => gitman/translations}/main.en.yml (80%) rename {translations => gitman/translations}/main.pt.yml (81%) rename {translations => gitman/translations}/ncu_update.en.yml (100%) rename {translations => gitman/translations}/ncu_update.pt.yml (100%) rename {translations => gitman/translations}/update.en.yml (100%) rename {translations => gitman/translations}/update.pt.yml (100%) diff --git a/src/__init__.py b/gitman/__init__.py similarity index 100% rename from src/__init__.py rename to gitman/__init__.py diff --git a/src/commands/__init__.py b/gitman/commands/__init__.py similarity index 100% rename from src/commands/__init__.py rename to gitman/commands/__init__.py diff --git a/src/commands/check_outdated.py b/gitman/commands/check_outdated.py similarity index 100% rename from src/commands/check_outdated.py rename to gitman/commands/check_outdated.py diff --git a/src/commands/check_status.py b/gitman/commands/check_status.py similarity index 100% rename from src/commands/check_status.py rename to gitman/commands/check_status.py diff --git a/src/commands/get_cli_version.py b/gitman/commands/get_cli_version.py similarity index 100% rename from src/commands/get_cli_version.py rename to gitman/commands/get_cli_version.py diff --git a/src/commands/ncu_update.py b/gitman/commands/ncu_update.py similarity index 100% rename from src/commands/ncu_update.py rename to gitman/commands/ncu_update.py diff --git a/src/commands/projects_update.py b/gitman/commands/projects_update.py similarity index 100% rename from src/commands/projects_update.py rename to gitman/commands/projects_update.py diff --git a/src/main.py b/gitman/main.py similarity index 55% rename from src/main.py rename to gitman/main.py index dd28725..1797651 100644 --- a/src/main.py +++ b/gitman/main.py @@ -2,50 +2,27 @@ import os import sys import i18n -import platform -from commands import projects_update -from commands import ncu_update -from commands import get_cli_version -from commands import check_outdated -from commands import check_status +from .config import i18nConfig +from .commands import projects_update +from .commands import ncu_update +from .commands import get_cli_version +from .commands import check_outdated +from .commands import check_status -# Obter informações do sistema -system_info = platform.system() - -if system_info == 'Windows': - # Para Windows, usando o módulo winreg para obter o idioma - import winreg - - key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "Control Panel\\International", 0, winreg.KEY_READ) - system_lang, _ = winreg.QueryValueEx(key, "LocaleName") - winreg.CloseKey(key) - -elif system_info == 'Darwin': - # Para macOS, usando o comando 'defaults' para obter o idioma - import subprocess - - proc = subprocess.Popen(['defaults', 'read', '-g', 'AppleLocale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out, _ = proc.communicate() - system_lang = out.strip().decode('utf-8') - -else: - # Para Linux e outros sistemas baseados em Unix, usando 'locale' para obter o idioma - import subprocess - - proc = subprocess.Popen(['locale'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) - out, _ = proc.communicate() - system_lang = out.split()[0].decode('utf-8').split('=')[1] - -if system_lang: - system_lang = system_lang[:2] - -i18n.load_path.append('translations') -i18n.set('fallback', 'en') -i18n.set('locale', system_lang) +gitman = """ + _______ __ .___________..___ ___. ___ .__ __. + / _____|| | | || \/ | / \ | \ | | +| | __ | | `---| |----`| \ / | / ^ \ | \| | +| | |_ | | | | | | |\/| | / /_\ \ | . ` | +| |__| | | | | | | | | | / _____ \ | |\ | + \______| |__| |__| |__| |__| /__/ \__\ |__| \__| + +""" # Função para exibir o uso correto do script def usage(): - print(i18n.t('main.usage.description', name=sys.argv[0])) + print(gitman) + print(i18n.t('main.usage.description')) for i in range(1, 9): new_line = 'line' + str(i) print(i18n.t('main.usage.'+ new_line)) @@ -54,6 +31,8 @@ def usage(): # Função principal do programa def app(): try: + i18nConfig() + # Verifica os parâmetros do script if len(sys.argv) == 1: usage() @@ -95,9 +74,14 @@ def app(): elif project_directory: projects_update(project_directory, ignored_dependencies, commit_message, base_directory) - except KeyboardInterrupt: - print(i18n.t('main.interrupted')) + except KeyboardInterrupt: + print(gitman) + print('\nGitman execution interrupted; exiting.') sys.exit(0) + except Exception as e: + print(f"Erro: {e}") + sys.exit(1) + if __name__ == "__main__": app() diff --git a/translations/check_outdated.en.yml b/gitman/translations/check_outdated.en.yml similarity index 100% rename from translations/check_outdated.en.yml rename to gitman/translations/check_outdated.en.yml diff --git a/translations/check_outdated.pt.yml b/gitman/translations/check_outdated.pt.yml similarity index 100% rename from translations/check_outdated.pt.yml rename to gitman/translations/check_outdated.pt.yml diff --git a/translations/check_status.en.yml b/gitman/translations/check_status.en.yml similarity index 100% rename from translations/check_status.en.yml rename to gitman/translations/check_status.en.yml diff --git a/translations/check_status.pt.yml b/gitman/translations/check_status.pt.yml similarity index 100% rename from translations/check_status.pt.yml rename to gitman/translations/check_status.pt.yml diff --git a/translations/comman.en.yml b/gitman/translations/comman.en.yml similarity index 100% rename from translations/comman.en.yml rename to gitman/translations/comman.en.yml diff --git a/translations/comman.pt.yml b/gitman/translations/comman.pt.yml similarity index 100% rename from translations/comman.pt.yml rename to gitman/translations/comman.pt.yml diff --git a/translations/main.en.yml b/gitman/translations/main.en.yml similarity index 80% rename from translations/main.en.yml rename to gitman/translations/main.en.yml index 6bd0783..612c186 100644 --- a/translations/main.en.yml +++ b/gitman/translations/main.en.yml @@ -1,6 +1,6 @@ en: usage: - description: "Usage: %{name} [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" + description: "Usage: gitman [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" line1: "-b Base directory where projects are located. (default: ~/Documents)" line2: "-u Updates the dependencies of the specified project directory." line3: " If multiple projects are provided, separate them with a comma." @@ -10,4 +10,3 @@ en: line7: "-n Runs npx npm-check-updates -u && npm install followed by a commit." line8: "-m Commit message to be used in updates. (optional)" line9: "-v, --version Shows the program version." - interrupted: "\nScript execution interrupted." diff --git a/translations/main.pt.yml b/gitman/translations/main.pt.yml similarity index 81% rename from translations/main.pt.yml rename to gitman/translations/main.pt.yml index 7a2d0ca..3f6d3d2 100644 --- a/translations/main.pt.yml +++ b/gitman/translations/main.pt.yml @@ -1,6 +1,6 @@ pt: usage: - description: "Uso: %{name} [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" + description: "Uso: gitman [-b ] [-u ] [-i ] [-a] [-g] [-n ] [-m ]" line1: "-b Diretório base onde os projetos estão localizados. (padrão: ~/Documents)" line2: "-u Atualiza as dependências do diretório de projeto especificado." line3: " Se múltiplos projetos forem fornecidos, separe-os por vírgula." @@ -10,4 +10,3 @@ pt: line7: "-n Roda npx npm-check-updates -u && npm install seguido de um commit." line8: "-m Mensagem de commit a ser usada nas atualizações. (opcional)" line9: "-v, --version Mostra a versão do programa." - interrupted: "\nExecução do script interrompida." diff --git a/translations/ncu_update.en.yml b/gitman/translations/ncu_update.en.yml similarity index 100% rename from translations/ncu_update.en.yml rename to gitman/translations/ncu_update.en.yml diff --git a/translations/ncu_update.pt.yml b/gitman/translations/ncu_update.pt.yml similarity index 100% rename from translations/ncu_update.pt.yml rename to gitman/translations/ncu_update.pt.yml diff --git a/translations/update.en.yml b/gitman/translations/update.en.yml similarity index 100% rename from translations/update.en.yml rename to gitman/translations/update.en.yml diff --git a/translations/update.pt.yml b/gitman/translations/update.pt.yml similarity index 100% rename from translations/update.pt.yml rename to gitman/translations/update.pt.yml