Здравствуйте. Наверняка Вам встречались незнакомые английские слова или фразы, и Вам постоянно приходилось лезть в браузер, открывать сайт с онлайн переводчиком и переводить, при этом думая как хорошо было бы, если это было реализовано бы в виде софта под *nix.
Под операционные системы семейства Windows существует уже давно много переводчиков, а вот для unix систем, лично я, пока не встречал.
И так начнём, писать мы будем на языке программирования python. Он есть практически во всех *nix системах.
Для написания переводчика, нам понадобится одна библиотека не входящая в стандартный набор python'a — simplejson. Скачать её можно на официальном сайте.
После того как скачали, можете либо установить в систему, либо положить папку simplesjon расположенную в архиве рядом с нашим исполняемым python файлом.
Раздобыли simplejson? Теперь создадим файл translate.py и перейдём от теории к практике.
Программировать можно в чём угодно, хоть в nano, но я предпочитаю редактор Geany.
У нас должна получится вот такая структура проекта:
Библиотеку мы трогать не будем, поэтому переходим к файлу translate.py:
Делаем импорт необходимых нам библиотек:
Самая главная и единственная функция
На всякий случай опубликую весь код целиком:
На этом разработка программной части закончена. Можете проверить и запустить файл таким образом:
python translate.py en привет — переведёт текст на английский
python translate.py ru hello — переведёт текст на русский
«Но это же не удобно» — скажите вы. Действительно, набирать такую большую команду запуска в консоли действительно затруднительно.
Возьмём папку с проектом и переместим её какую нибудь директорию например в /usr/share
и получится у нас /usr/share/translate
Затем в вашем BINDIR'e (у меня на debian — /usr/bin) создадим 2 файла, en и ru:
В нашей системе теперь появилось 2 новые команды: en и ru соответственно.
Теперь пользоваться стало на много удобнее: en текст для перевода или же ru текст для перевода
Можно заюзать еще вот так:
Практически у любой программы есть свои минусы: у этой — это отсутствие локальной базы данных, весь перевод осуществляется через интернет. Но в век интернет-технологий, когда интернет в каждом доме — я думаю это не проблема.
Спасибо за внимание.
UPD: Я никому не навязываю своё мнение, я показал как реализовал это я
Под операционные системы семейства Windows существует уже давно много переводчиков, а вот для unix систем, лично я, пока не встречал.
На старт!
И так начнём, писать мы будем на языке программирования python. Он есть практически во всех *nix системах.
Для написания переводчика, нам понадобится одна библиотека не входящая в стандартный набор python'a — simplejson. Скачать её можно на официальном сайте.
После того как скачали, можете либо установить в систему, либо положить папку simplesjon расположенную в архиве рядом с нашим исполняемым python файлом.
Раздобыли simplejson? Теперь создадим файл translate.py и перейдём от теории к практике.
Программировать можно в чём угодно, хоть в nano, но я предпочитаю редактор Geany.
У нас должна получится вот такая структура проекта:
- ..
- simplejson/
- __init__.py
- decoder.py
- encoder.py
- scanner.py
- tool.py
- translate.py
Библиотеку мы трогать не будем, поэтому переходим к файлу translate.py:
Делаем импорт необходимых нам библиотек:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import httplib
import urllib2
import simplejson as json
import sys
Самая главная и единственная функция
user_agent = 'Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.4) Gecko/2008120916 Gentoo Firefox/3.0.4' #на всякий случай меняем User-Agent маскируясь под браузер
def translate_handler(lang,body):
body = ' '.join(body)
if len(sys.argv)<2: print u'$ en/ru text'; return # проверка на количество аргументов
try:
if lang=='ru': req = urllib2.Request(unicode(u'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s' % (urllib2.quote(body),u'en%7Cru')),'utf-8') # если в аргументе указан перевод на русский язык, формируем нехитрый запрос гуглу
elif lang=='en': req = urllib2.Request(unicode(u'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s' % (urllib2.quote(body),u'ru%7Cen')),'utf-8') # тоже самое и с английским
elif lang=='en': print str(unicode(body,'utf-8'))
else: print u'Available languages: en, ru'; return
req.add_header('User-Agent',user_agent) # здесь меняем в заголовке User-Agent
reqf = urllib2.urlopen(req) # отправляем запрос
except urllib2.HTTPError, e: print str(e)
answ=json.load(reqf) # читаем через json полученный результат
if answ['responseStatus']!=200: print str(answ['responseStatus'])+': '+answ['responseDetails'] # на случай если гуглу стало плохо и перевести не удалось
elif answ['responseData']: print answ['responseData']['translatedText']
else: print u'unknown error >_<'
translate_handler(sys.argv[1],sys.argv[2:]) # вызов функции
На всякий случай опубликую весь код целиком:
#!/usr/bin/evn python
# -*- coding: utf-8 -*-
import httplib
import urllib2
import simplejson as json
import sys
user_agent = 'Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.0.4) Gecko/2008120916 Gentoo Firefox/3.0.4'
def translate_handler(lang,body):
body = ' '.join(body)
if len(sys.argv)<2: print u'$ en/ru text'; return
try:
if lang=='ru': req = urllib2.Request(unicode(u'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s' % (urllib2.quote(body),u'en%7Cru')),'utf-8')
elif lang=='en': req = urllib2.Request(unicode(u'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=%s&langpair=%s' % (urllib2.quote(body),u'ru%7Cen')),'utf-8')
elif lang=='en': print str(unicode(body,'utf-8'))
else: print u'Available languages: en, ru'; return
req.add_header('User-Agent',user_agent)
reqf = urllib2.urlopen(req)
except urllib2.HTTPError, e: print str(e)
answ=json.load(reqf)
if answ['responseStatus']!=200: print str(answ['responseStatus'])+': '+answ['responseDetails']
elif answ['responseData']: print answ['responseData']['translatedText']
else: print u'unknown error >_<'
translate_handler(sys.argv[1],sys.argv[2:])
На этом разработка программной части закончена. Можете проверить и запустить файл таким образом:
python translate.py en привет — переведёт текст на английский
python translate.py ru hello — переведёт текст на русский
«Но это же не удобно» — скажите вы. Действительно, набирать такую большую команду запуска в консоли действительно затруднительно.
Решение
Возьмём папку с проектом и переместим её какую нибудь директорию например в /usr/share
и получится у нас /usr/share/translate
Затем в вашем BINDIR'e (у меня на debian — /usr/bin) создадим 2 файла, en и ru:
Сожержимое файла /usr/bin/ru:
python /usr/share/translate/translate.py ru $$*
Сожержимое файла /usr/bin/en:
python /usr/share/translate/translate.py en $$*
Итого:
В нашей системе теперь появилось 2 новые команды: en и ru соответственно.
Теперь пользоваться стало на много удобнее: en текст для перевода или же ru текст для перевода
Можно заюзать еще вот так:
ferym@ferym-desktop:~$ ping -c 3 ya.ru | xargs ru $*
PING ya.ru (77.88.21.3) 56 (84) байт данных. 64 байт из www.yandex.ru (77.88.21.3): icmp_seq = 1 TTL = 60 время = 6,20 мс 64 байт от www.yandex.ru (77.88.21.3): 2 = icmp_seq TTL = 60 время = 4,10 мс 64 байт с www.yandex.ru (77.88.21.3): icmp_seq = 3 TTL = 60 время = 3,78 мс --- ya.ru пинг статистика --- 3 пакеты, передаваемые, 3 получили, 0% потери пакетов, время 2001ms RTT мин / ср / макс / mdev = 3.787/4.698/6.207/1.074 мс
Минусы:
Практически у любой программы есть свои минусы: у этой — это отсутствие локальной базы данных, весь перевод осуществляется через интернет. Но в век интернет-технологий, когда интернет в каждом доме — я думаю это не проблема.
Спасибо за внимание.
UPD: Я никому не навязываю своё мнение, я показал как реализовал это я