Class: Restaurants::FieldTranslationService

Inherits:
Object
  • Object
show all
Includes:
ElasticAPM::SpanHelpers
Defined in:
app/services/restaurants/field_translation_service.rb

Overview

Service for translating a single field without saving to database Returns translated text for frontend to populate form inputs

Direct Known Subclasses

Packages::FieldTranslationService

Constant Summary collapse

SUPPORTED_LANGUAGES =
{
  'en' => 'English',
  'th' => 'Thai',
  'zh' => 'Chinese (Traditional)',
  'cn' => 'Chinese (Simplified)',
  'ru' => 'Russian',
  'ko' => 'Korean',
  'ja' => 'Japanese',
  'ms' => 'Malay',
  'fr' => 'French',
  'de' => 'German',
  'es' => 'Spanish',
  'id' => 'Indonesian',
  'vi' => 'Vietnamese',
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(source_text:, field_name:, source_language: 'en', target_languages: []) ⇒ FieldTranslationService

Returns a new instance of FieldTranslationService.



28
29
30
31
32
33
# File 'app/services/restaurants/field_translation_service.rb', line 28

def initialize(source_text:, field_name:, source_language: 'en', target_languages: [])
  @source_text = source_text
  @source_language = source_language
  @target_languages = target_languages
  @field_name = field_name
end

Instance Attribute Details

#field_nameObject (readonly)

Returns the value of attribute field_name.



10
11
12
# File 'app/services/restaurants/field_translation_service.rb', line 10

def field_name
  @field_name
end

#source_languageObject (readonly)

Returns the value of attribute source_language.



10
11
12
# File 'app/services/restaurants/field_translation_service.rb', line 10

def source_language
  @source_language
end

#source_textObject (readonly)

Returns the value of attribute source_text.



10
11
12
# File 'app/services/restaurants/field_translation_service.rb', line 10

def source_text
  @source_text
end

#target_languagesObject (readonly)

Returns the value of attribute target_languages.



10
11
12
# File 'app/services/restaurants/field_translation_service.rb', line 10

def target_languages
  @target_languages
end

Instance Method Details

#callObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/services/restaurants/field_translation_service.rb', line 35

def call
  validate_inputs!

  # Filter out unsupported languages (km, la not supported by AWS Translate)
  supported_targets = target_languages.select { |lang| SUPPORTED_LANGUAGES.key?(lang) }

  if supported_targets.blank?
    return failure_result('No supported target languages selected')
  end

  translations = execute_translation(supported_targets)

  if translations.present?
    success_result(translations)
  else
    failure_result('Translation failed - no results returned')
  end
rescue StandardError => e
  APMErrorHandler.report(e, context: { field_name: field_name, source_language: source_language })
  failure_result("Translation error: #{e.message}")
end