module I18n::Backend::CacheFile

Overwrites the Base #load_file method to cache loaded file contents.

Attributes

path_roots[RW]

Optionally provide #path_roots array to normalize filename paths, to make the cached i18n data portable across environments.

Protected Instance Methods

load_file(filename) click to toggle source

Track loaded translation files in the `i18n.load_file` scope, and skip loading the file if its contents are still up-to-date.

Calls superclass method
# File lib/i18n/backend/cache_file.rb, line 16
def load_file(filename)
  initialized = !respond_to?(:initialized?) || initialized?
  key = I18n::Backend::Flatten.escape_default_separator(normalized_path(filename))
  old_mtime, old_digest = initialized && lookup(:i18n, key, :load_file)
  return if (mtime = File.mtime(filename).to_i) == old_mtime ||
            (digest = Digest::SHA2.file(filename).hexdigest) == old_digest
  super
  store_translations(:i18n, load_file: { key => [mtime, digest] })
end
normalized_path(file) click to toggle source

Translate absolute filename to relative path for i18n key.

# File lib/i18n/backend/cache_file.rb, line 27
def normalized_path(file)
  return file unless path_roots
  path = path_roots.find(&file.method(:start_with?)) ||
         raise(InvalidLocaleData.new(file, 'outside expected path roots'))
  file.sub(path, path_roots.index(path).to_s)
end