teamon.eu

blah blah blah

Jak ułatwić sobie życie za pomocą google translatora

18 czerwca 2008

Kategorie:

Tagi:

  • Google
  • Ruby
  • gettext

Napisałem sobie aplikacje w RoR z użyciem gettext (how to). Wygenerowałem pliki .po i.. no właśnie, ktoś to musi przetłumaczyć. Wpadłem na dwa pomysły: a) znaleźć frajera, który to zrobi za free, b) zrobić to samemu.

Nie znalazłem nikogo, a że leniwy jestem to od razu zacząłem kombinować jakby tu sobie ułatwić/przyspieszyć pracę. Padło na google translator. Rozejrzałem się za API ale nic ciekawego nie znalazłem (jedynie to, że można użyć GET i wszystkie parametry podać w urlu). Pozostało tylko przefiltrować plik .po, odpytać wielkie G, wyciągnąć przetłumaczoną frazę i zapisać w pliku.

A tak to wygląda:

 
#!/opt/local/bin/ruby
 
require "net/http"
require "iconv"
 
$KCODE = 'utf8'
 
# ustawienie języków i kodowania
lang_from = "en"
lang_to = "pl"
enc = "latin2" # latin2 zwraca translator dla en|pl
 
# wygodny jestem :P
class String
  def iconv(to, from)
    Iconv.iconv(to, from, self)
  end
end
 
# czytamy plik
file = File.read(ARGV[0])
 
# mały regexp ...
f = file.gsub(/msgid "(.+?)"\nmsgstr "(.*?)"/) do |m|
  # tłumaczenie jest puste
  if $2 == ""
    id, str = $1, ""
    # pobranie przetłumaczonej wersji
    Net::HTTP.get("www.google.com", "/translate_t?hl=en&ie=UTF8&text=#{id.gsub(" ", "%20")}&langpair=#{lang_from}|#{lang_to}").iconv("utf8", enc).first.scan(/<div id=result_box dir="ltr">(.+?)<\/div>/m) do |e|
      str = e.first.gsub(" | ", "|") # dla "Xxx|Yyy" translator zwraca "Xxx | Yyy"
      puts "#{id} => #{str}"
    end
    "msgid \"#{id}\"\nmsgstr \"#{str}\""
  else
  # jeśli już jest tłumaczenie to zostawiamy w spokoju
    m
  end
end
 
# zapisanie do pliku
File.new(ARGV[0], "w").puts f
 
 

a potem:

 
$ ./google_t.rb /path/to/myapp/po/pl_PL/myapp.po
 

I już. Wiadomo, tłumaczenie nie jest idealne, ale w prostych przypadkach się sprawdza (poszczegołne słowa). Pliki wypada przejrzeć jeszcze np. poEdit`em w celu poprawienia błędów. Przynajmniej można się trochę pośmiać ;)

4 komentarze

  • Seban 18 czerwca 2008 20:40:58

    Faktycznie leniwy jesteś. Ale aż się boję co będzie jak aplikacja, którą tworzę pójdzie do tłumaczenia

  • Radarek 20 czerwca 2008 00:09:27

    Podoba mi się Twoje lenistwo :).

  • Teamon 20 czerwca 2008 00:11:04

    Podobno lenistwo jest motorem postępu ^^

  • Jacek 10 listopada 2008 11:58:26

    Bardzo ciekawe rzecz. Wyobrażam sobie jeszcze kilka możliwości zastosowania takiego skryptu, np. do "generowania" pseudooryginalnych artykułów po polsku.
    PS. Moje lenistwo zdecydowanie z czasem postępuje...

Zostaw komentarz

code