class GoogleDictionary

Class for the Google Dictionary (actually Translate)

Constants

API_URL

Public Class Methods

name() click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 9
def self.name
  'Google Translate'
end

Public Instance Methods

define(word, source, target, options = {}) click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 40
def define(word, source, target, options = {})
  fail "Unknown language code '#{source}'" unless langs.include?(source)
  fail "Unknown language code '#{target}'" unless langs.include?(target)

  if options[:tts]
    audio_file = StringUtil.tts_file_name(word, source, 'google')
    get_pronunciation(word, source, audio_file) unless File.exist?(audio_file)
  end

  json = JSON.parse(get_data(word, source, target, options))
  render extract_definitions(json)
end
langs() click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 17
def langs
  { 'af'  => 'Afrikaans',   'sq'  => 'Albanian',        'ar'  => 'Arabic',
    'hy'  => 'Armenian',    'az'  => 'Azerbaijani',     'eu'  => 'Basque',
    'be'  => 'Belarusian',  'bg'  => 'Bulgarian',       'ca'  => 'Catalan',
    'hr'  => 'Croatian',    'cs'  => 'Czech',           'et'  => 'Estonian',
    'da'  => 'Danish',      'nl'  => 'Dutch',           'en'  => 'English',
    'tl'  => 'Filipino',    'fi'  => 'Finnish',         'fr'  => 'French',
    'gl'  => 'Galician',    'ht'  => 'Haitian, Creole', 'is'  => 'Icelandic',
    'ka'  => 'Georgian',    'de'  => 'German',          'el'  => 'Greek',
    'iw'  => 'Hebrew',      'hi'  => 'Hindi',           'hu'  => 'Hungarian',
    'id'  => 'Indonesian',  'ga'  => 'Irish',           'it'  => 'Italian',
    'ko'  => 'Korean',      'la'  => 'Latin',           'lv'  => 'Latvian',
    'mk'  => 'Macedonian',  'ms'  => 'Malay',           'mt'  => 'Maltese',
    'fa'  => 'Persian',     'pl'  => 'Polish',          'pt'  => 'Portuguese',
    'ro'  => 'Romanian',    'sl'  => 'Slovenian',       'th'  => 'Thai',
    'ja'  => 'Japanese',    'lt'  => 'Lithuanian',      'no'  => 'Norwegian',
    'vi'  => 'Vietnamese',  'cy'  => 'Welsh',           'yi'  => 'Yiddish',
    'ru'  => 'Russian',     'sr'  => 'Serbian',         'sk'  => 'Slovak',
    'es'  => 'Spanish',     'sw'  => 'Swahili',         'sv'  => 'Swedish',
    'tr'  => 'Turkish',     'uk'  => 'Ukrainian',       'ur'  => 'Urdu',
    'zh-TW' => 'Chinese, (Traditional)', 'zh-CN' => 'Chinese, (Simplified)' }
end
provide_tts?() click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 13
def provide_tts?
  true
end

Private Instance Methods

extract_definitions(json) click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 55
def extract_definitions(json)
  result = []
  if json.include?('dict')
    json['dict'].each do |item|
      definition = { class: item['pos'], entries: [] }
      item['entry'].each do |e|
        data = { word: e['word'], score: (e['score'] || 1e9) }
        definition[:entries] << data
      end
      result << definition
    end
  elsif json.include?('sentences')
    json['sentences'].each do |item|
      if item.include?('trans')
        definition = { class: 'translation', entries: [] }
        definition[:entries] << { word: item['trans'], score: 0 }
        result << definition
        break
      end
    end
  end
  result
end
render(result) click to toggle source
# File lib/dictionaries/google_dictionary.rb, line 79
def render(result)
  output = ''
  result.each do |entry|
    output << "#{entry[:class]}\n#{'-' * entry[:class].length}\n"
    entry[:entries].sort! { |x, y| x[:score] <=> y[:score] }
    output << entry[:entries].map { |e| e[:word] }.join(', ') + "\n\n"
  end
  output
end