Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/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 <lang> Set the language to translate from.
- .to <lang> 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 <lang_code>")
- else:
- from_code = args[1]
- elif cmd == "to":
- if len(args) == 1:
- print("Usage: .to <lang_code>")
- 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()
Advertisement
Add Comment
Please, Sign In to add comment