Sha256: c8cd6aaddffb49f283420fcaaae81efdd9f4035c0da6d41190d8cdcfd1869cac

Contents?: true

Size: 1.05 KB

Versions: 3

Compression:

Stored size: 1.05 KB

Contents

# frozen_string_literal: true

require 'net/http'
require 'uri'
require 'json'

module LightTr
  class Translator
    def initialize(api_key)
      @api_key = api_key
    end

    def translate(query, target = 'en')
      extract_translation(request(query, target))
    end

    private

    attr_reader :api_key

    def request(query, target)
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      req = Net::HTTP::Post.new(uri.request_uri, headers)
      req.body = { q: query, target: target }.to_json
      http.request(req)
    end

    def extract_translation(response)
      translations = JSON.parse(response.body).dig('data', 'translations') || [{}]
      translations.first['translatedText']
    end

    def uri
      @uri ||= URI.parse("https://translation.googleapis.com/language/translate/v2?key=#{api_key}&format=text")
    end

    def headers
      @headers ||= {
        'Host': 'translation.googleapis.com',
        'Content-Type': 'application/json; charset=utf-8',
        'Accept': 'application/json'
      }
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
light_tr-2.0.1 lib/light_tr/translator.rb
light_tr-2.0.0 lib/light_tr/translator.rb
light_tr-1.0.0 lib/light_tr/translator.rb