Итак, позавчера Корпорация Добра все-таки закрыла свой бесплатный Translate API. Автор до последнего момента надеялся, что они образумятся и не станут уподобляться остальным так поступать. Поэтому не чесался и ничего не делал. Но вот гром грянул. И в CMS одного небольшого 3-х язычного проекта отвалился переводчик. Не страшно, но неприятно — раньше админ на форме редактирования контента 1 щелчком мыши переводил все поля еще на 2 языка. Переводчик я написал по своей милости, потратил на это минут 20 и не взял за это ни копейки. Тем не менее, клиент звонит, грозится физической расправой над любимым хомячком, просит, опять угрожает. Пришлось закрывать баш и искать альтернативы.
Под катом список (4 варианта, никаких откровений / открытий) чего нашел автор, а также рецепт Javascript-перевода от Bing.
Вроде как самое простое и быстрое решение — взять Translate API v2 от той же Доброкорпорации. Но что смущает — нет простого JS примера. Опять-таки — вопрос секьюрности — мне в js нужно будет добавить API key. Т.е. любой человек, догадавшийся открыть исходный код страницы сможет найти там ключ. И переводить на своем сайте за счет моего клиента. Не слишком интересно. (Каюсь, я не разбирался, возможно там все предусмотрено. Но напомню исходный посыл — суббота вечер, разбираться лень, хочется пойти читать баш|пиво|соседку)
Вариант 2-й,
Как подсказали вот здесь, почему-то работает перевод. И даже дает ответы в JSON формате. И еще Гугл сам предлагает юзать Translate Widget, который наверняка можно препарировать и посмотреть куда он там шлет запросы и как его эмулировать.
Вот тут встают вопросы — сколько надо времени чтобы обработать эти варианты? Есть ли уверенность что завтра (через неделю) лавочку не прикроют? Удастся ли получить от них JSONP или придется в очередной раз обходить Same Origin Policy?
Не много ли вопросов?
Вспомнил о любви одного российского поисковика копировать сервисы Корпорации Д. Пытался нагуглить «Yandex Translate API». Нашел только упоминание о существовании такого сервиса и о том, что он слабо документирован. Наверное он не задокументирован никак, поскольку в момент отключения переводчика от Д. инк. весь рунет должен был бы пестрить ссылками на этот сервис, примерами использования и выдержкой из документации. Ну вот ни в жизнь не поверю, что это я один такой не подсуетился вовремя, наверняка есть еще потерпевшие.
Это только предположение, поэтому не пинайте сильно, если обладаете информацией — добро пожаловать, в комментариях ссылки только приветсятвуются.
В процессе поиска API от Yandex был несказанно удивлен! http://msdn.microsoft.com/en-us/library/dd877846.aspx Нам дают халявный! работающий! переводчик с поддержкой JSONP! И кто же такой щедрый? Microsoft! Забегая вперед скажу, что переводчик действительно работает. Правда уходить от Гугла к Microsoft — это как-то… Противоестественно что ли? Но тем не менее…
Ссылку на пример использования я дал. Пример, мягко говоря, громоздкий, но слегка документированный. Да, кстати, после беглого взгляда на код ясно, что потребуется какой-то API key. Но его достаточно легко получить — идем сюда, региструемся и добаляем сайт. Интерфейс слегка подглючивает, но в общем добавить сайт получилось.
Да, кстати, переводчик у меня с тем же ключем работал и на другом (локальном) домене, в отличие, например, от Доброкарт. Код быстренько переработал, с использованием jQuery он получился чуть короче и читабельнее. Если Вы не любите jQuery — то либо Вы и сами можете лучше и быстрее меня решить похожую проблему, либо Вам все равно придется его подключить чтобы эта функция заработала.
Комментарии я в код вставлять не стал, уж не обессудбте. Да и документирована функция наверняка с какими-нибудь нарушениями чего-то там. Но, на мой взгляд, что-то понять можно. И главное — it works! (Если у Вас не работает — милости просим комментировать, желательно с указанием браузера)
Да, и еще — качество перевода по сравнению с гугловым — отстой. По крайней мере направление RU -> UA.
Если у кого есть что-то получше — добро пожаловать в комменты.
И под конец немногорозовых соплей сожалений — похоже пора прекращать любить Google. Я так понимаю, что ребятам приходиться начинать зарабатывать деньги, поэтому оставаться добрыми и пушистыми они уже не смогут. А жаль. Это было как-то… волшебно что ли? Хочешь карту — на. Хочешь переводчик — на. Сколько я должен? — Ну что вы, спасибо что используете наш сервис. Блин, прямо сказка какая-то. Закончилась.
Все, я ушел пить пиво к соседке.
UPD: ах да, мы юзаем JSONP, т.е. отсылать будем только GET и естественно при переводе более-менее длинного текста (не разбирался, но при 520 символов кириллицы истинно) словим HTTP 414 (который в данном конкретном случае почему-то обзывают 404)
Под катом список (4 варианта, никаких откровений / открытий) чего нашел автор, а также рецепт Javascript-перевода от Bing.
Вариант 1-й, платный
Вроде как самое простое и быстрое решение — взять Translate API v2 от той же Доброкорпорации. Но что смущает — нет простого JS примера. Опять-таки — вопрос секьюрности — мне в js нужно будет добавить API key. Т.е. любой человек, догадавшийся открыть исходный код страницы сможет найти там ключ. И переводить на своем сайте за счет моего клиента. Не слишком интересно. (Каюсь, я не разбирался, возможно там все предусмотрено. Но напомню исходный посыл — суббота вечер, разбираться лень, хочется пойти читать баш|пиво|соседку)
Вариант 2-й, криминальный геморройный
Как подсказали вот здесь, почему-то работает перевод. И даже дает ответы в JSON формате. И еще Гугл сам предлагает юзать Translate Widget, который наверняка можно препарировать и посмотреть куда он там шлет запросы и как его эмулировать.
Вот тут встают вопросы — сколько надо времени чтобы обработать эти варианты? Есть ли уверенность что завтра (через неделю) лавочку не прикроют? Удастся ли получить от них JSONP или придется в очередной раз обходить Same Origin Policy?
Не много ли вопросов?
Вариант 3-й, мифический
Вспомнил о любви одного российского поисковика копировать сервисы Корпорации Д. Пытался нагуглить «Yandex Translate API». Нашел только упоминание о существовании такого сервиса и о том, что он слабо документирован. Наверное он не задокументирован никак, поскольку в момент отключения переводчика от Д. инк. весь рунет должен был бы пестрить ссылками на этот сервис, примерами использования и выдержкой из документации. Ну вот ни в жизнь не поверю, что это я один такой не подсуетился вовремя, наверняка есть еще потерпевшие.
Это только предположение, поэтому не пинайте сильно, если обладаете информацией — добро пожаловать, в комментариях ссылки только приветсятвуются.
Вариант 4-й, предательский
В процессе поиска API от Yandex был несказанно удивлен! http://msdn.microsoft.com/en-us/library/dd877846.aspx Нам дают халявный! работающий! переводчик с поддержкой JSONP! И кто же такой щедрый? Microsoft! Забегая вперед скажу, что переводчик действительно работает. Правда уходить от Гугла к Microsoft — это как-то… Противоестественно что ли? Но тем не менее…
Ссылку на пример использования я дал. Пример, мягко говоря, громоздкий, но слегка документированный. Да, кстати, после беглого взгляда на код ясно, что потребуется какой-то API key. Но его достаточно легко получить — идем сюда, региструемся и добаляем сайт. Интерфейс слегка подглючивает, но в общем добавить сайт получилось.
Да, кстати, переводчик у меня с тем же ключем работал и на другом (локальном) домене, в отличие, например, от Доброкарт. Код быстренько переработал, с использованием jQuery он получился чуть короче и читабельнее. Если Вы не любите jQuery — то либо Вы и сами можете лучше и быстрее меня решить похожую проблему, либо Вам все равно придется его подключить чтобы эта функция заработала.
/**
* function for translating using Bing's Translator API
* @param String text - text to be translated
* @param String sl - source language code (f.e. 'ru')
* @param String tl - target language code (f.e. 'ru')
* @param Function success - function to be called when translate is complete
* sucessfully (will be given to a jQuery's ajax success parameter)
* @param Function complete - function to be called anyway (will be given to a
* jQuery's ajax complete parameter)
*/
function translate_bing(text, sl, tl, success, complete){
if(typeof(complete) != 'function')
complete = function(){};
jQuery.ajax({
url: 'http://api.bing.net/json.aspx?JsonCallback=?',
dataType: 'jsonp',
data: {
'AppId' : 'YOUR_API_KEY',
'Query': text.substr(0, 5000),
'Sources': 'Translation',
'Version': '2.2',
'Translation.SourceLanguage': sl,
'Translation.TargetLanguage': tl,
'JsonType':'callback'
},
success: function(response){
success(response.SearchResponse.Translation.Results[0].TranslatedTerm || '');
},
complete: complete
});
}
Комментарии я в код вставлять не стал, уж не обессудбте. Да и документирована функция наверняка с какими-нибудь нарушениями чего-то там. Но, на мой взгляд, что-то понять можно. И главное — it works! (Если у Вас не работает — милости просим комментировать, желательно с указанием браузера)
Да, и еще — качество перевода по сравнению с гугловым — отстой. По крайней мере направление RU -> UA.
Если у кого есть что-то получше — добро пожаловать в комменты.
И под конец немного
Все, я ушел пить пиво к соседке.
UPD: ах да, мы юзаем JSONP, т.е. отсылать будем только GET и естественно при переводе более-менее длинного текста (не разбирался, но при 520 символов кириллицы истинно) словим HTTP 414 (который в данном конкретном случае почему-то обзывают 404)