Как стать автором
Обновить

Комментарии 32

что-то новенькое, спасибо

а почему яндекс, а не гугл?
Мне кажется en-ru/ru-en переводится лучше Яндексом, да и пинг наверное до сервера Яндекса меньше :)
Если кому-то интересно, то с китайского на русский лучше всего (по моим тестам) переводит Бинг.
Хотелось бы поставить Яндекс на второе место, но у него есть фатальные ошибки перевода (в моих кусках перевода), о которых я давно сообщил в тех поддержку, мне ответили, но до сих пор нет изменений. Наверное через какое-то время Яндекс будет на втором месте, а на третьем останется Гугл.
НЛО прилетело и опубликовало эту надпись здесь
Я раньше пользовался api от Google, а вчера обнаружил, что Google деньги берет за Translate.
А на месте автора я бы API Key бы убрал.
И проще наверное было создать javascript bookmark в Хроме.
НЛО прилетело и опубликовало эту надпись здесь
Берут, берут.
https://cloud.google.com/translate/v2/pricing
А то что вы привели, это не вызов API, а неправомерное использование чужого сервиса, на мой взгляд.
Для дома поиграться может и сойдет, но в прод не вариант.
НЛО прилетело и опубликовало эту надпись здесь
<зануда>
  • Составлять url слиянием строк, серьезно?
  • Разбирать json руками, серьезно?
  • Делать бесконечный рекурсивный вызов, серьезно?
  • Игнорировать все аргументы командной строки, кроме первого, серьезно?
  • Выкладывать это на Хабр, серьезно?
</зануда>
1) Ведь в таком маленьком коде проще слиять строки, разве нет? Каковы ваши аргументы против слияния?
2) Разбирать json руками — опять же — зачем усложнять?
3) Рекурсия не бесконечна, вызов самого себя происходит только если вернулось то же что ввел пользователь. Можно было конечно сразу определять язык, но это было бы чуть больше кода и все-равно два запроса к серверу.
4) Какие еще нужны аргументы командной строки?
5) Почему выложил на Хабр — сам искал такое решение, в том числе и на Хабре.
1) Ведь в таком маленьком коде проще слиять строки, разве нет? Каковы ваши аргументы против слияния?

trans "R&D"

Ожидание — «НИОКР», реальность — «Р».
2) Разбирать json руками — опять же — зачем усложнять?

JSON экранирует ряд символов, например ", \n и т.д., поэтому нужен нормальный парсер.
3) Рекурсия не бесконечна, вызов самого себя происходит только если вернулось то же что ввел пользователь. Можно было конечно сразу определять язык, но это было бы чуть больше кода и все-равно два запроса к серверу.

trans "123"

4) Какие еще нужны аргументы командной строки?

Joiner.on(" ").join(args)

5) Почему выложил на Хабр — сам искал такое решение, в том числе и на Хабре.

Заранее извиняюсь, но на Хабр имеет смысл выкладывать нетривиальные решения, а не суповой набор из багов уровня средней школы.
ок, спасибо за обратную связь, обновил:
1) Теперь можно делать trans «R&D»
2) Я не буду в консоли вводить что-то со слешем для перевода — не хочу превращать .class-файл в .jar-файл используя например gson для парсинга.
3) Теперь вызов метода самого себя происходит лишь единожды.
4) Joiner.on(" ").join(args) не понимаю, что это?
5) Мне очень стыдно, но уже 13 человек добавили в избранное :)
2) Я не буду в консоли вводить что-то со слешем для перевода — не хочу превращать .class-файл в .jar-файл используя например gson для парсинга.

Замечательный подход, далеко пойдете :)
3) Теперь вызов метода самого себя происходит лишь единожды.

private static int i = 0;
/* ... */
i++;
if (translated.equals(input) && i < 2) {
    // if return equal of entered text - we need change direction of translation
    return translate("en", input);
} else return translated;

А здесь, уважаемые зрители, яркий пример kostyl'-driven development.
4) Joiner.on(" ").join(args) не понимаю, что это?

А это возможность делать trans many words without escaping.
Если быть еще точнее, то это, например, com.google.common.base.Joiner.
А зачем тут джава-то?
Может не так экранировали ссылку?

Вот мой помощник в переводе :)
#!/bin/bash
#
# simple console util for translation text to any language using Yandex Translate API
# use: Translate.sh ru 'call me, baby'
# will return translation of a phrase to ru language
# more example at http://api.yandex.ru/translate/
#

to=$1
text=$2

link='https://translate.yandex.net/api/v1.5/tr.json/translate?key='
key='-- key from http://api.yandex.ru/key/keyslist.xml --'

curl -s "$link$key&lang=$to&text=$text" | awk -F'"' {' print $10 '}
Когда я пробовал делать 'curl $link' то получал {«code»:501,«message»:«The specified translation direction is not supported»}
Да, надо было просто в кавычки поставить адрес… Тогда бы и не писал на Яве. Хотя я читал кто-то не любит ставить curl, а jre может быть установлен :)
НЛО прилетело и опубликовало эту надпись здесь
Это зависит от системы. Иногда есть и curl, и wget, иногда что-то одно, иногда ни того, ни другого.
НЛО прилетело и опубликовало эту надпись здесь
Вы меня с автором этой «статьи» не путаете?
НЛО прилетело и опубликовало эту надпись здесь
Хотя тест Руслана на «R&D» тоже не прошел :)
НЛО прилетело и опубликовало эту надпись здесь
Дописал ваш скрипт и добавил в пост.
Во-первых — баян.
Во-вторых — зачем здесь Ява?! Я, конечно, Java разработчик, обожаю этот язык, но для такой тривиальной задачи такой инструмент — крайне не подходящее решение на мой взгляд. Ребята решали подобную задачу средствами Bash. Ну максимум — Питон, как-никак скриптовый язык, не требующий никакой компиляции.
В-третьих — крайне неуклюжая, «сырая» реализация. Как уже говорили, работа с JSON, например. Наверное, будет открытием, но в JSR 353 (https://jcp.org/en/jsr/detail?id=353) была введена поддержка JSON парсера. А это значит, что можно и без подключения сторонних библиотек реализовать гармоничное решение. (http://www.oracle.com/technetwork/articles/java/json-1973242.html)

Вы были бы молодцом, если бы подобное решение осталось в кулуарах Вашего ПК.
Не хочу показаться занудой, но до статьи на хабре — это точно не дотягивает.
 String json = new java.util.Scanner(response).nextLine();
        int start = json.indexOf("[");
        int end = json.indexOf("]");
        String translated = json.substring(start + 2, end - 1);
        i++;
        if (translated.equals(input) && i < 2) {
            // if return equal of entered text - we need change direction of translation
            return translate("en", input);
        } else return translated;

Ужас какой )
Назовите пост «Яндекс-Перевод в терминале через Java в 30 строк» и часть претензий отпадёт :)
Затронули больную, за последнее время, для меня тему, давно хотел подобное написать. Java нет у меня, зато везде есть node.js.
github.com/nkt/yandex.translate — быстренько накидал реализацию.
yandex-translate hello | say # It's talking!

У вас она еще и говорит?
Сама программа нет. Но в osx есть программа say (думаю под linux есть аналоги), а оператор | перенаправляет stdout в stdin следующей программы. Таким образом можно воспроизводить переводы.
НЛО прилетело и опубликовало эту надпись здесь
Вы меня вдохновили сделать два скрипта для баша для TTS через Яндекс и Гугл :)

Теперь пишу в консоли
tts-y hello world
или
tts-g hello world
И слушаю произношение :)
можно без ковычек писать сразу несколько слов. Так и не смог добиться перевода нескольких слов с амперсантом, но и халера с ним.
Кроме переводчика стоит добавить в арсенал aspell/hunspell. Можно:
— создавать дочерние процессы с помощью java.lang.Process, получить stdin и stdout и обернуть aspell/hunspell,
— использовать только первый аргумент (проверять орфографию по одному слову же удобнее),
— добавить в код константу, соответствующую epoch time через N часов и сравнивать System.currentTimeMillis()/1000 с этой константой и падать, если она оказалась меньше (чтоб периодически перекомпилировать эту обёртку.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации