Skip to content

Instantly share code, notes, and snippets.

@i09158knct
Last active January 1, 2016 20:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save i09158knct/8195343 to your computer and use it in GitHub Desktop.
Save i09158knct/8195343 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
require 'optparse'
require 'json'
ONLY_TWO_ALPHAS = /^[[:alpha:]]{2}$/
INVALID_LANGULAGE_CODE_ERROR_TEXT = 'Error: Language code should be ISO 639 alpha-2'
def parse_args(argv)
parser = OptionParser.new
parser.on('-s', '--source SOURCE_LANGUAGE', ONLY_TWO_ALPHAS)
parser.on('-t', '--target TARGET_LANGUAGE', ONLY_TWO_ALPHAS)
parser.on('-p', '--phrase PHRASE', '-w', '--word')
opts = parser.getopts(argv)
rest = parser.parse(argv)
text = [opts['phrase'], rest].compact.join(' ')
[opts['source'] || '', opts['target'] || '', text.strip]
end
# en or ja
def detect_language(text)
case text
when /\p{Han}|\p{Hiragana}|\p{Katakana}/
'ja'
else
'en'
end
end
def determine_source_language(target_lang, text)
detected_lang = detect_language(text)
return detected_lang if target_lang.empty? || target_lang != detected_lang
case target_lang
when 'ja'
'en'
else
'ja'
end
end
def determine_target_language(source_lang)
case source_lang
when 'ja'
'en'
else
'ja'
end
end
def load_translation_page(source_lang, target_lang, source_text)
`curl -s --user-agent "" \
-d "sl=#{source_lang}" \
-d "tl=#{target_lang}" \
-d "ie=utf_8" \
-d "oe=utf_8" \
-d "client=t" \
--data-urlencode "text=#{source_text.strip}" \
http://translate.google.com.br/translate_a/t`
end
def extract_translated_text(json)
target = json.match(/\[(\[\[[\s\S]*?\]\])/)[1]
array = JSON.parse(target);
a = array.map {|el| el[0] }
a.join('')
end
source_lang, target_lang, source_text = parse_args(ARGV)
source_text = STDIN.read if source_text.strip.empty?
source_lang = determine_source_language(target_lang, source_text) if source_lang.empty?
target_lang = determine_target_language(source_lang) if target_lang.empty?
response = load_translation_page(source_lang, target_lang, source_text)
# response = File.read('/tmp/log-translate')
# File.write('/tmp/log-translate', response)
puts extract_translated_text(response)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment