Макрос-переводчик
Обучим немецкому
языку по методу гестапо.
Работающие в иностранных компаниях сотрудники часто вынуждены готовить по два одинаковых отчета для отечественного и зарубежного своего начальства — на русском и английском языках. Цифры в этих отчетах, естественно, одинаковые, а меняются только подписи, заголовки и другой текст.
Такую задачу можно решить более изящно. Создаем новый лист в таком отчете и называем его «Словарь«. Выписываем на этот лист в любом порядке все слова, которые надо автоматически переводить. Для каждого языка добавляем новый столбец, например, так:
Потом переходим в редактор Visual Basic (меню Сервис — Макрос — Редактор Visual Basic), вставляем новый модуль (меню Insert — Module) и копируем туда текст вот этих двух макросов:
Sub Translate() Dim cell1 as Range, cell2 As Range Dim i as Long, Langs As Long Langs = 3 'количество языков перевода, включая русский For Each cell1 In ActiveSheet.Cells.SpecialCells(xlCellTypeConstants) For Each cell2 In Worksheets("Словарь").Cells.SpecialCells(xlCellTypeConstants) If cell1.Value = cell2.Value Then i = cell2.Column If i = Langs Then i = 1 Else i = i + 1 cell1.Value = Worksheets("Словарь").Cells(cell2.Row, i).Value GoTo 1 End If Next cell2 1: Next cell1 End Sub
Теперь можно вернуться на лист с отчетом и запустить макрос Translate через меню Сервис — Макрос — Макросы (Tools — Macro — Macros) или нажав ALT+F8. Все слова из вашего отчета, найденные в на листе Словарь, будут заменены на слова из соседней колонки, т.е. переведены на другой язык. Запуская макрос несколько раз, мы будем по кругу переводить наш отчет последовательно на русский-английский-немецкий-русский-английский-и т.д. Выглядеть это будет так:
Praktisch, nicht wahr?
Ссылки по теме
- Что такое макросы, куда вставлять код макроса на VBA, как их использовать
- Преобразование русского текста в транслит
Данная 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
Update: Improved For Each v In arr_Response
-iteration, allowing special charactors. Added mouse-cursor change, when translation is processing. Added an example on how to improve the translated output_string.
There are a majority of free translation API’s outthere, but none really seems to beat Googles Translation Service, GTS (in my opinion). As a result of Googles’ restrictions on the free GTS-usage, the best VBA-approach seems to be narrowed down to the IE.navigation — as Santosh’s answer also emphasizes.
Using this approach, causes some problematics. The IE-instans doesn’t know when the page is fully loaded, and IE.ReadyState is really not trusthworthy. Therefore the coder has to add «delays» using the Application.Wait
function. When using this function, you are just guessing how long it would take, before the page is fully loaded. In situations where the internet is really slow, this hardcoded time, might not be enough. The following code fixes this, with the ImprovedReadyState.
In situations where a sheet has different columns, and you want to add different translation into every cell, I find the best approach where the translation-string is assigned to the ClipBoard, rather then calling a VBA-Function from within the formula. Thereby you can easily paste the translation, and modify it as a string.
How to use:
- Insert the procedures into a custom VBA-Module
- Change the 4 Const’s to your desire (see upper
TranslationText
) - Assign a shortkey to fire the
TranslationText
-procedure
- Activate the cell you want to translate. Required the first row to end with a language-tag. Etc. «_da», «_en», «_de». If you want another functionality, you change
ws_ActiveWS.Cells(r_ActiveCell.Row, r_InputRange.Column)
- Press the shortkey from 4. (etc. CTRL + SHIRT + S). See proces in your processbar (bottom of excel). Paste (CTRL+V) when translation done is displayed:
Option Explicit
'Description: Translates content, and put the translation into ClipBoard
'Required References: MIS (Microsoft Internet Control)
Sub TranslateText()
'Change Const's to your desire
Const INPUT_RANGE As String = "table_products[productname_da]"
Const INPUT_LANG As String = "da"
Const PROCESSBAR_INIT_TEXT As String = "Processing translation. Please wait... "
Const PROCESSBAR_DONE_TEXT As String = "Translation done. "
Dim ws_ActiveWS As Worksheet
Dim r_ActiveCell As Range, r_InputRange As Range
Dim s_InputStr As String, s_InputLang As String, s_OutputLang As String, arr_Response() As String, s_Translation As String
Dim o_IE As Object, o_MSForms_DataObject As Object
Dim i As Long
Dim v As Variant
Set o_MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Set ws_ActiveWS = ThisWorkbook.ActiveSheet
Set r_ActiveCell = ActiveCell
Set o_IE = CreateObject("InternetExplorer.Application")
Set r_InputRange = ws_ActiveWS.Range(INPUT_RANGE)
'Update statusbar ("Processing translation"), and change cursor
Application.Statusbar = PROCESSBAR_INIT_TEXT
Application.Cursor = xlWait
'Declare inputstring (The string you want to translate from)
s_InputStr = ws_ActiveWS.Cells(r_ActiveCell.Row, r_InputRange.Column)
'Find the output-language
s_OutputLang = Right(ws_ActiveWS.Cells(1, r_ActiveCell.Column).Value, 2)
'Navigate to translate.google.com
With o_IE
.Visible = False 'Run IE in background
.Navigate "http://translate.google.com/#" & INPUT_LANG & "/" _
& s_OutputLang & "/" & s_InputStr
'Call improved IE.ReadyState
Do
ImprovedReadyState
Loop Until Not .Busy
'Split the responseText from Google
arr_Response = Split(.Document.getElementById("result_box").innerHTML, "<span class")
'Remove html from response, and construct full-translation-string
For Each v In arr_Response
s_Translation = s_Translation & Replace(v, "<span>", "")
s_Translation = Replace(s_Translation, "</span>", "")
s_Translation = Replace(s_Translation, """", "")
s_Translation = Replace(s_Translation, "=hps>", "")
s_Translation = Replace(s_Translation, "=atn>", "")
s_Translation = Replace(s_Translation, "=hps atn>", "")
'Improve translation.
'This could etc. be moved to seperate sheets (containing every language), and make the lookup in a dynamic table/sheet. Futurely it'd be possible to hook on the changeevent, and automatically improve the translation-algoritmen.
'If Google can't translate the etc. the word "Lys", you can extend the translation, with an auto correction. This example shows to autocorrect the word "Lys" -> "ljus".
If (s_OutputLang = "sv") Then
s_Translation = Replace(s_Translation, "lys", "ljus")
End if
Next v
'Put Translation into Clipboard
o_MSForms_DataObject.SetText s_Translation
o_MSForms_DataObject.PutInClipboard
If (s_Translation <> vbNullString) Then
'Put Translation into Clipboard
o_MSForms_DataObject.SetText s_Translation
o_MSForms_DataObject.PutInClipboard
'Update statusbar ("Translation done"). If the input_string is above 70 chars (which is roughly the limitation in processbar), then cut the string, and extend with "...".
Application.Statusbar = PROCESSBAR_DONE_TEXT & """" & IIf(Len(s_InputStr) < 70, s_InputStr, Mid(s_InputStr, 1, 70) & "...") & """"
Else
'Update statusbar ("Error")
Application.Statusbar = PROCESSBAR_ERROR_TEXT
End If
'Cleanup
.Quit
'Change cursor back to default
Application.Cursor = xlDefault
Set o_MSForms_DataObject = Nothing
Set ws_ActiveWS = Nothing
Set r_ActiveCell = Nothing
Set o_IE = Nothing
End With
End Sub
Sub ImprovedReadyState()
Dim si_PauseTime As Single: si_PauseTime = 1 'Set duration
Dim si_Start As Single: si_Start = Timer 'Set start-time
Dim si_Finish As Single 'Set end-time
Dim si_TotalTime As Single 'Calculate total time.
Do While Timer < (si_Start + si_PauseTime)
DoEvents
Loop
si_Finish = Timer
si_TotalTime = (si_Finish - si_Start)
End Sub
Хитрости »
7 Сентябрь 2013 101530 просмотров
Внимание: периодически 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
ссылки
статистика
- Перевод в 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 и переводите любые объемы текста на нужный вам язык!