Last active
January 1, 2016 20:09
-
-
Save i09158knct/8195343 to your computer and use it in GitHub Desktop.
This file contains 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 | |
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