1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| import requests import subprocess import os import random import argparse from datetime import datetime
LOCAL_API_URL = "http://localhost:1188/translate" API_TOKEN = "your_access_token"
current_path = os.path.dirname(os.path.realpath(__file__))
OUTPUT_FILE = os.path.join(current_path, "book.txt")
SERVERS_FILE = "trans_server.txt" USE_LOCAL_ONLY = False
def update_txt_file(git_repo_path): git_repo_path = os.path.expanduser(git_repo_path) current_dir = os.getcwd() try: os.chdir(git_repo_path) subprocess.check_call(['git', 'pull']) except subprocess.CalledProcessError as e: print(f"Error occurred while updating txt file: {e}") except FileNotFoundError as e: print(f"Directory not found: {e}") finally: os.chdir(current_dir) def load_servers(): with open(SERVERS_FILE, 'r') as f: return [line.strip() for line in f if line.strip()]
def save_servers(servers): with open(SERVERS_FILE, 'w') as f: for server in servers: f.write(f"{server}\n")
def translate_text(text, source_lang, target_lang="ZH", current_server=None): if current_server: servers = [current_server] else: servers = [LOCAL_API_URL] + ([] if USE_LOCAL_ONLY else load_servers()) random.shuffle(servers)
headers = { "Content-Type": "application/json", "Authorization": f"Bearer {API_TOKEN}" } data = { "text": text, "source_lang": source_lang, "target_lang": target_lang }
for server in servers: try: response = requests.post(f"{server}/translate", json=data, headers=headers, timeout=10) response.raise_for_status() return response.json(), server except requests.exceptions.RequestException as e: print(f"Failed to connect to {server}: {e}") if server != LOCAL_API_URL and server in load_servers(): remove_unavailable_server(server) return None, None
def remove_unavailable_server(unavailable_server): servers = load_servers() if unavailable_server in servers: servers.remove(unavailable_server) save_servers(servers) print(f"Removed unavailable server {unavailable_server} from {SERVERS_FILE}")
def save_translation(original, translated, server): timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") with open(OUTPUT_FILE, "a", encoding="utf-8") as f: f.write(f"{original}\n") f.write(f"{translated}\n")
def main(source_lang):
git_repo_path = '~/python/gist-ip'
print("Welcome to the Terminal Translator!") print(f"Translating from {source_lang} to Chinese.") print("To finish input and translate, enter a blank line.") print("To exit, enter 'quit' or press Ctrl+C.") print(f"Using local service only: {'Yes' if USE_LOCAL_ONLY else 'No'}") print()
current_server = None
while True: lines = [] while True: try: line = input() if line.strip().lower() == 'quit': print("Thank you for using the Terminal Translator. Goodbye!") return if not line: break lines.append(line) except KeyboardInterrupt: print("\nThank you for using the Terminal Translator. Goodbye!") return
text = '\n'.join(lines).strip() if not text: continue
result, server = translate_text(text, source_lang, current_server=current_server) if result and "data" in result: translated = result["data"] print(f"\n{translated}\n") save_translation(text, translated, server) current_server = server else: print("Translation failed. Trying another server...") current_server = None result, server = translate_text(text, source_lang) if result and "data" in result: translated = result["data"] print(f"\n{translated}\n") save_translation(text, translated, server) current_server = server else: print("Translation failed. No available servers.")
if __name__ == "__main__": parser = argparse.ArgumentParser(description="Terminal Translator") parser.add_argument("--lang", default="AUTO", help="Source language (default: EN)") args = parser.parse_args() main(args.lang)
|