forked from glebm/i18n-tasks
-
Notifications
You must be signed in to change notification settings - Fork 0
/
yandex_translator.rb
61 lines (49 loc) · 1.38 KB
/
yandex_translator.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# frozen_string_literal: true
require 'i18n/tasks/translators/base_translator'
module I18n::Tasks::Translators
class YandexTranslator < BaseTranslator
def initialize(*)
begin
require 'yandex-translator'
rescue LoadError
raise ::I18n::Tasks::CommandError, "Add gem 'yandex-translator' to your Gemfile to use this command"
end
super
end
protected
def translate_values(list, **options)
list.map { |item| translator.translate(item, options) }
end
def options_for_translate_values(from:, to:, **options)
options.merge(
from: to_yandex_compatible_locale(from),
to: to_yandex_compatible_locale(to)
)
end
def options_for_html
{}
end
def options_for_plain
{}
end
def no_results_error_message
I18n.t('i18n_tasks.yandex_translate.errors.no_results')
end
private
# Convert 'es-ES' to 'es'
def to_yandex_compatible_locale(locale)
return locale unless locale.include?('-')
locale.split('-', 2).first
end
def translator
@translator ||= Yandex::Translator.new(api_key)
end
def api_key
@api_key ||= begin
key = @i18n_tasks.translation_config[:yandex_api_key]
fail ::I18n::Tasks::CommandError, I18n.t('i18n_tasks.yandex_translate.errors.no_api_key') if key.blank?
key
end
end
end
end