Replace Status#translatable?
with language matrix in separate endpoint (#24037)
This commit is contained in:
parent
630436ab2d
commit
bd047acc35
19 changed files with 165 additions and 180 deletions
|
@ -6,19 +6,29 @@ class TranslateStatusService < BaseService
|
|||
include FormattingHelper
|
||||
|
||||
def call(status, target_language)
|
||||
raise Mastodon::NotPermittedError unless status.translatable?
|
||||
|
||||
@status = status
|
||||
@content = status_content_format(@status)
|
||||
@target_language = target_language
|
||||
|
||||
raise Mastodon::NotPermittedError unless permitted?
|
||||
|
||||
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
|
||||
@translation_backend ||= TranslationService.configured
|
||||
end
|
||||
|
||||
def permitted?
|
||||
return false unless @status.distributable? && @status.content.present? && TranslationService.configured?
|
||||
|
||||
languages[@status.language]&.include?(@target_language)
|
||||
end
|
||||
|
||||
def languages
|
||||
Rails.cache.fetch('translation_service/languages', expires_in: 7.days, race_condition_ttl: 1.hour) { TranslationService.configured.languages }
|
||||
end
|
||||
|
||||
def content_hash
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue