class ReactOnRails::Locales::Base
Public Class Methods
new()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 39 def initialize return if i18n_dir.nil? return unless obsolete? @translations, @defaults = generate_translations convert end
Private Instance Methods
convert()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 101 def convert file_names.each do |name| template = send(:"template_#{name}") path = file(name) generate_file(template, path) end end
default_locale()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 97 def default_locale @default_locale ||= I18n.default_locale.to_s || "en" end
exist_files()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 57 def exist_files @exist_files ||= files.select { |file| File.exist?(file) } end
file(name)
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 75 def file(name) "#{i18n_dir}/#{name}.#{file_format}" end
file_format()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 49 def file_format; end
file_names()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 67 def file_names %w[translations default] end
files()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 71 def files @files ||= file_names.map { |n| file(n) } end
files_are_outdated()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 61 def files_are_outdated latest_yml = locale_files.map { |file| File.mtime(file) }.max earliest = exist_files.map { |file| File.mtime(file) }.min latest_yml > earliest end
flatten(translations)
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 138 def flatten(translations) translations.each_with_object({}) do |(k, v), h| if v.is_a? Hash flatten(v).map { |hk, hv| h[:"#{k}.#{hk}"] = hv } elsif v.is_a?(String) h[k] = v.gsub("%{", "{") elsif !v.is_a?(Array) h[k] = v end end end
flatten_defaults(val)
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 131 def flatten_defaults(val) flatten(val).each_with_object({}) do |(k, v), h| key = format(k) h[key] = { id: k, defaultMessage: v } end end
format(input)
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 127 def format(input) input.to_s.tr(".", "_").camelize(:lower).to_sym end
generate_file(template, path)
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 109 def generate_file(template, path) result = ERB.new(template).result File.write(path, result) end
generate_translations()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 114 def generate_translations translations = {} defaults = {} locale_files.each do |f| translation = YAML.safe_load(File.open(f)) key = translation.keys[0] val = flatten(translation[key]) translations = translations.deep_merge(key => val) defaults = defaults.deep_merge(flatten_defaults(val)) if key == default_locale end [translations.to_json, defaults.to_json] end
i18n_dir()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 89 def i18n_dir @i18n_dir ||= ReactOnRails.configuration.i18n_dir end
i18n_yml_dir()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 93 def i18n_yml_dir @i18n_yml_dir ||= ReactOnRails.configuration.i18n_yml_dir end
locale_files()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 79 def locale_files @locale_files ||= if i18n_yml_dir.present? Dir["#{i18n_yml_dir}/**/*.yml"] else ReactOnRails::Utils.truthy_presence( Rails.application && Rails.application.config.i18n.load_path ).presence end end
obsolete?()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 51 def obsolete? return true if exist_files.empty? files_are_outdated end
template_default()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 156 def template_default <<-JS.strip_heredoc import { defineMessages } from 'react-intl'; const defaultLocale = '#{default_locale}'; const defaultMessages = defineMessages(#{@defaults}); export { defaultMessages, defaultLocale }; JS end
template_translations()
click to toggle source
# File lib/react_on_rails/locales/base.rb, line 150 def template_translations <<-JS.strip_heredoc export const translations = #{@translations}; JS end