class Dry::Schema::Messages::I18n
I18n
message backend
@api public
Attributes
t[R]
Translation function
@return [Method]
Public Class Methods
new()
click to toggle source
@api private
Calls superclass method
# File lib/dry/schema/messages/i18n.rb, line 19 def initialize super @t = ::I18n.method(:t) end
Public Instance Methods
default_locale()
click to toggle source
@api private
Calls superclass method
Dry::Schema::Messages::Abstract#default_locale
# File lib/dry/schema/messages/i18n.rb, line 73 def default_locale super || ::I18n.locale || ::I18n.default_locale end
get(key, options = EMPTY_HASH)
click to toggle source
Get a message for the given key and its options
@param [Symbol] key @param [Hash] options
@return [String]
@api public
# 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)
click to toggle source
@api private
# File lib/dry/schema/messages/i18n.rb, line 99 def interpolatable_data(_key, _options, **data) data end
interpolate(key, options, **data)
click to toggle source
@api private
# 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)
click to toggle source
Check if given key is defined
@return [Boolean]
@api public
# 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)
click to toggle source
Merge messages from an additional path
@param [String, Array<String>] paths
@return [Messages::I18n]
@api public
# File lib/dry/schema/messages/i18n.rb, line 68 def merge(paths) prepare(paths) end
prepare(paths = config.load_paths)
click to toggle source
@api private
# 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
Private Instance Methods
store_translations(data)
click to toggle source
@api private
# File lib/dry/schema/messages/i18n.rb, line 121 def store_translations(data) locales = data.keys.map(&:to_sym) ::I18n.available_locales |= locales locales.each do |locale| ::I18n.backend.store_translations(locale, data[locale.to_s]) end end