Module: Emoninja::I18n
- Defined in:
- lib/emoninja/i18n.rb
Overview
Utility to translate emoji names to different languages
Constant Summary collapse
- FAIL_AFTER =
attempts
10
- LOCAL_I18N =
File.join(__dir__, '..', '..', 'data', 'translations', '%{lang}.yml').freeze
- YT_CONFIG =
File.join(__dir__, '..', '..', 'config', 'yandex_translate.yml').freeze
Class Method Summary collapse
- .key(term, lang) ⇒ Object (also: [])
- .reversed_translations(lang) ⇒ Object
- .translations(lang) ⇒ Object
Class Method Details
.key(term, lang) ⇒ Object Also known as: []
46 47 48 |
# File 'lib/emoninja/i18n.rb', line 46 def key term, lang !lang.nil? && lang.to_s != 'en' && reversed_translations(lang)[term.downcase] || term end |
.reversed_translations(lang) ⇒ Object
35 36 37 |
# File 'lib/emoninja/i18n.rb', line 35 def reversed_translations lang (@reversed_translations ||= {})[lang] ||= translations(lang).invert.map { |k, v| [k.downcase, v.downcase] }.to_h end |
.translations(lang) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/emoninja/i18n.rb', line 13 def translations lang file = LOCAL_I18N % { lang: lang } (@translations ||= {})[lang] ||= preload file keys = [Data.vocabulary, Data.argo].map(&:keys).reduce(:|) - @translations[lang].keys return @translations[lang] if keys.empty? require 'yandex-api' Yandex::API::Translate.load YT_CONFIG errors_count = 0 @translations[lang].merge!( keys.each_with_object({}) do |k, memo| begin result = Yandex::API::Translate.do(k, lang) memo[k] = result['text'].is_a?(Array) ? result['text'].join(' ') : result['text'] if result['code'] == 200 rescue break memo if (errors_count += 1) >= FAIL_AFTER end end ).tap { |data| File.write(file, data.to_yaml) } end |