Skip to content

Instantly share code, notes, and snippets.

@jamesp
Created November 20, 2008 11:39
Show Gist options
  • Save jamesp/27020 to your computer and use it in GitHub Desktop.
Save jamesp/27020 to your computer and use it in GitHub Desktop.
Uses the google translate api to translate a string between languages, via any intermediate
#!/usr/bin/env ruby
# translate text on the command line
require 'rubygems'
require 'open-uri'
require 'json'
# Usage: $0 from:to phrase...
#
# the first argument defines the languages to convert from and to. If only one
# is specified, then the first is auto detected. a missing language goes
# to the default language (english).
# e.g.
# english:french => translates english text to french
# dutch => translates text to dutch from whatever the text
# appears to be
# :spanish => converts default (english) to spanish
# german:spanish:english => translates german to english, via spanish
# :danish: => translates english to dutch and back to english
#
# all further arguments are joined into a sentence and taken to the phrase
# that you want to convert.
DEFAULT_LANGUAGE = "english"
LANGUAGES = {
"arabic" => "ar", "bulgarian" => "bg", "catalan" => "ca", "chinese" => "zh-CN",
"croatian" => "hr", "czech" => "cs", "danish" => "da", "dutch" => "nl",
"english" => "en", "filipino" => "tl", "finnish" => "fi", "french" => "fr",
"german" => "de", "greek" => "el", "hebrew" => "iw", "hindi" => "hi",
"indonesian" => "id", "italian" => "it", "japanese" => "ja", "korean" => "ko",
"latvian" => "lv", "lithuanian" => "lt","norwegian" => "no", "polish" => "pl",
"portuguese" => "pt", "romanian" => "ro", "russian" => "ru", "serbian" => "sr",
"slovak" => "sk", "slovenian" => "sl", "spanish" => "es", "swedish" => "sv",
"ukrainian" => "uk", "vietnamese" => "vi"}
def display_usage_and_exit
$stderr.puts "$0 [from:to] [phrase]"
exit 5
end
def display_languages_and_exit
$stderr.puts "Invalid language. Allowed languages are: #{LANGUAGES.keys.join ", "}"
exit 10
end
def translate(from, to, text)
url = URI.escape "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=#{text}&langpair=#{from}|#{to}"
response = JSON.load(open(url))
if response["responseStatus"] == 200
response["responseData"]["translatedText"]
else
$stderr.puts "[ ERROR ] The webserver returned an error"
$stderr.puts "[REQUEST] #{url}"
$stderr.puts "[RESPOND] #{response.inspect}"
nil
end
end
# quit unless enough arguments are provided
display_usage_and_exit unless ARGV.length >= 2
langs = ARGV[0].split(":").collect do |l|
if l == ""
LANGUAGES[DEFAULT_LANGUAGE]
elsif LANGUAGES[l]
LANGUAGES[l]
elsif LANGUAGES.values.include? l
l
else
display_languages_and_exit
end
end
langs.insert(0, "auto") if langs.length == 1
langs.push(LANGUAGES[DEFAULT_LANGUAGE]) if ARGV[0][-1].chr == ":"
input = ARGV[1..-1].join " "
(0..(langs.length-2)).each do |i|
if input = translate(langs[i], langs[i + 1], input)
puts "#{langs[i]} => #{langs[i+1]}: #{input}"
else
exit 15
end
end
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment