Class: Dry::Schema::Messages::I18n

Inherits:
Abstract
  • Object
show all
Defined in:
lib/dry/schema/messages/i18n.rb

Overview

I18n message backend

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Abstract

build, #call, #filled_lookup_paths, #looked_up_paths, #lookup_paths, #namespaced, #root, #rule, #rule_lookup_paths, setting_names, #translate

Constructor Details

#initializeI18n

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Returns a new instance of I18n.



19
20
21
22
# File 'lib/dry/schema/messages/i18n.rb', line 19

def initialize
  super
  @t = ::I18n.method(:t)
end

Instance Attribute Details

#tMethod (readonly)

Translation function

Returns:

  • (Method)


16
17
18
# File 'lib/dry/schema/messages/i18n.rb', line 16

def t
  @t
end

Instance Method Details

#default_localeObject

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



73
74
75
# File 'lib/dry/schema/messages/i18n.rb', line 73

def default_locale
  super || ::I18n.locale || ::I18n.default_locale
end

#get(key, options = EMPTY_HASH) ⇒ String

Get a message for the given key and its options

Parameters:

  • key (Symbol)
  • options (Hash) (defaults to: EMPTY_HASH)

Returns:

  • (String)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/dry/schema/messages/i18n.rb', line 32

def get(key, options = EMPTY_HASH)
  return unless key

  result = t.(key, locale: options.fetch(:locale, default_locale))

  if result.is_a?(Hash)
    text = result[:text]
    meta = result.dup.tap { |h| h.delete(:text) }
  else
    text = result
    meta = EMPTY_HASH.dup
  end

  {
    text: text,
    meta: meta
  }
end

#interpolatable_data(_key, _options, **data) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



99
100
101
# File 'lib/dry/schema/messages/i18n.rb', line 99

def interpolatable_data(_key, _options, **data)
  data
end

#interpolate(key, options, **data) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/dry/schema/messages/i18n.rb', line 104

def interpolate(key, options, **data)
  text_key = "#{key}.text"

  opts = {
    locale: default_locale,
    **options,
    **data
  }

  resolved_key = key?(text_key, opts) ? text_key : key

  t.(resolved_key, **opts)
end

#key?(key, options) ⇒ Boolean

Check if given key is defined

Returns:

  • (Boolean)


56
57
58
59
# File 'lib/dry/schema/messages/i18n.rb', line 56

def key?(key, options)
  ::I18n.exists?(key, options.fetch(:locale, default_locale)) ||
    ::I18n.exists?(key, ::I18n.default_locale)
end

#merge(paths) ⇒ Messages::I18n

Merge messages from an additional path

Parameters:

  • paths (String, Array<String>)

Returns:



68
69
70
# File 'lib/dry/schema/messages/i18n.rb', line 68

def merge(paths)
  prepare(paths)
end

#prepare(paths = config.load_paths) ⇒ Object

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/dry/schema/messages/i18n.rb', line 78

def prepare(paths = config.load_paths)
  paths.each do |path|
    data = ::YAML.load_file(path)

    if custom_top_namespace?(path)
      top_namespace = config.top_namespace

      mapped_data = data.transform_values { |v|
        {top_namespace => v[DEFAULT_MESSAGES_ROOT]}
      }

      store_translations(mapped_data)
    else
      store_translations(data)
    end
  end

  self
end