class RailsI18nCheck::Checker
Public Class Methods
new(locales, root, ignored_keys=[], raise_on_missing=true)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 6 def initialize(locales, root, ignored_keys=[], raise_on_missing=true) @locales = locales @root = root @ignored_keys = ignored_keys @raise_on_missing = raise_on_missing end
Public Instance Methods
find_missing(all_keys, locale, locale_data)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 29 def find_missing(all_keys, locale, locale_data) puts "Keys missing in #{locale}" find_missing_in_hash all_keys, locale_data[locale], "" end
find_missing_in_hash(registry, local, path)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 34 def find_missing_in_hash(registry, local, path) registry.map do |key, val| if local[key].nil? if @ignored_keys.member? key [] else info = missing_info val res = "#{path}.#{key} #{info}" puts res [res] end elsif val.is_a? Hash find_missing_in_hash val, local[key], "#{path}.#{key}" end end end
load_all_keys(files)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 72 def load_all_keys(files) files.inject({}) do |data, file| file_data = YAML.load_file(file) file_locale = file_data.keys.first merge_keys data, file_data[file_locale], Pathname.new(file).basename.to_s end end
load_locale(files, locale)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 61 def load_locale(files, locale) files.inject({}) do |data, file| file_data = YAML.load_file(file) if file_data[locale] merge data, file_data else data end end end
merge(into, data)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 96 def merge(into, data) data.each do |key, value| if into[key] && into[key].is_a?(Hash) merge into[key], value else into[key] = value end end into end
merge_keys(into, data, file)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 80 def merge_keys(into, data, file) return {} unless data data.each do |key, value| if into[key] && into[key].is_a?(Hash) merge_keys into[key], value, file elsif value.is_a? Hash into[key] = {} merge_keys into[key], value, file else into[key] ||= [] into[key] << file end end into end
missing_info(value)
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 51 def missing_info(value) if value.is_a?(Hash) value.each do |_, val| return missing_info val end else value end end
run()
click to toggle source
# File lib/rails-i18n-check/checker.rb, line 13 def run locales_dir = File.join(@root, "config/locales"); locale_files = Dir.glob(File.join(locales_dir, "**/*.yml")) all_keys = load_all_keys(locale_files) missing_keys = @locales.map do |locale| locale_data = load_locale locale_files, locale find_missing all_keys, locale, locale_data end missing_keys.flatten!.reject! &:nil? if @raise_on_missing && missing_keys.any? raise "Some translations are missing." else missing_keys end end