Class: Translater

Inherits:
Object
  • Object
show all
Defined in:
lib/google_translater/translater.rb

Overview

Translater

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.from_languageObject (readonly)

Returns the value of attribute from_language.



6
7
8
# File 'lib/google_translater/translater.rb', line 6

def from_language
  @from_language
end

.inputObject (readonly)

Returns the value of attribute input.



7
8
9
# File 'lib/google_translater/translater.rb', line 7

def input
  @input
end

.to_languageObject (readonly)

Returns the value of attribute to_language.



8
9
10
# File 'lib/google_translater/translater.rb', line 8

def to_language
  @to_language
end

Class Method Details

.google_base_urlObject



10
11
12
# File 'lib/google_translater/translater.rb', line 10

def google_base_url
  'https://translate.googleapis.com/translate_a/single'
end

.google_paramsObject



14
15
16
# File 'lib/google_translater/translater.rb', line 14

def google_params
  "client=gtx&sl=#{from_language}&tl=#{to_language}&dt=t&q=#{input}"
end

.google_responseObject



18
19
20
21
# File 'lib/google_translater/translater.rb', line 18

def google_response
  uri = URI google_url
  Net::HTTP.get_response uri
end

.google_urlObject



23
24
25
# File 'lib/google_translater/translater.rb', line 23

def google_url
  [google_base_url, google_params].join('?')
end

.language_mapObject

Putting this at the bottom to keep it out of the way



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/google_translater/translater.rb', line 63

def language_map # rubocop:disable Metrics/MethodLength
  {
    :af => 'Afrikaans',
    :sq => 'Albanian',
    :ar => 'Arabic',
    :az => 'Azerbaijani',
    :eu => 'Basque',
    :bn => 'Bengali',
    :be => 'Belarusian',
    :bg => 'Bulgarian',
    :ca => 'Catalan',
    :'zh-CN' => 'Chinese Simplified',
    :'zh-TW' => 'Chinese Traditional',
    :hr => 'Croatian',
    :cs => 'Czech',
    :da => 'Danish',
    :nl => 'Dutch',
    :en => 'English',
    :eo => 'Esperanto',
    :et => 'Estonian',
    :tl => 'Filipino',
    :fi => 'Finnish',
    :fr => 'French',
    :gl => 'Galician',
    :ka => 'Georgian',
    :de => 'German',
    :el => 'Greek',
    :gu => 'Gujarati',
    :ht => 'Haitian Creole',
    :iw => 'Hebrew',
    :hi => 'Hindi',
    :hu => 'Hungarian',
    :is => 'Icelandic',
    :id => 'Indonesian',
    :ga => 'Irish',
    :it => 'Italian',
    :ja => 'Japanese',
    :kn => 'Kannada',
    :ko => 'Korean',
    :la => 'Latin',
    :lv => 'Latvian',
    :lt => 'Lithuanian',
    :mk => 'Macedonian',
    :ms => 'Malay',
    :mt => 'Maltese',
    :no => 'Norwegian',
    :fa => 'Persian',
    :pl => 'Polish',
    :pt => 'Portuguese',
    :ro => 'Romanian',
    :ru => 'Russian',
    :sr => 'Serbian',
    :sk => 'Slovak',
    :sl => 'Slovenian',
    :es => 'Spanish',
    :sw => 'Swahili',
    :sv => 'Swedish',
    :ta => 'Tamil',
    :te => 'Telugu',
    :th => 'Thai',
    :tr => 'Turkish',
    :uk => 'Ukrainian',
    :ur => 'Urdu',
    :vi => 'Vietnamese',
    :cy => 'Welsh',
    :yi => 'Yiddish'
  }
end

.languages_match?Boolean

Returns:

  • (Boolean)


27
28
29
# File 'lib/google_translater/translater.rb', line 27

def languages_match?
  to_language == from_language
end

.parsed_google_responseObject



31
32
33
# File 'lib/google_translater/translater.rb', line 31

def parsed_google_response
  google_response.body.gsub(/\[|\]|"/, '').split(',').first
end

.recognized?(language) ⇒ Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/google_translater/translater.rb', line 35

def recognized?(language)
  language_map.key?(language)
end

.translate(input, from_language, to_language) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/google_translater/translater.rb', line 39

def translate(input, from_language, to_language)
  @input = input
  @from_language = from_language.to_sym
  @to_language = to_language.to_sym
  return input if languages_match?
  return unknown_languages_message if unknown_languages?
  translated_input
end

.translated_inputObject



48
49
50
# File 'lib/google_translater/translater.rb', line 48

def translated_input
  parsed_google_response
end

.unknown_languages?Boolean

Returns:

  • (Boolean)


52
53
54
55
56
# File 'lib/google_translater/translater.rb', line 52

def unknown_languages?
  return false if recognized?(from_language) && recognized?(to_language)
  result = recognized?(from_language) ? [] : [from_language]
  result << to_language unless recognized?(to_language)
end

.unknown_languages_messageObject



58
59
60
# File 'lib/google_translater/translater.rb', line 58

def unknown_languages_message
  "I don't recognize #{unknown_languages.join(' or ')}"
end