#!/usr/bin/python3 """ Written by Joxean Koret in 2024 Public Domain """ import os import sys import argostranslate.package import argostranslate.translate try: import readline except ImportError: pass #------------------------------------------------------------------------------- def translate(from_code : str, to_code : str, text : str) -> str: # Download and install Argos Translate package if required argostranslate.package.update_package_index() available_packages = argostranslate.package.get_available_packages() try: package_to_install = next( filter( lambda x: x.from_code == from_code and x.to_code == to_code, available_packages ) ) argostranslate.package.install_from_path(package_to_install.download()) except StopIteration: pass except: print("Error:", sys.exc_info()[1]) # Translate translatedText = argostranslate.translate.translate(text, from_code, to_code) return translatedText #------------------------------------------------------------------------------- def show_help(): print("""Options: .quit/.exit Exit .from Set the language to translate from. .to Set the language to translate to. .list List the pair of supported languages to translate to/from. Anything else will be accumulated in a buffer until a single '.' character is typed in a line. Example: (es-fr) Hola! >> Qué tal? >> . 'Hola!\nQué tal?\n' Bonjour ! Ça va ? """) #------------------------------------------------------------------------------- def main(): from_code = "es" to_code = "fr" text = "" buf = "" prompt = f"({from_code}-{to_code}) " while 1: try: if buf == "": prompt = f"({from_code}-{to_code}) " else: prompt = ">> " command = input(prompt) except EOFError: break except KeyboardInterrupt: break command = command.strip(" ") if command == "": continue elif command == "?": show_help() continue elif len(command) > 1 and command.startswith("."): args = command[1:].split(" ") cmd = args[0].lower() if cmd in ["quit", "exit"]: break elif cmd == "from": if len(args) == 1: print("Usage: .from ") else: from_code = args[1] elif cmd == "to": if len(args) == 1: print("Usage: .to ") else: to_code = args[1] elif cmd == "list": pkgs = argostranslate.package.get_available_packages() print("\n".join(map(str, pkgs))) else: print(f"Unknown command '{command}'") show_help() continue elif command.startswith("!"): os.system(command[1:]) continue if command != ".": buf += command + "\n" continue ret = translate(from_code, to_code, buf) print(ret) buf = "" if __name__ == "__main__": main()