Попался мне недавно один очень интересный запрос. Нужно переводить большое количество html-страниц, массово, каким-то скриптом. Основная проблема, что кроме контента некоторые данные для перевода находятся внутри тегов. Пожелание было в том, чтобы не использовать google api.
Много проверил модулей, без google api сложно. Либо сами библиотеки завязаны на нем, либо переводит часть. Поэтому использовал апи от гугл. Сам скрипт несложный, но подготовка занимает время и вызывает вопросы.
Как я писал, больше всего проблем вызывает подготовка. Нужно на сайте гугл создать проект, разрешить перевод по апи, сохранить файл с правами доступа. Инструкция есть на сайте https://cloud.google.com/translate/docs/setup , опишу свои действия пошагово.
Дальше нам нужно установить google cloud SDK на Ваш компьютер.
(New-Object Net.WebClient).DownloadFile("https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe", "$env:Temp\GoogleCloudSDKInstaller.exe") & $env:Temp\GoogleCloudSDKInstaller.exe
Буден скачан и запустится Установщик Google Cloud SDK.
Обычно тут не возникает уже никаких проблем. Конечно, такой путь, можно и запутаться. Я пользовался исключительно документацией от гугл.
Дальше в ход идет сам скрипт на python.
Особенностью запроса было еще то, что переводить нужно на не обычный язык (английский или русский). Нужно было переводить файлы с русского на казахстанский. Хотя, в принципе, гугл поддерживает очень много языков, а найти код страны не так и трудно.
Ставим через pip google-cloud-translate (для скрипта перевода) и google-cloud-storage (для доступа к cloud translation api).
pip install --upgrade google-cloud-translate pip install --upgrade google-cloud-storage
И пример кода. Комментарии на английском сохранил с документации, добавил свои на русском.
from google.cloud import translate # Подключаем модуль def translate_text(text, project_id): """Translating Text.""" client = translate.TranslationServiceClient.from_service_account_json( 'C:/Users/admino/Downloads/htmlpbdseo-2633gfb0f8.json') # Путь к ключу доступа google cloud api location = "global" parent = f"projects/{project_id}/locations/{location}" # Detail on supported types can be found here: # https://cloud.google.com/translate/docs/supported-formats response = client.translate_text( request={ "parent": parent, "contents": [text], "mime_type": "text/html", # mime types: text/plain, text/html "source_language_code": "ru-RU", # Язык с какого переводим, в примере русский "target_language_code": "kk", # Язык на какой переводим, в примере казахстанский } ) # Display the translation for each input text provided for translation in response.translations: # print("Translated text: {}".format(translation.translated_text)) # Если нужно вывести переведенный текст with open(file2trans+'_res.htm', 'a', encoding='utf-8') as ff: # Сохранение файла с переводом ff.write(translation.translated_text) file2trans = r'C:\Users\admin\Desktop\bdseo_translate.htm' # Файл для перевода with open(file2trans, 'r', encoding='utf-8') as fg: datas = fg.read() translate_text(datas, 93544427523) # Функция для перевода, datas - контент, 93544427523 - номер Вашего проекта
Протестировал скрипт 13.02.2021, работает. Пользуетесь — поблагодарите меня через форму справа «На развитие блога bdseo.ru«. Мне будет очень приятно.
Главный плюс такого решения — оно решало мои задачи (и запрос). Переводило контент, переводило данные в тегах (title=, alt=). Но было несколько нюансов. Не переводило некоторые тексты в meta тегах в head-блоке; а также часть html-комментариев, например:
<!--Текст, который иногда не переводило-->
Возможно, это зависит от языков перевода. Бывают нюансы, как же без них, дополнительная проверка файлов не помешает.
Что касается перевода текстов подобным образом. Если это небольшие части контента, есть другие решения. Это контент html страницы — все зависит от размера текста. Когда текста на тысячи или десятки тысяч символов, то гугл может возвращать ошибку что слишком большой объем. С текстом («mime_type»: «text/plain») такое часто, а с html-файлами ошибку по лимиту не встречал.
При большом количестве файлов используем цикл. Есть вопросы — пишем в комментарии.
Очень много разговоров в последнее время за токен NOT. Много бирж будут делать листинг токена,…
Телеграм недавно запустил возможность стейкать (замораживать) USDT и получать за это их валюту TON. Очень…
Биржа криптовалют Binance проводит сейчас промо-акцию: новым пользователям дают ваучеры в сумме 110 долларов. Деньги…
Самый главный момент в работе с youtube - это получить ключ api через консоль разработчика…
Арендую сервер для небольшого проекта на python. И вот приходит мне уведомление, что за сутки…
Тестирую одну схему, и нужно на много видео наложить watermark. Решил делать через Python 3,…