1C перекладач текстів через API Microsoft (Bing)
Завдання дуже просте, треба по базі 1С по російським описам створити українські, при цьому зберегти html розмітку в тексті. Вибір був між Google та Bing. С першим працював багато стосовно карт та маршрутів, с другим не працював, тому спочатку планував робити саме на google. Але почитавши опис обох API зрозумів що у Microsoft описано набагато зрозуміліше плюс було цікаво з ним попрацювати. А ще виявилось, що у microsoft крім перекладача є ще дуже багато цікавих API функцій, тому познайомитись треба обов’язково)
Перше що треба зробити це отримати ключ для доступу, зробити це можна тут –
https://azure.microsoft.com/ru-ru/services/cognitive-services/translator-text-api/
В принципі там все зрозуміло, тому зупинятись на цьому не буду.
А далі робимо отримання перекладу з 1С.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
//Ваш ключ доступу (в прикладі ключ не вірний) AppID="a49c18sdsfd045aadfwaf9ac15qwd146"; //Текст який будемо перекладати СтрокаПеревода = "Проверка перевода текста."; //з якого та на який язик перекладаємо. //якщо не вказати з якого, система буде його визначати автоматично fromLang="ru"; toLang ="uk" //Формуємо лінк на який будемо відправляти запит //Якщо в тексті є теги HTML, обов'язково додаємо параметр &textType=html, інакше переклад буде некоректний Урл = "api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=" + fromLang+ "&to=" + toLang + "&textType=html" ; //Тепер треба текст перекладу підготувати у форматі JSON //В 1С 8.3 найпростіше це зробити внутрішніми засобами //Якщо треба переводити декілька текстів додаємо їх як елементи масива. СтруктураЗапроса= Новый Структура; СтруктураЗапроса.Вставить("Text", СтрокаПеревода); МассивТекстов = Новый Массив; МассивТекстов.Добавить(СтруктураЗапроса); //Отримуємо json, функція є нижче ТексЗапроса = ПолучитьСтрокуJSONПоСтруктуреВыгрузки(МассивТекстов); //Формуємо і відправляємо запит на переклад HTTPЗапрос = Новый HTTPЗапрос(""); HTTPЗапрос.Заголовки.Вставить("Content-Type","application/json"); HTTPЗапрос.Заголовки.Вставить("charset","UTF-8"); HTTPЗапрос.Заголовки.Вставить("Ocp-Apim-Subscription-Key",AppID); HTTPЗапрос.УстановитьТелоИзСтроки(ТексЗапроса, "UTF-8"); HTTPСоединение = Новый HTTPСоединение(Урл,,,,,,Новый ЗащищенноеСоединениеOpenSSL); HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос); //Отримуємо відповідь, якщо все вірно конвертуємо відповідь сервера і отримуємо масив з перекладеними текстами МассивОтвета = Неопределено; Попытка ПрочитатьJSONВСтруктуру(HTTPОтвет.ПолучитьТелоКакСтроку(), МассивОтвета); Исключение МассивОтвета = Неопределено; КонецПопытки; //Ми відправляємо 1 текст тому одразу його отримаємо з першого рядку масива. //Якщо декілька текстів тоді треба додати перебір масиву. Если НЕ МассивОтвета = Неопределено И МассивОтвета.Количество() Тогда Строка1 = МассивОтвета.получить(0).translations.Получить(0); РезультатПеревода = Строка1.text; Иначе РезультатПеревода = Неопределено; КонецЕсли; Сообщить(РезультатПеревода ); //Функція конвертації структури в JSON Функция ПолучитьСтрокуJSONПоСтруктуреВыгрузки(СтруктураВыгрузки) Экспорт НастройкиСериализации = Новый НастройкиСериализацииJSON; НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO; НастройкиСериализации.СериализовыватьМассивыКакОбъекты = Ложь; ПараметрыJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ПроверятьСтруктуру = Истина; ЗаписьJSON.УстановитьСтроку(ПараметрыJSON); ЗаписатьJSON(ЗаписьJSON, СтруктураВыгрузки, НастройкиСериализации); СтрокаJSON = ЗаписьJSON.Закрыть(); Возврат СтрокаJSON; КонецФункции //Функція читання json в структуру Процедура ПрочитатьJSONВСтруктуру(СтрокаJSON, СтруктураДанных) ЧтениеJSON = Новый ЧтениеJSON; ЧтениеJSON.УстановитьСтроку(СтрокаJSON); СтруктураДанных = ПрочитатьJSON(ЧтениеJSON); КонецПроцедуры |
Це все, далі це можна використовувати переклад вже там де потрібно.
Детальний опис всіх параметрів запиту на переклад –
https://docs.microsoft.com/ru-ru/azure/cognitive-services/Translator/reference/v3-0-translate
Выражаю благодарность автору!
При запросе в данном виде массив возвращается с ошибкой “401000 The request is not authorized because credentials are missing or invalid.”. Видимо что-то изменилось с момента публикации. Решается добавлением региона в заголовок запроса (в моем случае AppRegion=”westeurope”; HTTPЗапрос.Заголовки.Вставить(“Ocp-Apim-Subscription-Region”,AppRegion);).