greek_lang/cli/translate.py
2025-08-10 12:29:39 +03:00

48 lines
1.5 KiB
Python

import asyncio
import click
from greek_lang.container import init_main_container
from greek_lang.languages import LanguageEnum
from greek_lang.translator import translate
async def _translate(word: str, source_code: str, target_code: str) -> None:
try:
source_lang = LanguageEnum(source_code.lower())
target_lang = LanguageEnum(target_code.lower())
except KeyError as exc:
raise click.BadParameter(f"Unsupported language code: {exc.args[0]}") from exc
async with init_main_container():
result = await translate(word, source_lang, target_lang=target_lang)
click.echo(result)
@click.command(help="Перевод слова между языками библиотеки greek_lang.")
@click.argument("word")
@click.option(
"-s",
"--source",
"source_code",
default="el",
show_default=True,
type=click.Choice([lang.name for lang in LanguageEnum], case_sensitive=False),
help="Код исходного языка (ISO-639-1, как в LanguageEnum).",
)
@click.option(
"-t",
"--target",
"target_code",
default="ru",
show_default=True,
type=click.Choice([lang.name for lang in LanguageEnum], case_sensitive=False),
help="Код языка перевода (ISO-639-1, как в LanguageEnum).",
)
def cli(word: str, source_code: str, target_code: str) -> None:
"""Обёртка, которая запускает асинхронный перевод через asyncio."""
asyncio.run(_translate(word, source_code, target_code))
if __name__ == "__main__":
cli()