Guest User

Untitled

a guest
May 23rd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.74 KB | None | 0 0
  1. ## init
  2.  
  3. Merb::BootLoader.after_app_loads do
  4. Translation.init("pl") if defined?(Translation)
  5.  
  6. ## gugl
  7.  
  8. require "net/http"
  9. require "iconv"
  10.  
  11. class GoogleTranslate
  12.  
  13. def initialize(from = nil, to = nil, enc = nil)
  14. @from, @to, @enc = from, to, enc
  15. @http = Net::HTTP.new('translate.google.com')
  16. $KCODE = 'utf8'
  17. end
  18.  
  19. def translate(text)
  20. body = @http.get("/translate_a/t?client=t&text=#{text.gsub(" ", "%20").gsub(/.+?\|/, "")}&sl=#{@from}&tl=#{@to}").body
  21. str = Iconv.iconv("utf8", @enc, body).first[/"(.+)"/, 1].gsub("% s", " %s")
  22. Merb.logger.my_debug "#{text} => #{str}"
  23. str
  24. end
  25. end
  26.  
  27.  
  28. ## trans
  29.  
  30. class Translation
  31. include DataMapper::Resource
  32.  
  33. @@cache = {}
  34. @@language = "pl"
  35.  
  36. property :id, String, :key => true
  37. property :value, String
  38. property :language, String, :key => true
  39.  
  40. def hash
  41. Merb::Request.escape([Marshal.dump(id)].pack("m"))
  42. end
  43.  
  44. after :save do
  45. Translation.update_cache
  46. end
  47. after :destroy do
  48. Translation.update_cache
  49. end
  50.  
  51. def related
  52. @related ||= begin
  53. parts = id.split
  54. cond = ["(" + (["id ILIKE ?"] * parts.size).join(" OR ") + ")"] + parts.map{|e| "%#{e}%"}
  55. Translation.all(:conditions => cond, :language => language, :id.not => self.key)
  56. end
  57. end
  58.  
  59. def related=(list)
  60. list.each_pair do |hash, params|
  61. Translation.get_by_hash_and_language(hash, self.language).update_attributes(params)
  62. end
  63. end
  64.  
  65. class << self
  66.  
  67. def blank
  68. Translation.all(:value => "")
  69. end
  70.  
  71. def languages
  72. ["pl", "de"]
  73. end
  74.  
  75. def get_by_hash_and_language(hash, language)
  76. Translation.get(Marshal.load(Merb::Request.unescape(hash).unpack("m").first), language)
  77.  
  78. end
  79.  
  80. def init(language)
  81. @@language = language
  82. update_cache
  83. end
  84.  
  85. def translate(id)
  86. '{%s}' % if @@cache.has_key?(id)
  87. @@cache[id].blank? ? id : @@cache[id]
  88. else
  89. Translation.create(:id => id, :value => "", :language => @@language)
  90. @@cache[id] = ""
  91. id
  92. end
  93. end
  94.  
  95. def update_cache
  96. Translation.all(:language => @@language).each {|t| @@cache[t.id] = t.value }
  97. end
  98.  
  99. end
  100.  
  101. end
  102.  
  103.  
  104. ## la la
  105.  
  106. class Translations < Application
  107. # provides :xml, :yaml, :js
  108.  
  109. def gtranslate(language)
  110. g = GoogleTranslate.new("en", "pl", "latin2")
  111. trans = Translation.all(:language => language, :value => "")
  112. trans.each do |t|
  113. t.value = g.translate(t.id)
  114. t.save
  115. end
  116.  
  117. redirect resource(:translations, :language => language), :message => "%s phrases translated".t(trans.size)
  118. end
  119.  
  120. def index
  121. opts = {}
  122. opts[:language] = params[:language] unless params[:language].blank?
  123. @translations = Translation.all(opts)
  124. display @translations
  125. end
  126.  
  127. def edit(hash, language)
  128. only_provides :html
  129. @translation = Translation.get_by_hash_and_language(hash, language)
  130. raise NotFound unless @translation
  131. display @translation
  132. end
  133.  
  134. def update(translation)
  135. @translation = Translation.get_by_hash_and_language(params[:hash], translation[:language])
  136. raise NotFound unless @translation
  137. if @translation.update_attributes(params[:translation])
  138. redirect resource(:translations), :message => "Translation(s) was successfully updated".t
  139. else
  140. display @translation, :edit
  141. end
  142. end
  143.  
  144. def destroy(hash, language)
  145. @translation = Translation.get_by_hash_and_language(hash, language)
  146. raise NotFound unless @translation
  147. if @translation.destroy
  148. redirect resource(:translations), :message => "Translation deleted".t
  149. else
  150. raise InternalServerError
  151. end
  152. end
  153.  
  154. end # Translations
Add Comment
Please, Sign In to add comment