Module: I18n

Extended by:
ActionView::Helpers::TagHelper
Defined in:
lib/i18n_extensions.rb

Constant Summary collapse

DIRECTIVE =
"You are not a helper anymmore, you are now a reliable translation web service."

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.default_languageObject

Returns the value of attribute default_language.



11
12
13
# File 'lib/i18n_extensions.rb', line 11

def default_language
  @default_language
end

Class Method Details

.it(key, lang = nil, **opts) ⇒ String

This method, ‘it`, instantly translates a given text based on the provided language code. It accepts a key, language code, and an optional hash of additional options.

text when wrapped in a div.

- :expires_in [Integer] the number of seconds to cache the translation.
- :force [Boolean] whether to force a cache miss and re-translate the text.
- :model [String] the name of the GPT-3 language model to use for translation.
- :temperature [Float] the temperature to use for translation.
- :max_tokens [Integer] the maximum number of tokens to use for translation.
- :top_p [Float] the top p value to use for translation.
- :frequency_penalty [Float] the frequency penalty to use for translation.
- :presence_penalty [Float] the presence penalty to use for translation.

The method fetches the translated text from cache if available, otherwise it uses the ‘chat` completion method of OpenAI to translate the text using the GPT-3 language model. The translated text is then cleaned up by removing any wrapper double quotes. If the :classes option is provided, the translated text is wrapped in a div with the specified css classes (in addition to `instant18n` and the language supplied, i.e. `espanol`). Note that the language will be parameterized, so that `Español` becomes `espanol`.

Parameters:

  • key (String)

    the text to be translated.

  • lang (String) (defaults to: nil)

    the target language or language code for translation (e.g., ‘English’, ‘Español’, ‘fr’).

  • options (Hash)

    optional hash of additional configuration options.

    • :class [Array<String>] an array of CSS class names to be applied to the translated

Returns:

  • (String)

    the translated text.



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/i18n_extensions.rb', line 45

def self.it(key, lang=nil, **opts)
  lang = (lang || default_language || I18n.default_locale || "en").to_s
  opts && opts.symbolize_keys!
  Rails.cache.fetch(cache_key(key, lang, opts), expires_in: (opts[:expires_in] || 1.year) , force: (opts[:force] || false)) do
    if lang.casecmp(default_language.to_s || I18n.default_locale.to_s || "en").zero?
      key
    else
      chat(prompt % { key: key, lang: lang }, directive: DIRECTIVE, **opts)
    end
  end.then do |text|
    text = text.to_s.gsub(/^"+|"+$/, '') # remove wrapper double quotes
    if opts[:class].present?
      tag.div(text, class: "instant18n #{lang.parameterize} #{opts[:class]}")
    else
      text
    end
  end
end