- Перевод в Excel с помощью API Deepl
- Перевод текста через Google Translate
- Бесплатный перевод с Google Translate
- Платный API Google Translate
- Бесплатная Функция GTranslate
- Таблица обозначений языков для перевода Google
- F. A. Q.
Excel-переводчик пригодится всем, кто производит локализацию сайтов, интерфейсов приложений и прочих больших массивов текста.
В Excel есть встроенный переводчик от Microsoft, но со своими причудами. Например, перевести можно только одну ячейку, а что делать, когда их сотни?
Можно попытаться использовать возможности VBA для использования онлайн-переводчиков в Excel. Сервисы предоставляют API для подобных задач.
Deepl — это сервис перевода, основанный на глубоком (машинном) обучении и нейросетях. Нетрудно догадаться из названия (Deep Learning – глубокое обучение).
Deepl — заслуженно крутой переводчик, качество перевода точно не уступает и часто превосходит конкурентов (а это, на минуточку, Google, Microsoft и другие гиганты, чей бизнес изначально был построен на текстовом анализе). О том, что их перевод лучше остальных, основатели проекта не скромничают на своём сайте. И с ними нельзя не согласиться — качество переведенного текста и в самом деле практически не требует дополнительной редактуры.
Deepl популярен в среде SEO-специалистов, которые локализуют тексты с его помощью. Есть подозрения, что Google может пессимизировать тексты, переведенные им же самим, это еще один довод в пользу сторонних решений.
Deepl позволяет выбирать формальность перевода (в языках где это есть, например, в русском яркий пример Ты-Вы).
К сожалению, сейчас Deepl доступен далеко не во всех странах – нужна карточка, выпущенная банком стран EU, US, Японии и еще нескольких стран.
Но если вам нужен действительно качественный перевод – вас это вряд ли остановит.
Поддержка перевода с помощью бесплатного и платного API Deepl появилась в !SEMTools 17 февраля 2023г.
Перевод текста через Google Translate
Google Translate — замечательный продукт. Перевод с его помощью довольно качественный и при этом моментальный. Но у веб-интерфейса есть свои недостатки. Например, ограничения по количеству знаков.
А что, если бы можно было пользоваться Google Translate прямо в Excel?
Это было бы просто замечательно! Поэтому я и реализовал в !SEMTools функции и процедуры для перевода текста на популярные языки.
Бесплатный перевод с Google Translate
Использовать процедуры несколько удобнее, чем функции, т.к. все действия осуществляются парой кликов мыши. Доступен перевод с русского на 6 популярных языков и обратно. Здесь используется бесплатная веб-версия переводчика, подходит для перевода небольших объемов текста.
Для редких случаев перевода с иностранного на иностранный можно воспользоваться отдельной процедурой с выбором языка. Она поддерживает выбор 12 наиболее популярных языков и доступна в полной версии !SEMTools.
Платный API Google Translate
У многих при использовании бесплатной версии переводчика возникают проблемы с превышением бесплатных лимитов. Разумеется, Google не готов абсолютно бесплатно делиться столь сложным в разработке и полезным инструментом, поэтому ограничивает “недобросовестное” использование бесплатной версии сервиса.
Альтернатива – это возможность пользоваться сервисом через платный API.
Но на текущий момент (2023 г.) Google предоставляет перевод первых 500.000 знаков бесплатно! Нужно только подключить платежный профиль, но первые 500.000 знаков деньги расходоваться не будут.
Для тех, кому нужно переводить многие сотни строк текста и многие тысячи знаков, инструмент будет очень полезен. Поддержка платного API доступна с версии 10.23.14 (февраль 2023 г.), только в полной версии надстройки.
Если вы еще не прописали ваш персональный API-токен, процедура уведомит вас о его отсутствии (и перевод, конечно же, не сработает).
Для активации токена в меню присутствует отдельная процедура:
После активации токена процедуры будут переводить текст в любых объемах, но будьте внимательны и следите за превышением начальной квоты в 500.000 знаков, и дальнейшим расходом средств (хотя расценки Google вполне скромные). Вся информация доступна на дашборде Google Cloud.
Как получить токен
Чтобы получить токен API Google Translate, вам потребуется:
- Зарегистрировать Google аккаунт
- Перейти в Google Cloud Console: https://console.cloud.google.com/apis/dashboard
- Создать там аккаунт и подключить биллинг (потребуется зарубежная карта)
- Активировать Cloud Translation API
- Найти токен на вкладке Credentials: https://console.cloud.google.com/apis/api/translate.googleapis.com/credentials
Бесплатная Функция GTranslate
Функция доступна всем бесплатно – нужно только скачать !SEMTools и подключить надстройку к вашему Excel.
Синтаксис функции аналогичен таковому в Google Spreadsheets:
=GTranslate(A1;"en";"ru")
Преимущество перед самими “гуглодоками” в том, что Spreadsheets зависнут и перестанут отдавать перевод раньше.
С функциями можно использовать любой язык из предложенных на сервисах. Используется “бесплатная” версия перевода, что означает небольшие лимиты на количество строк и знаков.
Таблица обозначений языков для перевода Google
Afrikaans | af | Galician | gl | Latin | la | Sesotho | st |
Albanian | sq | Georgian | ka | Latvian | lv | Shona | sn |
Amharic | am | German | de | Lithuanian | lt | Sindhi | sd |
Arabic | ar | Greek | el | Luxembourgish | lb | Sinhala (Sinhalese) | si |
Armenian | hy | Gujarati | gu | Macedonian | mk | Slovak | sk |
Azerbaijani | az | Haitian Creole | ht | Malagasy | mg | Slovenian | sl |
Basque | eu | Hausa | ha | Malay | ms | Somali | so |
Belarusian | be | Hawaiian | haw (ISO-639-2) | Malayalam | ml | Spanish | es |
Bengali | bn | Hebrew | he or iw | Maltese | mt | Sundanese | su |
Bosnian | bs | Hindi | hi | Maori | mi | Swahili | sw |
Bulgarian | bg | Hmong | hmn (ISO-639-2) | Marathi | mr | Swedish | sv |
Catalan | ca | Hungarian | hu | Mongolian | mn | Tagalog (Filipino) | tl |
Cebuano | ceb (ISO-639-2) | Icelandic | is | Myanmar (Burmese) | my | Tajik | tg |
Chinese (Simplified) | zh-CN or zh (BCP-47) | Igbo | ig | Nepali | ne | Tamil | ta |
Chinese (Traditional) | zh-TW (BCP-47) | Indonesian | id | Norwegian | no | Telugu | te |
Corsican | co | Irish | ga | Nyanja (Chichewa) | ny | Thai | th |
Croatian | hr | Italian | it | Pashto | ps | Turkish | tr |
Czech | cs | Japanese | ja | Persian | fa | Ukrainian | uk |
Danish | da | Javanese | jv | Polish | pl | Urdu | ur |
Dutch | nl | Kannada | kn | Portuguese (Portugal, Brazil) | pt | Uzbek | uz |
English | en | Kazakh | kk | Punjabi | pa | Vietnamese | vi |
Esperanto | eo | Khmer | km | Romanian | ro | Welsh | cy |
Estonian | et | Korean | ko | Russian | ru | Xhosa | xh |
Finnish | fi | Kurdish | ku | Samoan | sm | Yiddish | yi |
French | fr | Kyrgyz | ky | Scots Gaelic | gd | Yoruba | yo |
Frisian | fy | Lao | lo | Serbian | sr | Zulu | zu |
F. A. Q.
Можно ли сделать собственный переводчик в Excel?
Можно составить словарь слов и их аналогов на другом языке – по тому же принципу, как это сделано в моей процедуре лемматизации. Но пословный перевод редко получается корректным.
Например, фразовые глаголы в английском языке уже приносят страдания тем, кто их учит, т.к. два слова рядом переводятся совсем не так, как по отдельности.
Словоформы глаголов в русском языке зависят от рода субъекта, а в английском – нет.
Нужно переводить не только слова, но и фразы, определяя контекст и взаимоотношения слов. Более того, одни и те же сочетания могут по разному переводиться в зависимости от пунктуации – ее тоже нужно учитывать.
Все это делает задачу составления собственного переводчика очень сложной. Гораздо проще воспользоваться готовыми решениями.
Подходит ли бесплатный функционал для объемов в тысячи строк?
Нет. Если попытаться перевести сотни строк и тысячи-десятки тысяч слов одновременно, Google наложит временный бан на IP. Как правило, это несколько часов.
Для перевода в промышленных масштабах нужно использовать платный API.
Будет ли в !SEMTools включена поддержка других API (например, Deepl)?
Да, другие API также планируются.
Нужно перевести текст в Excel? Установите надстройку !SEMTools и переводите любые объемы текста на нужный вам язык!
Хитрости »
7 Сентябрь 2013 101498 просмотров
Внимание: периодически Google вводит ограничение и изменяет алгоритмы автоматического перевода (так же иногда для получения перевода необходимо вводить каптчу). Поэтому временами функция может не работать. Некоторое время назад можно было наблюдать это. Сейчас функция работает.
На днях проводил ревизию кодов и различных примеров в файлах и нашел довольно много интересного. В том числе функцию перевода текста из ячейки Excel на разные языки при помощи сервиса Google. Посмотрел и решил её переработать и оптимизировать, т.к. в том виде, в котором она была у меня она никуда не годилась: переводила коряво, т.к. Google поменял алгоритм в формат выходных данных. Плюс надо было решить вопрос некорректной замены различных символов внутри текста. Подозреваю, что и сейчас функция далеко не идеальна. Поэтому если у кого-то возникнут ошибки — пишите комментарии, попробуем разобраться.
Option Explicit '--------------------------------------------------------------------------------------- ' Procedure : GoogleTranslate ' DateTime : 04.09.2013 22:55 ' Author : The_Prist(Щербаков Дмитрий) ' http://www.excel-vba.ru ' Purpose : ' Функция переводит текст, используя сервис переводов Google Translate ' Аргументы: ' sText - текст для перевода. Непосредственно текст или ссылка на ячейку. ' sResLang - код языка, на который осуществлять перевод ' sSourceLang - код языка, с которого переводить. ' Если не указывать, Google автоматом определяет язык введенного текста ' Доступно 74 кода языков. '--------------------------------------------------------------------------------------- Dim objRegExp As Object Function GoogleTranslate(ByVal sText As String, ByVal sResLang As String, _ Optional ByVal sSourceLang As String = "") Dim sGoogleURL As String, sAllTxt As String, sTmpStr As String, sRes As String, sTextToTranslate As String Dim lByte As Long, alByteToEncode, li As Long Dim asTmp, lPos As Long 'раскомментировать при необходимости пересчета функции при любом изменении в книге 'Application.Volatile True If objRegExp Is Nothing Then Set objRegExp = CreateObject("VBScript.RegExp") With objRegExp .MultiLine = True: .ignorecase = True: .Global = True .Pattern = "[n;]" End With End If sTextToTranslate = Application.Trim(objRegExp.Replace(sText, " ")) With CreateObject("ADODB.Stream") .Charset = "utf-8": .Mode = 3: .Type = 2: .Open .WriteText sTextToTranslate .Flush: .Position = 0: .Type = 1: .Read 3 alByteToEncode = .Read(): .Close End With 'переводим текст в кодировку, понятную Google For li = 0 To UBound(alByteToEncode) lByte = alByteToEncode(li) Select Case lByte Case 32: sTmpStr = "+" Case 48 To 57, 65 To 90, 97 To 122: sTmpStr = Chr(alByteToEncode(li)) Case Else: sTmpStr = "%" & Hex(lByte) End Select sAllTxt = sAllTxt & sTmpStr Next li 'формируем ссылку для Google sGoogleURL = "http://translate.google.com.ua/translate_a/t?client=json&text=" & _ sAllTxt & "&hl=" & sResLang & "&sl=" & sSourceLang sGoogleURL = Replace(sGoogleURL, "", "/") '" 'получаем ответ от Google With CreateObject("Microsoft.XMLHTTP") .Open "GET", sGoogleURL, "False": .send If .statustext = "OK" Then sTmpStr = .responsetext 'отбираем только переведенный текст asTmp = Split(sTmpStr, "{""trans"":""") For li = LBound(asTmp) To UBound(asTmp) lPos = InStr(1, asTmp(li), """,""orig"":", 1) If lPos Then sRes = sRes & Mid(asTmp(li), 1, lPos - 1) Next li If sRes = "" Then sRes = "Не удалось перевести" End If End With GoogleTranslate = sRes End Function
Выложенный выше код является функцией пользователя для вызова из ячейки листа.
Синтаксис функции:
с английского на русский (в A1 записан текст на английском — Google автоматом определяет язык):
=GoogleTranslate(A1;»ru»)
с английского на русский — текст задан константой:
=GoogleTranslate(«translation»; «ru»)
sText — текст для перевода. Непосредственно текст или ссылка на ячейку.
sResLang — код языка, на который осуществлять перевод.
sSourceLang — Необязательный аргумент. Указывается код языка, с которого переводить. Если не указывать, Google автоматом определяет язык введенного текста.
Всего доступно 74 языка:
- en — английский
- ru — русский
- az — азербайджанский
- sq — албанский
- en — английский
- ar — арабский
- hy — армянский
- af — африкаанс
- eu — баскский
- be — белорусский
- bn — бенгальский
- bg — болгарский
- bs — боснийский
- cy — валлийский
- hu — венгерский
- vi — вьетнамский
- gl — галисийский
- nl — голландский
- el — греческий
- ka — грузинский
- gu — гуджарати
- da — датский
- iw — иврит
- yi — идиш
- id — индонезийский
- ga — ирландский
- is — исландский
- es — испанский
- it — итальянский
- kn — каннада
- ca — каталанский
- zh-TW — китайский (традиционный)
- zh-CN — китайский (упрощенный)
- ko — корейский
- ht — креольский (Гаити)
- km — кхмерский
- lo — лаосский
- la — латынь
- lv — латышский
- lt — литовский
- mk — македонский
- ms — малайский
- mt — мальтийский
- mr — маратхи
- de — немецкий
- no — норвежский
- fa — персидский
- pl — польский
- pt — португальский
- ro — румынский
- ru — русский
- ceb — себуанский
- sr — сербский
- sk — словацкий
- sl — словенский
- sw — суахили
- tl — тагальский
- th — тайский
- ta — тамильский
- te — телугу
- tr — турецкий
- uk — украинский
- ur — урду
- fi — финский
- fr — французский
- hi — хинди
- hmn — хмонг
- hr — хорватский
- cs — чешский
- sv — шведский
- eo — эсперанто
- et — эстонский
- jw — яванский
- ja — японский
Добавил функцию перевода, которая получает текст перевода через Internet Explorer. Получается медленнее и не у всех сможет работать исключительно потому, что IE капризный и очень чувствителен к тому, какая его версия на какой ОС установлена. Но это больше исключение — в подавляющем большинстве случаев работать должно без проблем:
Option Explicit '--------------------------------------------------------------------------------------- ' Procedure : GoogleTranslate_IE ' DateTime : 12.04.2018 22:55 ' Author : The_Prist(Щербаков Дмитрий) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' http://www.excel-vba.ru ' info@excel-vba.ru ' WebMoney - R298726502453; Яндекс.Деньги - 41001332272872 ' Purpose : ' Функция переводит текст, используя сервис переводов Google Translate ' Аргументы: ' sText - текст для перевода. Непосредственно текст или ссылка на ячейку. ' sResLang - код языка, на который осуществлять перевод ' sSourceLang - код языка, с которого переводить. ' Если не указывать, Google автоматом определяет язык введенного текста ' Доступно 74 кода языков. '--------------------------------------------------------------------------------------- Dim IE As Object Function GoogleTranslate_IE(ByVal sText As String, _ Optional ByVal sResLang As String = "en", _ Optional ByVal sSourceLang As String = "auto") As String Dim isIEOpen As Boolean 'подключаемся к InternetExplorer On Error Resume Next Set IE = GetObject(, "InternetExplorer.application") 'IE еще не запущен - запускаем If IE Is Nothing Then Set IE = CreateObject("InternetExplorer.application") 'делаем окно IE скрытым IE.Visible = False End If 'переходим на страницу перевода и указываем параметры IE.navigate "https://translate.google.com/#" & sSourceLang & "/" & sResLang & "/" & sText 'ждем отклика от IE Do While IE.Busy Or IE.readyState <> 4 DoEvents Loop 'получаем текст перевода GoogleTranslate_IE = IE.Document.getElementById("result_box").innerText 'если IE не был запущен до вызова функции - закрываем If Not isIEOpen Then IE.Quit Set IE = Nothing End If End Function
Функция будет работать быстрее, если перед переводом запустить InternetExplorer. Это заставит функцию использовать уже запущенный экземпляр IE, а не запускать для каждой ячейки новый(что отнимает немало времени).
Скачать пример:
Tips_Macro_GoogleTranslate.xls (53,5 KiB, 6 462 скачиваний)
Так же см.:
Транслит — Перевод с транслита и обратно
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика
Переводит текст с одного языка на другой.
Пример использования
GOOGLETRANSLATE("Hello World"; "en"; "es")
GOOGLETRANSLATE(A2; B2; C2)
GOOGLETRANSLATE(A2)
Синтаксис
GOOGLETRANSLATE(текст; [язык_оригинала; язык_перевода])
-
текст
– текст, который нужно перевести.- Значение параметра
текст
должно быть заключено в кавычки или представлять собой ссылку на ячейку, содержащую соответствующий текст.
- Значение параметра
-
язык_оригинала
– [ НЕОБЯЗАТЕЛЬНО –"auto"
по умолчанию ] – двухбуквенный код языка оригинала (например, «en» для английского языка, «ko» – для корейского, «auto» – для автоматического определения языка).- В случае, если параметр
язык_оригинала
опущен, язык_перевода также не должен применяться.
- В случае, если параметр
-
язык_перевода
– [ НЕОБЯЗАТЕЛЬНО – по умолчанию язык, установленный в операционной системе ] – двухбуквенный код языка перевода («en» для английского языка, «ja» – для японского).
См. также:
DETECTLANGUAGE
: Определяет язык указанного текста или текста в определенном диапазоне.
Примеры
Переводит текст в заданном диапазоне ячеек с одного языка на другой.
Эта информация оказалась полезной?
Как можно улучшить эту статью?
Google старается объединять свои сервисы, организуя работу функций одних в других. Так получилось и с Таблицами, где для использования доступны некоторые возможности фирменного переводчика. В рамках этой статьи я продемонстрирую их и покажу, как можно переводить содержимое ячеек на разные языки.
Получение двухбуквенного кода стран
Начну статью с разбора одной особенности. Для использования описанной ниже функции в Google Таблицах понадобится знать двухбуквенные коды стран (Россия – RU и так далее). Для этого вы можете открыть соответствующую страницу на Википедии и получить интересующую вас информацию.
Однако важно отметить, что некоторые названия Гугл берет не по системе ISO 3166-1, которая отображается первой в выдаче поисковика, и на официальном сайте у меня не получилось найти информацию о замене кодов. Путем перебора удалось выяснить, что нужно применить ISO 639-1, поэтому при проблеме с переводом на конкретные языки отыщите их коды в этом формате на Википедии или любом другом сайте. Об этом я еще расскажу в инструкции, чтобы у вас не возникло вопросов по данной теме.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Подписаться
Использование функции перевода текста в Google Таблицах
В первую очередь рассмотрим, как же используется функция перевода текста на другие языки. Давайте разберем ее синтаксис и действие, после чего вы самостоятельно сможете проверить ее работу в своей таблице.
-
Создайте диапазон с текстовыми данными, которые собираетесь переводить. Выделите для них пустой столбец справа, где будет отображаться переведенный вариант.
-
После этого объявите формулу =GOOGLETRANSLATE(A1;»RU»;»EN»), где A1 – ячейка с текстом для перевода, RU – язык оригинала, а EN – для перевода.
-
Нажмите Enter и ознакомьтесь с результатом. Растяните формулу, чтобы перевести все остальные слова (номера ячеек будут заменены автоматически).
-
Как видно, сайт успешно справился с переводом и показывает простые слова на другом языке.
Однако знайте, что Google Переводчик не всегда справляется со сложными словосочетаниями и чувствителен к ошибкам в словах. Всегда проверяйте важные документы на правильность перевода.
Расширение функции перевода текста
Выше было показано, как можно быстро перевести содержимое на конкретный язык, но иногда нужно получить результат сразу на нескольких языках. Процесс перевода можно ускорить, оптимизировав написание функции. Для этого создайте вспомогательную строку с двухбуквенными названиями стран так, как это показано на следующем изображении.
После этого выполните ряд простых действий:
-
Объявите функцию =GOOGLETRANSLATE() и укажите первую ячейку с текстом. Обязательно закрепите столбец, чтобы при растягивании функции не произошел случайный сдвиг. Для этого перед буквой ячейки поставьте знак $.
-
После этого напишите язык оригинала в кавычках.
-
В качестве языка для перевода укажите ячейку с уже готовым кодом и закрепите строку, поставив знак $ между буквой и цифрой.
-
Растяните формулу вправо и вниз. Дождитесь отображения результатов и убедитесь в том, что перевод выполнен правильно. Если вы задали не тот код, появится ошибка #ЗНАЧ!.
-
В случае успешного перевода все слова отображаются корректно.
Вот полная формула с закрепленными ячейками для удобного растягивания на неограниченное количество столбцов и строк: =GOOGLETRANSLATE($A2;»RU»;C$1). Соответственно, поменяйте язык оригинала и номера ячеек на свои.
Как уже было сказано выше, для корректного распознавания кодов нужно использовать систему обозначений ISO 639-1, иначе можно получить ошибку #ЗНАЧ!, что вы и видели на одном из предыдущих скриншотов. В остальном же никаких трудностей с переводом в Google Таблицах нет, и вы можете всегда обратиться к этой удобной функции.
В Google Таблицах есть занятная функция, позволяющая переводить текст прямо в ячейках:
В этой статье расскажу, как ей пользоваться и как автоматически определять язык текста в ячейке.
Синтаксис функции следующий:
GOOGLETRANSLATE(text,[source_language],[target_language])
text — это текст, который нужно переводить. Можно, конечно, взять текст в кавычки и записать прямо в формулу, а можно сослаться на ячейку, в которой он содержится.
[source_language] — язык, с которого мы переводим;
[target_language] — соответственно, язык, на который мы переводим.
Второй и третий аргументы задаются двухзначным кодом: es, fr, en, ru. Их тоже можно указать в самой функции, но можно брать из ячейки, а язык исходного текста и вовсе можно автоматически определять.
Обратите внимание, что оба аргумента необязательные — если их не указать, перевод будет осуществляться на английский. Язык исходного текста будет определяться автоматически:
А как быть, если мы все-таки хотим переводить не на английский, а на разные языки? И при этом не хотим каждый раз указывать язык исходника вручную?
Тут пригодится функция DETECTLANGUAGE. У нее единственный аргумент — текст, язык которого нужно определить:
Осталось ее «внедрить» в функцию TRANSLATE. Укажем справа от текста, на какие языки хотим переводить исходный текст (в столбце B). В столбец C введем формулу GOOGLETRANSLATE. Первым аргументом будет текст в столбце A, вторым — функция DETECTLANGUAGE, которая определит, с какого языка переводить, а третья — код языка из столбца B.
Как и с любой другой функцией, прелесть здесь в автоматизации. Можно быстро поменять текст или язык; быстро перевести одну фразу на 10 языков и так далее. Конечно, мы понимаем, что это текст онлайн-переводчика — качество будет соответствующим.
Quel merveilleux tableau!
Переводит содержимое указанной ячейки с одного языка на другой, используя онлайн-переводчик Google
Синтаксис
=Translate(Text; FromLang; ToLang)
где:
- Text – исходная ячейка с текстом для перевода
- FromLang – текстовый двухбуквенный код языка, с которого производится перевод (т.е. язык исходного текста), например «ru», «en», «es», «fr» и т.д.
- ToLang – текстовый двухбуквенный код языка, на который нужно перевести.
Подсмотреть необходимые коды языков можно на странице Google Переводчика в адресной строке после выбора нужных языков в форме:
Примечания
Естественно, данная функция требует подключения к интернету и при его отсутствии выдает ошибку.
При использовании в большом количестве ячеек одновременно, может вызывать замедление работы, т.к. будет выполнять много одновременных запросов. В этом случае рекомендуется заменять формулы на значения при помощи специальной вставки или инструмента В значения.
Полный список всех инструментов надстройки PLEX
Данная VBA функция позволяет перевести текст с любого языка на другой
Язык исходного текста можно не указывать — Google распознает его самостоятельно.
(т.е. вызовы res$ = Translate(txt$, «en», «ru») и res$ = Translate(txt$, «en») равнозначны)
Добавлено 17.10.2011
В данный момент функция не работает для большого числа запросов — Google недавно ввёл ограничение.
Решение для обхода этого ограничения сложное, потому пока мной не реализовано (не было необходимости)
Добавлено 07.03.2012
Исправленный вариант функции вы можете найти в конце статьи. (теперь снова можно выполнять автоматизированный перевод любого количества фраз на любые языки)
Алгоритм функции немного изменился — но это и не важно, главное, что перевод снова работает.
Пример использования перевода на листе Excel — во втором прикреплённом файле
Sub ПримерИспользованияФункцииПеревода() txt$ = "Привет! Это функция перевода текста на иностранный язык" res$ = Translate(txt$, "en", "ru") MsgBox "Результат перевода на английский:" & vbNewLine & res$, vbInformation, txt$ res$ = Translate(txt$, "de") MsgBox "Результат перевода на немецкий:" & vbNewLine & res$, vbInformation, txt$ End Sub
Список кодов доступных языков для перевода:
(используются в качестве параметров функции Translate)
ar — арабский; bg — болгарский; cs — чешский;
da — датский ; de — немецкий; el — греческий;
en — английский; es — испанский; fi — финский;
fr — французский; hi — хинди; hr — хорватский;
it — итальянский; ja — японский; ko — корейский;
nl — голландский; no — норвежский; pl — польский;
pt — португальский; ro — румынский; ru — русский;
sv — шведский; zh-cn — китайский упрощенный; zh-tw — китайский традиционный
Код функции перевода:
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, Optional ByVal sourceLanguageCode$ = "") ' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$ на язык resultLanguageCode$, ' используя сервис переводов Google Translate With CreateObject("ADODB.Stream") .Charset = "utf-8": .Mode = 3: .Type = 2: .Open .WriteText TextToBeTranslated: .Flush: .Position = 0 .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close End With For i = 0 To UBound(ByteArrayToEncode) iAsc = ByteArrayToEncode(i) Select Case iAsc Case 32: sTemp$ = "+" 'space Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i)) Case Else: sTemp$ = "%" & Hex(iAsc) End Select txt$ = txt$ & sTemp$ Next Set objhttp = CreateObject("MSXML2.ServerXMLHTTP") URL$ = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" & _ txt$ & "&langpair=" & sourceLanguageCode$ & "%7C" & resultLanguageCode$ objhttp.Open "GET", URL$, False objhttp.setTimeouts 1000000, 1000000, 1000000, 1000000: objhttp.send ("") Translate$ = objhttp.responseText Translate$ = Right(Translate$, Len(Translate$) - InStr(1, Translate$, "translatedText") - 16) Translate$ = Left(Left(Translate$, InStr(1, Translate$, Chr(34)) - 1), 255) Translate$ = Replace(Translate$, "quot;", Chr(39)) If Translate$ = " null, " Then Translate$ = "Не переведено" End Function
(добавлено позже)
Видоизменил функцию — теперь перевод снова работает
(пример использования — во втором прикреплённом файле)
Function Translate$(ByVal TextToBeTranslated$, ByVal resultLanguageCode$, _ Optional ByVal sourceLanguageCode$ = "") ' переводит текст TextToBeTranslated$ с языка sourceLanguageCode$ ' на язык resultLanguageCode$, используя сервис переводов Google Translate Application.Volatile True Set ADOStream = CreateObject("ADODB.Stream") With ADOStream .Charset = "utf-8": .Mode = 3: .Type = 2: .Open .WriteText TextToBeTranslated: .Flush: .Position = 0 .Type = 1: .Read 3: ByteArrayToEncode = .Read(): .Close End With For i = 0 To UBound(ByteArrayToEncode) iAsc = ByteArrayToEncode(i) Select Case iAsc ' переводим текст в кодировку, понятную Google Case 32: sTemp$ = "+" 'space Case 48 To 57, 65 To 90, 97 To 122: sTemp$ = Chr(ByteArrayToEncode(i)) Case Else: sTemp$ = "%" & Hex(iAsc) 'Chr(iAsc) End Select txt$ = txt$ & sTemp$ Next ' формируем ссылку, по которой Google выдаст нам файл с переводом URL$ = "http://translate.google.com.ua/translate_a/t?client=json&text=" & _ txt$ & "&hl=" & resultLanguageCode$ & "&sl=" & sourceLanguageCode$ Set XMLHTTP = CreateObject("Microsoft.XMLHTTP") ' скачиваем файл XMLHTTP.Open "GET", Replace(URL$, "", "/"), "False": XMLHTTP.send If XMLHTTP.statustext = "OK" Then LocalPath$ = Environ("TMP") & "google.txt" With ADOStream ' перекодировка файла .Type = 1: .Open: .Write XMLHTTP.responseBody .SaveToFile LocalPath$, 2 .Close: .Type = 2: .Charset = "utf-8": .Open: .LoadFromFile LocalPath$ ' загружаем данные из файла Translate$ = .ReadText ' считываем текст файла в переменную Translate$ End With On Error Resume Next ' вырезаем нужный текст из ответа Translate$ = Split(Translate$, """trans"":""")(1) Translate$ = Split(Translate$, """,""orig")(0) Translate$ = Replace(Translate$, "quot;", Chr(39)) If Translate$ = " null, " Then Translate$ = "Не переведено" End If Set XMLHTTP = Nothing: Set ADOStream = Nothing End Function