Created
November 20, 2008 11:39
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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