Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class String
- def to_p
- Iconv.iconv('ascii//translit//IGNORE', 'utf-8', self).first.gsub("'", '').gsub(/[^a-zA-Z0-9-]+/, '-').gsub(/^-/, '').gsub(/-$/, '')
- end
- def t(*values)
- Translation.translate(self) % values
- end
- def tt(*values)
- Translation.translate(self) % values.map {|e| e.t}
- end
- class Translations < Application
- # provides :xml, :yaml, :js
- before :ensure_authenticated
- before :ensure_authenticated_as, :with => Admin
- @@gtranslating = false
- def gtranslate(language)
- unless @@gtranslating && @@gtranslating.status == "sleep"
- @@gtranslating = Thread.new do
- g = GoogleTranslate.new("en", "pl", "latin2")
- trans = Translation.all(:language => language, :value => "")
- trans.each do |t|
- t.value = g.translate(t.id)
- t.save
- end
- end
- end
- redirect resource(:translations, :language => language) #, :message => "%s phrases translated".t(trans.size)
- end
- def kill_gtranslate
- @@gtranslating.kill if @@gtranslating
- redirect resource(:translations), :message => "GTranslate killed".t
- end
- def index(page = 1)
- opts = {}
- opts[:language] = params[:language] unless params[:language].blank?
- @translations = Translation.all(opts).paginate(:page => page)
- @gtranslating = @@gtranslating
- display @translations
- end
- def edit(hash, language)
- only_provides :html
- @translation = Translation.get_by_hash_and_language(hash, language)
- raise NotFound unless @translation
- display @translation
- end
- def update(translation)
- @translation = Translation.get_by_hash_and_language(params[:hash], translation[:language])
- raise NotFound unless @translation
- if @translation.update_attributes(params[:translation])
- redirect resource(:translations), :message => "Translation(s) was successfully updated".t
- else
- display @translation, :edit
- end
- end
- def destroy(hash, language)
- @translation = Translation.get_by_hash_and_language(hash, language)
- raise NotFound unless @translation
- if @translation.destroy
- redirect resource(:translations), :message => "Translation deleted".t
- else
- raise InternalServerError
- end
- end
- end # Translations
- class Translation
- include DataMapper::Resource
- @@cache = {}
- @@language = "pl"
- @@languages = ["pl", "de"]
- property :id, String, :key => true
- property :value, String
- property :language, String, :key => true
- def hash
- Merb::Parse.escape([Marshal.dump(id)].pack("m"))
- end
- after :save do
- Translation.update_cache
- end
- after :destroy do
- Translation.update_cache
- end
- def related
- @related ||= begin
- parts = id.gsub('%', '').split.reject{|e| e.size < 3}
- cond = ["(" + (["id ILIKE ?"] * parts.size).join(" OR ") + ")"] + parts.map{|e| "%#{e}%"}
- Translation.all(:conditions => cond, :language => language, :id.not => self.key)
- end
- end
- def related=(list)
- list.each_pair do |hash, params|
- Translation.get_by_hash_and_language(hash, self.language).update_attributes(params)
- end
- end
- class << self
- def blank
- Translation.all(:value => "")
- end
- def languages
- @@languages
- end
- def get_by_hash_and_language(hash, language)
- Translation.get(Marshal.load(Merb::Parse.unescape(hash).unpack("m").first), language)
- end
- def init(language)
- @@language = language
- update_cache
- end
- def translate(id)
- '{%s}' % if @@cache.has_key?(id)
- @@cache[id].blank? ? id : @@cache[id]
- else
- Translation.create(:id => id, :value => "", :language => @@language)
- @@cache[id] = ""
- id
- end
- end
- def update_cache
- Translation.all(:language => @@language).each {|t| @@cache[t.id] = t.value }
- end
- end
- end
- Translation.init("pl") #if defined?(Translation) gdzies w init
Add Comment
Please, Sign In to add comment