как изменять язык в Python (интерфейса) при помощи файла .config?
я пишу маленькую ОС на пайтон, используя библиотеки os
и json
(основные).
как сделать так, чтобы можно было менять язык и хранить его в файлах .config
?
к примеру, если пользователь выбирает английский язык, то интерфейс ОС меняется на английский язык.
вот мой код:
import os
import json
import random
import time
import keyboard
from colorama import Fore
from tqdm import tqdm
import hashlib
import keyboard as keyb
import math
import pygame
# Пример использования функции
def display_pixel_art():
art = """
__ __ _ ___ ____
| \/ | (_) / _ \ / __ \
| \ / | ___ _ __ _ ___ | | | | | | |
| |\/| |/ _ \| '_ \| |/ _ \| | | | | | |
| | | | (_) | | | | | __/| |_| | |__| |
|_| |_|\___/|_| |_|_|\___| \___/ \____/
"""
print(art)
def check_account():
if os.path.exists('data.json'):
with open('data.json', 'r') as file:
try:
accounts = json.load(file)
if not isinstance(accounts, list):
raise ValueError("Неверный формат данных")
except (json.JSONDecodeError, ValueError):
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print("Ошибка чтения файла данных. Создание нового аккаунта.")
accounts = []
create_account(accounts)
return
if not accounts:
create_account(accounts)
else:
print("Доступные аккаунты:")
for i, account in enumerate(accounts):
if isinstance(account, dict) and 'username' in account:
print(f"{i + 1}. {account['username']}")
else:
print(f"{i + 1}. Неверный формат аккаунта")
choice = int(input("Выберите номер аккаунта: ")) - 1
if 0 <= choice < len(accounts) and isinstance(accounts[choice], dict):
account_menu(accounts, choice)
else:
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print("❌ Неверный выбор.")
else:
create_account([])
def create_account(accounts):
print("Рабочие аккаунты не были найдены! Создайте новый аккаунт!")
username = input("Введите ваше имя пользователя: ")
password = input("Введите ваш пароль: ")
is_admin = input("Являетесь ли вы администратором? (да/нет): ").strip().lower() == 'да'
for i in tqdm(range(100), desc="Прогресс добавления аккаунта"):
time.sleep(0.1)
account = {'username': username, 'password': password, 'is_admin': is_admin}
accounts.append(account)
with open('data.json', 'w') as file:
json.dump(accounts, file)
print(f"Аккаунт создан. Добро пожаловать, {username}!")
def delete_account(accounts, index):
del accounts[index]
with open('data.json', 'w') as file:
json.dump(accounts, file)
print("Удаление аккаунта...")
for i in tqdm(range(100), desc="Прогресс удаления аккаунта..."):
time.sleep(0.1)
print("Аккаунт удален.")
def change_username(accounts, index):
new_username = input("Введите новое имя пользователя: ")
accounts[index]['username'] = new_username
with open('data.json', 'w') as file:
json.dump(accounts, file)
print(f"Имя пользователя изменено. Ваше имя теперь {new_username}")
def cmd_def(accounts=None):
print("введите комаду, пакет свойства, или help, чтобы узнать все команды_")
defend_help = input("")
if defend_help == "help" or "?":
print("весь функционал MC-DOS")
print("- DIR = вывести все пакеты устройств/файлы")
print("- DIR %файл% = вывести содержимое файла/пакета устройства")
print("- exit выход из MC-DOS")
print("- cd {файл} перейти к директории файла")
print("- help или ? = вывести справочник по MS-DOS")
print("- create_file = создать файл")
print("- delete_file = удалить файл")
if defend_help == "DIR":
list_files()
if defend_help == "exit":
print("выход из MC-DOS")
display_pixel_art()
if defend_help == create_file:
create_file()
if defend_help == "delete_file":
delete_file()
if defend_help == "create_accont":
create_account(accounts)
def explorer_file():
print("1. список файлов")
print("2. создать файл")
print("3. удалить файл")
print("4. открыть файл")
explorer_time = input("")
if explorer_time == "1":
list_files()
if explorer_time == "2":
create_file()
if explorer_time == "3":
delete_file()
if explorer_time == "4":
open_file()
def monii():
artfromaerica = """
__ __ _
| \/ | (_)
| \ / | ___ _ __ _ ___
| |\/| |/ _ \| '_ \| |/ _ |
| | | | (_) | | | | | __/
"""
time.sleep(10)
print("from community MONIE!")
time.sleep(1)
print("loading...")
time.sleep(10)
print("пожалуйста, дождитесь пока обнавляются файлы конфигурации и настроек.")
time.sleep(5)
def account_menu(accounts, index):
while True:
print("\nМеню аккаунта:")
print("1. Изменить имя пользователя")
print("2. Удалить аккаунт")
print("3. Выйти")
choice = input("Выберите действие: ")
if choice == '1':
change_username(accounts, index)
elif choice == '2':
delete_account(accounts, index)
break
elif choice == '3':
break
else:
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print("❌ Неверный выбор. Попробуйте снова.")
def list_files():
print("Список файлов в текущей директории:")
for file in os.listdir('.'):
if os.path.isfile(file):
print(f"- {file}")
def create_file():
while True:
filename = input("Введите имя файла для создания: ")
if os.path.exists(filename):
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print(f"❌ Файл с именем {filename} уже существует. Пожалуйста, выберите другое имя.")
else:
with open(filename, 'w') as file:
file.write("")
print(f"Файл {filename} создан.")
break
def delete_file():
filename = input("Введите имя файла для удаления: ")
if os.path.exists(filename):
if is_system_file(filename) and not is_admin():
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print(f"❌ ERORR: файл {filename} системный, и не может быть удален без прав администратора ")
else:
os.remove(filename)
print(f"Файл {filename} удален.")
else:
print(f"Файл {filename} не найден.")
def open_file():
filename = input("Введите имя файла для открытия: ")
if os.path.exists(filename):
with open(filename, 'r') as file:
content = file.read()
print(f"Содержимое файла {filename}:\n{content}")
else:
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print(f"⚠ Файл {filename} не найден.")
def is_system_file(filename):
system_files = ['data.json', 'account.json', "CMD_DATE.txt", "cmd.json.date.file"]
return filename in system_files
def is_admin():
if os.path.exists('data.json'):
with open('data.json', 'r') as file:
accounts = json.load(file)
for account in accounts:
if account.get('is_admin'):
return True
return False
def nah():
print("привет! Это настройки,")
print("1. аккаунт и безопасноть")
print("2. антивирус")
print("3. приложения")
print("4. обновления и улучшения")
print("5. язык и время")
print("6. настройки поиска")
print("7. игры")
print("8. конфидициальность")
print("9. память")
nastoechki = input("")
if nastoechki == "1":
print("настройки аккаунта:")
print("1. список аккаунтов")
print("2. изменить имя аккаунту")
one_pnct = input("")
if one_pnct == "1":
check_account()
elif one_pnct == "2":
change_username()
else:
print(f"ERROR FROM ACCOUNT.JSON : THE NAME {one_pnct} NOT DIFFEND")
if nastoechki == "2":
print("проверка обновления антивируса..")
time.sleep(20)
my_list = ["проверка прошла успешно, обновления не найденны.","скаченно новое дополнение для антивируса KL21.version21"]
random_element = random.choice(my_list)
print(random_element)
print("настройки антивируса:")
def report_menu():
print("on this OS the “rOOt_mode” will be launched in 40 seconds")
time.sleep(1)
print('launching the file "root.data')
print(Fore.BLUE + "No COMMANDS")
print("restart the file root.date_")
time.sleep(1)
print("The root menu from system Monie00. ")
print(Fore.LIGHTGREEN_EX + "this system is now ready for commands.")
print("1 launch the file systemROOTADMIN, or get new root updates")
power_of = input("")
if power_of == "1":
systemROOTADMIN()
if power_of == "power_off":
print("this feature is not yet available. please turn off your computer to exit RECOVERY MOD")
def systemROOTADMIN():
ROOT = 1
ROOT = True
print("please select the account to which ROOT rights will be installed, or UPDATE ROOT!")
print("check ROOT version..")
time.sleep(4)
print("exit from file: rebort.date")
time.sleep(1)
print("INF: please wait 60 seconds for monieOS to connect you to root rights. do not turn off the computer, as this may lead to bad consequences.")
print("ERROR: NO CC FILE ON OS")
time.sleep(1)
print("installation..")
time.sleep(1)
print("definition..")
time.sleep(1)
print("definition complete: file weighs about 1GB, file name: @%ROOTOSSTART%@")
time.sleep(1)
print("installation..")
time.sleep(2)
print("thank you for downloading ROOT rights from MONIE OS")
print("This OS is unlocked and cannot be trusted. Be careful!")
print("INF: turn off your computer after 20 seconds. OS and BIOS security check")
print(Fore.BLUE + "No COMMANDS")
print("the system checks the Date.json file and adds common files.")
time.sleep(5)
print(Fore.WHITE + "No COMMANDS")
print(Fore.RED + "ERROR: the system was unable to check the OS because ROOT rights were set. be careful with the OS!")
print("please restart yours OS")
def Wipe_Cache_Partition():
print("Do you agree that the entire OS cache will be deleted? (includes - deleting the update log, clearing recent actions, cache CMD cash, and system CASHE?")
print("- NO <---- no.index")
print("- NO <---- no.index")
print("- NO <---- no.index")
print("- NO <---- no.index")
print("- YES <--- index.go")
wipe_cash = input("")
if wipe_cash == "YES":
print(Fore.RED + "FULL DELETION OF THE CACHE CAN RESULT IN THE CONSEQUENCES OF DELETION OF IMPORTANT DATA IN APPLICATIONS!!!!!")
print("launch delete_cash.dmp")
time.sleep(1)
print("delete_cash.dmp is launched!")
time.sleep(12)
print("all cash to be delete! NO ERROR FROM TERMINAL")
if __name__ == "__main__":
display_pixel_art()
keyboard.add_hotkey('ctrl+del+m', report_menu)
keyboard.add_hotkey('alt + f4', display_pixel_art)
while True:
print("\nГлавное меню:")
print(Fore. LIGHTWHITE_EX + "1. Проверить аккаунт")
print("2. проводник")
print("3. CMD")
print("4. Отключить систему")
choice = input("Выберите действие: ")
if choice == '1':
check_account()
elif choice == '2':
explorer_file()
elif choice == '3':
cmd_def()
elif choice == "5":
nah()
elif choice == '4':
break
elif choice == "delete_cash":
Wipe_Cache_Partition()
elif choice == "version_mode":
print("версия ОС = LOLIPOP B1.12, версия ROOT MODE = 0.0.0.1, ")
else:
pygame.init()
pygame.mixer.music.load("Error.mp3")
pygame.mixer.music.play(0)
print("❌ Неверный выбор. Попробуйте снова.")
input("")
#version = B1.12, version ROOTS MODE = 0.0.0.1,debag mode = 0.0.0