Имя: Пароль:
1C
1С v8
перевод слов
0 vip67
 
21.09.15
10:50
Всем привет!
есть задача перевести наименования в справочнике с одного языка на другой.
воспользовался этой функцией:
Функция глПеревод(исх,направление = "ru|uk") Экспорт
    
    Строка=Исх;
    fromLang="Ru";
    toLang ="Uk";
    
    Урл="http://translate.yandex.net/api/v1.5/tr/translate?lang=ru-uk&text=";+Строка;
    
    Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP");
    
    Попытка
        Соединение.open("GET", урл,0); //0 - синхронный (по другому 1с не умеет), 1 - асинхронный
    Исключение
        Сообщить("Ошибка обработки");
    КонецПопытки;
    Соединение.send();
    Сч=1;
    Пока (Соединение.readyState) <> 4   Цикл
        Сч=Сч+1;
        Если Сч=1000 Тогда
            Прервать;
        КонецЕсли;    
    КонецЦикла;
    ответ = Соединение.responseXML.text;
    Возврат ответ;
КонецФункции

но не работает - ответ - всегда пустая строка. Если вручную пользуюсь сервисом - то переводит,автоматом - нет. Помогите найти ошибку.
1 Fragster
 
гуру
21.09.15
10:53
2 vip67
 
21.09.15
10:54
(1) это что?
3 Fragster
 
гуру
21.09.15
10:55
(2) я как бы намекаю, что специально обученный сотрудник сделает это качественнее, чем робот. Ну и второй сотрудник, который потом результат первого будет проверять.
4 vip67
 
21.09.15
10:56
(3) а если позиций около 500?
5 Fragster
 
гуру
21.09.15
10:59
(4) меньше двух часов работы, не?
6 Chikko
 
21.09.15
11:09
Глянь сюда еще:
Внимание! Начиная с версии 1.5 доступ ко всем методам API осуществляется по ключу.
7 Nuobu
 
21.09.15
11:27
(0) Немного переделал твою ф-ю.

Функция глПеревод(исх,направление = "ru-uk") Экспорт
    
    Строка=Исх;
    
    Урл="http://translate.yandex.net/api/v1.5/tr/translate?lang=ru-uk&text=";+Строка;
    
    Урл = "https://translate.yandex.net/api/v1.5/tr/translate?key="; + Ключ + "&text=" + Строка + "&lang=" + направление;
    
    Соединение = ПолучитьCOMОбъект("","Microsoft.XMLHTTP");

У меня взлетело, только кодировка чуть лагает.
Обрати внимание на рыску и на ключ.
8 Nuobu
 
21.09.15
11:28
9 vip67
 
21.09.15
11:51
(7) спс! счас попробую, ключ - это что? и чему равно направление?
10 vip67
 
21.09.15
11:53
а... почитал, понял!
11 vip67
 
21.09.15
12:00
(8) с ключем разобрался, а где рыска?
12 Nuobu
 
21.09.15
12:02
(11) В направлении))
У тебя косая, а у меня - рыска.
Посмотри самую первую строку.

Функция глПеревод(исх,направление = "ru-uk") Экспорт
13 vip67
 
21.09.15
12:05
это я исправил, но опять возвращает пустую строку :(
и ключ получил...
14 vip67
 
21.09.15
12:07
хотя, нет, брешу, возвращает не пустую строку, а аброкадабру, че с кодировкой делать-то?
15 vip67
 
21.09.15
12:19
какая кодировка возвращается?
16 Nuobu
 
21.09.15
12:29
(15) Написано, что UTF-8.
Только что тестил, с английского на русский нормально переводит.
Как перевести с UTF-8 на Виндоус-1251 пока не знаю.
17 Nuobu
 
21.09.15
12:58
(15) Нашел!!!

Когда передаётся английский текст, то он нормально прописывается в путь по урл. Поэтому перевод с английского на русский нормально отображается.

Когда же прописывается русский текст, то он неадекватно отображается для Яндекса.

Я восопользовался этой ссылкой: http://catalog.mista.ru/public/70330/

Там есть код, который переводит строку, которую нужно перевести с русского еще куда-то в УРЛ код:

Функция ПреобразованиеСтрокуВURL(Строка="")
    ScrCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
    ScrCtrl.Language="JScript";
    Сообщение = ScrCtrl.eval("var uri='"+Строка+"'; encodeURI(uri);") ;
    Возврат Сообщение;
КонецФункции

И вместо
Строка=Исх;
Написал
Строка=ПреобразованиеСтрокуВURL(Исх);

И взлетело!))
18 vip67
 
22.09.15
10:00
спс! счас попробую!
19 vip67
 
22.09.15
10:06
Да! взлетело!
СПС!СПС!СПС!
20 Nuobu
 
22.09.15
10:07
(19) Не за что, самому было интересно, как оно работает.
21 Fragster
 
гуру
22.09.15
11:05
Глобальный контекст.КодироватьСтроку (Global context.EncodeString)
Глобальный контекст (Global context)
КодироватьСтроку (EncodeString)
Синтаксис:

КодироватьСтроку(<Строка>, <СпособКодированияСтроки>, <КодировкаСтроки>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Кодируемая строка.
<СпособКодированияСтроки> (обязательный)

Тип: СпособКодированияСтроки.
Способ кодирования строки.
<КодировкаСтроки> (необязательный)

Тип: Строка.
Кодировка, в которую преобразуется строка перед кодированием.
Значение по умолчанию: UTF8.
Возвращаемое значение:

Тип: Строка.

Описание:

Кодирует строку в соответствии с выбранным способом кодирования.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
Пример:

Стр1 = КодироватьСтроку("http://tools.ietf.org/папка/rfc2822&quot;,
                СпособКодированияСтроки.КодировкаURL);
Стр2 = КодироватьСтроку("http://tools.ietf.org/папка/rfc2822&quot;,
                СпособКодированияСтроки.URLВКодировкеURL);
Стр3 = РаскодироватьСтроку(
                "wiki:Шар&quot;,
                СпособКодированияСтроки.КодировкаURL);

Сообщить(Стр1);
Сообщить(РаскодироватьСтроку(Стр1,
                СпособКодированияСтроки.КодировкаURL));
Сообщить(Стр2);
Сообщить(РаскодироватьСтроку(Стр2,
                СпособКодированияСтроки.КодировкаURL));
Сообщить(Стр3);
Сообщить(КодироватьСтроку(Стр3,
                СпособКодированияСтроки.URLВКодировкеURL));


См. также:

СпособКодированияСтроки
Глобальный контекст, метод РаскодироватьСтроку

--------------------------------------------------------------------------------

     Методическая информация
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан