Exemple #1
0
def load_languages():
    global __languages

    if __languages is None or len(__languages) == 0:
        __languages = translate.load_installed_languages()

    return __languages
Exemple #2
0
 def load_languages(self):
     self.languages = translate.load_installed_languages()
     language_names = tuple([language.name for language in self.languages])
     self.left_language_combo.clear()
     self.left_language_combo.addItems(language_names)
     if len(language_names) > 0: self.left_language_combo.setCurrentIndex(0)
     self.right_language_combo.clear()
     self.right_language_combo.addItems(language_names)
     if len(language_names) > 1: self.right_language_combo.setCurrentIndex(1)
     self.translate()
Exemple #3
0
def main():
    """Run Argos Translate command line interface"""
    # Parse args
    parser = argparse.ArgumentParser(description="Open-source offline translation.\n")
    parser.add_argument(
        "text",
        nargs="?",
        metavar="TEXT",
        help="The text to translate. Read from standard input if missing.",
    )
    parser.add_argument(
        "--from-lang",
        "-f",
        help="The code for the language to translate from (ISO 639-1)",
    )
    parser.add_argument(
        "--to-lang", "-t", help="The code for the language to translate to (ISO 639-1)"
    )
    args = parser.parse_args()

    from_and_to_lang_provided = args.from_lang is not None and args.to_lang is not None

    # Get text to translate
    if args.text:
        # argos-translate-cli --from-lang en --to-lang es "Text to translate"
        text_to_translate = args.text
    elif from_and_to_lang_provided:
        # echo "Text to translate" | argos-translate-cli --from-lang en --to-lang es
        text_to_translate = "".join(sys.stdin)
    else:
        # argos-translate
        parser.print_help()
        return

    # Perform translation
    if from_and_to_lang_provided:
        installed_languages = {
            lang.code: lang for lang in translate.load_installed_languages()
        }
        if args.from_lang not in installed_languages:
            parser.error("{!r} is not an installed language.".format(args.from_lang))
        if args.to_lang not in installed_languages:
            parser.error("{!r} is not an installed language.".format(args.to_lang))
        from_lang = installed_languages[args.from_lang]
        to_lang = installed_languages[args.to_lang]
        translation = from_lang.get_translation(to_lang)
        if translation is None:
            parser.error(
                f"No translation installed from {args.from_name} to {args.to_name}"
            )
    else:
        translation = translate.IdentityTranslation("")

    # Print translation
    print(translation.translate(text_to_translate))
Exemple #4
0
def check_and_install_models(force=False, load_only_lang_codes=None):
    if len(package.get_installed_packages()) < 2 or force:
        # Update package definitions from remote
        print("Updating language models")
        package.update_package_index()

        # Load available packages from local package index
        available_packages = package.load_available_packages()
        print("Found %s models" % len(available_packages))

        if load_only_lang_codes is not None:
            # load_only_lang_codes: List[str] (codes)
            # Ensure the user does not use any unavailable language code.
            unavailable_lang_codes = set(load_only_lang_codes)
            for pack in available_packages:
                unavailable_lang_codes -= {pack.from_code, pack.to_code}
            if unavailable_lang_codes:
                raise ValueError("Unavailable language codes: %s." %
                                 ",".join(sorted(unavailable_lang_codes)))
            # Keep only the packages that have both from_code and to_code in our list.
            available_packages = [
                pack for pack in available_packages
                if pack.from_code in load_only_lang_codes
                and pack.to_code in load_only_lang_codes
            ]
            if not available_packages:
                raise ValueError("no available package")
            print("Keep %s models" % len(available_packages))

        # Download and install all available packages
        for available_package in available_packages:
            print("Downloading %s (%s) ..." %
                  (available_package, available_package.package_version))
            download_path = available_package.download()
            package.install_from_path(download_path)

        # reload installed languages
        app.language.languages = translate.load_installed_languages()
        print("Loaded support for %s languages (%s models total)!" % (len(
            translate.load_installed_languages()), len(available_packages)))
def main():
    # Parse args
    parser = argparse.ArgumentParser()
    parser.add_argument('text', nargs='?', help='The text to translate')
    parser.add_argument(
        '--from-lang',
        help='The code for the language to translate from (ISO 639-1)')
    parser.add_argument(
        '--to-lang',
        help='The code for the language to translate to (ISO 639-1)')
    args = parser.parse_args()

    from_and_to_lang_provided = args.from_lang != None and args.to_lang != None

    # Get text to translate
    if args.text:
        # argos-translate-cli --from-lang en --to-lang es "Text to translate"
        text_to_translate = args.text
    elif from_and_to_lang_provided:
        # echo "Text to translate" | argos-translate-cli --from-lang en --to-lang es
        text_to_translate = ''
        for line in sys.stdin:
            text_to_translate += line
    else:
        # argos-translate
        parser.print_help()
        return

    # Perform translation
    if from_and_to_lang_provided:
        installed_languages = translate.load_installed_languages()
        from_lang_index = None
        for i, lang in enumerate(installed_languages):
            if lang.code == args.from_lang:
                from_lang_index = i
                break
        to_lang_index = None
        for i, lang in enumerate(installed_languages):
            if lang.code == args.to_lang:
                to_lang_index = i
                break
        from_lang = installed_languages[from_lang_index]
        to_lang = installed_languages[to_lang_index]
        translation = from_lang.get_translation(to_lang)
        if translation == None:
            sys.exit('No translation installed from {} to {}'.format(
                args.from_name, args.to_name))
    else:
        translation = translate.IdentityTranslation('')

    # Print translation
    print(translation.translate(text_to_translate))
Exemple #6
0
def check_and_install_models(force=False):
    if len(package.get_installed_packages()) < 2 or force:
        # Update package definitions from remote
        print("Updating language models")
        package.update_package_index()

        # Load available packages from local package index
        available_packages = package.load_available_packages()
        print("Found %s models" % len(available_packages))

        # Download and install all available packages
        for available_package in available_packages:
            print("Downloading %s (%s) ..." %
                  (available_package, available_package.package_version))
            download_path = available_package.download()
            package.install_from_path(download_path)

        # reload installed languages
        global languages
        languages = translate.load_installed_languages()
        print("Loaded support for %s languages (%s models total)!" % (len(
            translate.load_installed_languages()), len(available_packages)))
Exemple #7
0
def main():
    # Parse args
    parser = argparse.ArgumentParser(
        description='Open-source offline translation.\n')
    parser.add_argument('text', nargs='?', metavar='TEXT',
            help='The text to translate. Read from standard input if missing.')
    parser.add_argument('--from-lang', '-f',
            help='The code for the language to translate from (ISO 639-1)')
    parser.add_argument('--to-lang', '-t',
            help='The code for the language to translate to (ISO 639-1)')
    args = parser.parse_args()

    from_and_to_lang_provided = args.from_lang is not None and args.to_lang is not None

    # Get text to translate
    if args.text:
        # argos-translate-cli --from-lang en --to-lang es "Text to translate"
        text_to_translate = args.text
    elif from_and_to_lang_provided:
        # echo "Text to translate" | argos-translate-cli --from-lang en --to-lang es
        text_to_translate = ''.join(sys.stdin)
    else:
        # argos-translate
        parser.print_help()
        return

    # Perform translation
    if from_and_to_lang_provided:
        installed_languages = {
            lang.code: lang
            for lang in translate.load_installed_languages()}
        if args.from_lang not in installed_languages:
            parser.error('{!r} is not an installed language.'.format(
                args.from_lang))
        if args.to_lang not in installed_languages:
            parser.error('{!r} is not an installed language.'.format(
                args.to_lang))
        from_lang = installed_languages[args.from_lang]
        to_lang = installed_languages[args.to_lang]
        translation = from_lang.get_translation(to_lang)
        if translation is None:
            parser.error(f'No translation installed from {args.from_name} to {args.to_name}')
    else:
        translation = translate.IdentityTranslation('')

    # Print translation
    print(translation.translate(text_to_translate))
Exemple #8
0
def check_and_install_models(force=False):
    if os.path.exists(INSTALLED_MODELS_DIR) and not force:
        return

    if os.path.exists(INSTALLED_MODELS_DIR):
        print("Removing old %s" % INSTALLED_MODELS_DIR)
        shutil.rmtree(INSTALLED_MODELS_DIR)

    print("Creating %s" % INSTALLED_MODELS_DIR)
    os.makedirs(INSTALLED_MODELS_DIR, exist_ok=True)

    for f in glob.glob("models/**.argosmodel"):
        print("Installing %s..." % f)
        with zipfile.ZipFile(f, 'r') as zip:
            zip.extractall(path=INSTALLED_MODELS_DIR)

    print("Installed %s language models!" %
          (len(translate.load_installed_languages())))
Exemple #9
0
def main():
    # Parse args
    parser = argparse.ArgumentParser()
    parser.add_argument('text', help='The text to translate')
    parser.add_argument(
        '--from-lang',
        help='The code for the language to translate from (ISO 639-1)')
    parser.add_argument(
        '--to-lang',
        help='The code for the language to translate to (ISO 639-1)')
    args = parser.parse_args()

    # Perform translation
    if args.from_lang != None and args.to_lang != None:
        installed_languages = translate.load_installed_languages()
        from_lang_index = None
        for i, lang in enumerate(installed_languages):
            if lang.code == args.from_lang:
                from_lang_index = i
                break
        to_lang_index = None
        for i, lang in enumerate(installed_languages):
            if lang.code == args.to_lang:
                to_lang_index = i
                break
        from_lang = installed_languages[from_lang_index]
        to_lang = installed_languages[to_lang_index]
        translation = from_lang.get_translation(to_lang)
        if translation == None:
            sys.exit('No translation installed from {} to {}'.format(
                args.from_name, args.to_name))
    else:
        translation = translate.IdentityTranslation('')

    # Print translation
    print(translation.translate(args.text))
import string

from argostranslate import translate
from polyglot.detect.base import Detector, UnknownLanguage
from polyglot.transliteration.base import Transliterator

languages = translate.load_installed_languages()

__lang_codes = [l.code for l in languages]


def detect_languages(text):
    # detect batch processing
    if isinstance(text, list):
        is_batch = True
    else:
        is_batch = False
        text = [text]

    # get the candidates
    candidates = []
    for t in text:
        try:
            candidates.extend(Detector(t).languages)
        except UnknownLanguage:
            pass

    # total read bytes of the provided text
    read_bytes_total = sum(c.read_bytes for c in candidates)

    # only use candidates that are supported by argostranslate