Exemplo n.º 1
0
def detect_and_translate_text(text, user_language_pair, forced_language):

    if text == '':
        return errors.wrong_text_error

    if forced_language:
        if forced_language in localization.AVAILABLE_LANGUAGES_LIST.keys():
            detected_language = user_language_pair[:2]
        else:
            return errors.unknown_forced_language
    else:
        detected_language = detect_language(text)

        if utils.is_response_failed(detected_language):
            return detected_language

        if detected_language in localization.CYRILLIC_LANGUAGES_LIST:
            detected_language = 'ru'

    language_pair = get_language_pair(detected_language, user_language_pair)

    if utils.is_response_failed(language_pair):
        return language_pair

    translated_text = translate_text(language_pair, text)

    if utils.is_response_failed(translated_text):
        return translated_text

    return {'language': detected_language, 'translation': translated_text}
Exemplo n.º 2
0
def refresh_abbyy_api_token():

    new_token = get_abbyy_api_token()

    if utils.is_response_failed(new_token):
        logger.critical(new_token['error'])
    else:
        config.ABBYY_API_TOKEN = new_token

        logger.info('Токен успешно обновлен')
Exemplo n.º 3
0
    def google(self, text):
        url = GOOGLE_BASIC_URL + '/detect'
        url_params = ({'key': config.GOOGLE_API_KEY})
        payload = ({
            'q': [text],
            })
        headers = {
            'Content-Type': 'application/json',
            }

        response = utils.send_request('POST', url, url_params, headers, payload)

        if utils.is_response_failed(response):
            return response

        return ParseLanguage.google(self, response.text)
Exemplo n.º 4
0
    def yandex(self, text):
        url = YANDEX_BASIC_URL + '/detect'
        payload = ({
            'folder_id': config.YANDEX_FOLDER_ID,
            'languageCodeHints': ['ru', 'en'],
            'text': text,
            })
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Api-Key {config.YANDEX_API_TOKEN}',
            }

        response = utils.send_request('POST', url, '', headers, payload)

        if utils.is_response_failed(response):
            return response

        return ParseLanguage.yandex(self, response.text)
Exemplo n.º 5
0
    def yandex(self, language_pair, text):
        url = YANDEX_BASIC_URL + '/translate'
        payload = ({
            'folder_id': config.YANDEX_FOLDER_ID,
            'texts': [text],
            'targetLanguageCode': language_pair[0],
            'sourceLanguageCode': language_pair[1],
            })
        headers = {
            'Content-Type': 'application/json',
            'Authorization': f'Api-Key {config.YANDEX_API_TOKEN}',
            }

        response = utils.send_request('POST', url, '', headers, payload)

        if utils.is_response_failed(response):
            return response

        return ParseTranslation.yandex(self, response.text)
Exemplo n.º 6
0
    def google(self, language_pair, text):

        url = GOOGLE_BASIC_URL
        url_params = ({'key': config.GOOGLE_API_KEY})
        payload = ({
            'q': [text],
            'target': language_pair[0],
            'source': language_pair[1],
            'format': 'text',
            })
        headers = {
            'Content-Type': 'application/json',
            }

        response = utils.send_request('POST', url, url_params, headers, payload)

        if utils.is_response_failed(response):
            return response

        return ParseTranslation.google(self, response.text)
Exemplo n.º 7
0
async def new_word(event):
    sender = await event.get_sender()

    user_languages = db_connector.get_selected_language_pair(sender.id)

    entered_text = event.text

    forced_language = None

    if re.search(forced_language_pattern, entered_text):
        forced_language = entered_text[:2].lower()
        user_languages = f'{forced_language}-ru'
        entered_text = entered_text[3:]

    translated_text = detect_and_translate_text(
        entered_text,
        user_languages,
        forced_language,
    )

    translation_result = ''

    if utils.is_response_failed(translated_text):
        translation_result = translated_text['error']
    else:
        translation_result = translated_text['translation']

        utils.increase_translation_counters(sender.id, len(entered_text))

        if config.IS_ADD_TO_DICTIONARY == 'true' and utils.is_single_word(
                entered_text):
            db_connector.add_word_to_dictionary(
                sender.id,
                translated_text['language'],
                entered_text,
            )

    await event.respond(translation_result)