27 lines
		
	
	
	
		
			729 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
	
		
			729 B
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| class TranslateStatusService < BaseService
 | |
|   CACHE_TTL = 1.day.freeze
 | |
| 
 | |
|   include FormattingHelper
 | |
| 
 | |
|   def call(status, target_language)
 | |
|     raise Mastodon::NotPermittedError unless status.public_visibility? || status.unlisted_visibility?
 | |
| 
 | |
|     @status = status
 | |
|     @content = status_content_format(@status)
 | |
|     @target_language = target_language
 | |
| 
 | |
|     Rails.cache.fetch("translations/#{@status.language}/#{@target_language}/#{content_hash}", expires_in: CACHE_TTL) { translation_backend.translate(@content, @status.language, @target_language) }
 | |
|   end
 | |
| 
 | |
|   private
 | |
| 
 | |
|   def translation_backend
 | |
|     TranslationService.configured
 | |
|   end
 | |
| 
 | |
|   def content_hash
 | |
|     Digest::SHA256.base64digest(@content)
 | |
|   end
 | |
| end
 |