Используя API переводчика написал для себя простую программу для перевода слов и фраз, и чтобы из любого места работало. Хотел использовать curl, но непонятно почему получал ошибку что такого языка нет.
Теперь вместо скучного, а иногда медленного, а иногда такого ярко-белого нового таба с лишней информацией пишу в терминале trans hello и получаю перевод на русский, а если trans привет — на английский. Разумеется можно вводить и фразы, в кавычках. Работает быстренько.
Чтобы перевод работал в любой директории, нужно в /usr/bin положить .class-файл и trans.sh для его вызова:
И сделать его исполняемым: sudo chmod +x trans.sh
Если вы вместо перевода начнете получать сообщение о том что ключ кончился, или мало-ли-что — тут можно получить новый кей — вставьте его куда надо в Java-коде, после чего откомпилируйте (javac YandexTranslate.java) и скопируйте с заменой на /usr/bin.
Также этот код доступен на Гитхабе.
Также пользователи Firefox могут воспользоваться моим экстеншеном-переводчиком — он интегрирован в контекстное меню, быстрый-минималистичный и не оказывает влияния на DOM, после установки сразу работает и не требует рестарта браузера. На данный момент единственный Яндекс-переводчик для текущих версий Firefox.
UPD: Такие штуки лучше делать сразу на баше, но сразу у меня не получилось, но после того как bockra показал свой скрипт, я его дописал — чтобы не надо было указывать направление перевода, и можно без ковычек писать сразу несколько слов. Так и не смог добиться перевода нескольких слов с амперсантом, но и халера с ним.
Теперь вместо скучного, а иногда медленного, а иногда такого ярко-белого нового таба с лишней информацией пишу в терминале trans hello и получаю перевод на русский, а если trans привет — на английский. Разумеется можно вводить и фразы, в кавычках. Работает быстренько.
import javax.net.ssl.HttpsURLConnection;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;
public class YandexTranslate {
private static int i = 0;
public static void main(String[] args) throws IOException {
System.out.println(translate("ru", args[0]));
}
private static String translate(String lang, String input) throws IOException {
String urlStr = "https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150627T071448Z.117dacaac1e63b79.6b1b4bb84635161fcd400dace9fb2220d6f344ef";
URL urlObj = new URL(urlStr);
HttpsURLConnection connection = (HttpsURLConnection)urlObj.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream());
dataOutputStream.writeBytes("text=" + URLEncoder.encode(input, "UTF-8") + "&lang=" + lang);
InputStream response = connection.getInputStream();
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;
}
}
Чтобы перевод работал в любой директории, нужно в /usr/bin положить .class-файл и trans.sh для его вызова:
#!/bin/bash
if [ $# -eq 0 ]
then
echo "Enter text for translate"
exit 1;
fi
java -classpath /usr/bin/ YandexTranslate "$1"
И сделать его исполняемым: sudo chmod +x trans.sh
Если вы вместо перевода начнете получать сообщение о том что ключ кончился, или мало-ли-что — тут можно получить новый кей — вставьте его куда надо в Java-коде, после чего откомпилируйте (javac YandexTranslate.java) и скопируйте с заменой на /usr/bin.
Также этот код доступен на Гитхабе.
Также пользователи Firefox могут воспользоваться моим экстеншеном-переводчиком — он интегрирован в контекстное меню, быстрый-минималистичный и не оказывает влияния на DOM, после установки сразу работает и не требует рестарта браузера. На данный момент единственный Яндекс-переводчик для текущих версий Firefox.
UPD: Такие штуки лучше делать сразу на баше, но сразу у меня не получилось, но после того как bockra показал свой скрипт, я его дописал — чтобы не надо было указывать направление перевода, и можно без ковычек писать сразу несколько слов. Так и не смог добиться перевода нескольких слов с амперсантом, но и халера с ним.
#!/bin/bash
#
# simple console util for translation text to any language using Yandex Translate API
# use: trans 'call me, baby
# will return translation of a phrase to ru or en language
# more example at http://api.yandex.ru/translate/
#
input=${@//[&]/%26}
link='https://translate.yandex.net/api/v1.5/tr.json/translate?key=trnsl.1.1.20150627T071448Z.117dacaac1e63b79.6b1b4bb84635161fcd400dace9fb2220d6f344ef&lang='
function translate() {
translated=$(curl -s "$link$key&lang=$1&text=$input" | awk -F'"' {' print $10 '})
}
translate "ru"
if [ "$translated" == "$input" ]
then
translate "en"
fi
echo $translated