Module: Babelphish::HtmlTranslator
- Defined in:
- lib/babelphish/html_translator.rb
Class Method Summary collapse
-
.get_translated_file(page, to) ⇒ Object
Generate a file name for the newly translated content.
-
.translate(path, translate_tos, translate_from = 'en', overwrite = false) ⇒ Object
Translates all files in the given path from the language specififed by ‘translate_from’ into the languages in ‘translate_tos’.
-
.translate_and_write_page(source_page, tos, from, overwrite) ⇒ Object
Translate a single page from the language specified in ‘from’ into the languages specified by ‘tos’.
- .translate_and_write_pages(path, tos, from, overwrite) ⇒ Object
-
.translate_file?(page) ⇒ Boolean
This is a hack but all the translated files live in the same directory as the original file so we have to have some way of not translating the translated files.
Class Method Details
.get_translated_file(page, to) ⇒ Object
Generate a file name for the newly translated content
101 102 103 104 105 106 |
# File 'lib/babelphish/html_translator.rb', line 101 def get_translated_file(page, to) new_page = page.gsub('.html', ".#{to}.html") new_page.gsub!('text.html', "text.#{to}.html") new_page.gsub!('text.plain', "text.#{to}.plain") new_page end |
.translate(path, translate_tos, translate_from = 'en', overwrite = false) ⇒ Object
Translates all files in the given path from the language specififed by ‘translate_from’ into the languages in ‘translate_tos’. Translations that already exist will not be overwritten unless overwrite = true
9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/babelphish/html_translator.rb', line 9 def translate(path, translate_tos, translate_from = 'en', overwrite = false) @path = path if !Babelphish::GoogleTranslate::LANGUAGES.include?(translate_from) STDERR.puts "#{translate_from} is not one of the available languages." return end if !File.exists?(path) STDERR.puts "#{path} does not exist." return end translate_and_write_pages(path, translate_tos, translate_from, overwrite) end |
.translate_and_write_page(source_page, tos, from, overwrite) ⇒ Object
Translate a single page from the language specified in ‘from’ into the languages specified by ‘tos’
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/babelphish/html_translator.rb', line 34 def translate_and_write_page(source_page, tos, from, overwrite) if File.exist?(source_page) STDERR.puts "Translating: #{source_page}" else STDERR.puts "Could not find file: #{source_page}" return end if !translate_file?(source_page) STDERR.puts "Not translating file: #{source_page}" return end text = IO.read(source_page) begins_with_html = text['<html>'] # Pull out all the code blocks so Google doesn't mess with those pattern = /\<\%.+\%\>/ holder = '{{---}}' replacements = text.to_s.scan(pattern) text.gsub!(pattern, holder) # Pull out all the new lines so Google doesn't mess with those pattern = /\n/ newline_holder = '<brr />' newline_replacements = text.to_s.scan(pattern) text.gsub!(pattern, newline_holder) # Send to Google for translations translations = Babelphish::Translator.multiple_translate(text, tos, from) # Put the code back translations.each_key do |locale| replacements.each do |r| if translations[locale] translations[locale].sub!(holder, r) else STDERR.puts "Unable to location translation for: #{locale} (From was #{from}. If they match then no translation was generated)." end end end # Put the newlines back in translations.each_key do |locale| newline_replacements.each do |r| if translations[locale] translations[locale].sub!(newline_holder, r) if translations[locale]['<html>'] # Google translate can insert '<html>' at the beginning of the result. Remove it. translations[locale]['<html>']= '' unless begins_with_html end end end end # Write the new file translations.each_key do |locale| translated_filename = get_translated_file(source_page, locale) if (locale != from) && (overwrite || !File.exists?(translated_filename)) File.open(translated_filename, 'w') { |f| f.write(translations[locale]) } end end end |
.translate_and_write_pages(path, tos, from, overwrite) ⇒ Object
22 23 24 25 26 27 28 29 30 |
# File 'lib/babelphish/html_translator.rb', line 22 def translate_and_write_pages(path, tos, from, overwrite) Dir.glob("#{path}/*").each do |next_file| if File.directory?(next_file) translate_and_write_pages(next_file, language) else translate_and_write_page(next_file, tos, from, overwrite) end end end |
.translate_file?(page) ⇒ Boolean
This is a hack but all the translated files live in the same directory as the original file so we have to have some way of not translating the translated files. this should return true for test.html.erb, test.text.html.erb and test.text.plain.erb and false for test.es.html.erb, test.text.es.html.erb and test.text.es.plain.erb
115 116 117 118 119 120 121 122 |
# File 'lib/babelphish/html_translator.rb', line 115 def translate_file?(page) test = page test = test.gsub('./', '') if page[0..1] == './' test = test.gsub('.text.html.erb', '') test = test.gsub('.text.plain.erb', '') test = test.gsub('.html.erb', '') test.split('.').length == 1 end |