Guest User

Untitled

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