Class: LocalchI18n::MissingKeysFinder
- Inherits:
-
Object
- Object
- LocalchI18n::MissingKeysFinder
- Defined in:
- lib/localch_i18n/missing_keys_finder.rb
Instance Method Summary collapse
-
#all_keys ⇒ Object
Returns an array with all keys from all locales.
- #collect_keys(scope, translations) ⇒ Object
- #find_missing_keys ⇒ Object
-
#initialize(backend) ⇒ MissingKeysFinder
constructor
A new instance of MissingKeysFinder.
-
#key_exists?(key, locale) ⇒ Boolean
Returns true if key exists in the given locale.
- #load_config ⇒ Object
- #load_translations ⇒ Object
- #output_available_locales ⇒ Object
- #output_missing_keys(missing_keys) ⇒ Object
- #output_unique_key_stats(keys) ⇒ Object
Constructor Details
#initialize(backend) ⇒ MissingKeysFinder
Returns a new instance of MissingKeysFinder.
3 4 5 6 7 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 3 def initialize(backend) @backend = backend self.load_config self.load_translations end |
Instance Method Details
#all_keys ⇒ Object
Returns an array with all keys from all locales
10 11 12 13 14 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 10 def all_keys I18n.backend.send(:translations).collect do |check_locale, translations| collect_keys([], translations).sort end.flatten.uniq end |
#collect_keys(scope, translations) ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 71 def collect_keys(scope, translations) full_keys = [] translations.to_a.each do |key, translations| new_scope = scope.dup << key if translations.is_a?(Hash) full_keys += collect_keys(new_scope, translations) else full_keys << new_scope.join('.') end end return full_keys end |
#find_missing_keys ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 16 def find_missing_keys output_available_locales output_unique_key_stats(all_keys) missing_keys = {} all_keys.each do |key| I18n.available_locales.each do |locale| skip = false ls = locale.to_s if !@yaml[ls].nil? @yaml[ls].each do |re| if key.match(re) skip = true break end end end if !key_exists?(key, locale) && skip == false if missing_keys[key] missing_keys[key] << locale else missing_keys[key] = [locale] end end end end output_missing_keys(missing_keys) return missing_keys end |
#key_exists?(key, locale) ⇒ Boolean
Returns true if key exists in the given locale
85 86 87 88 89 90 91 92 93 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 85 def key_exists?(key, locale) I18n.locale = locale I18n.translate(key, :raise => true) return true rescue I18n::MissingInterpolationArgument return true rescue I18n::MissingTranslationData return false end |
#load_config ⇒ Object
100 101 102 103 104 105 106 107 108 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 100 def load_config @yaml = {} begin @yaml = YAML.load_file(File.join(Rails.root, 'config', 'ignore_missing_i18n_keys.yml')) rescue => e STDERR.puts "No ignore_missing_keys.yml config file." end end |
#load_translations ⇒ Object
95 96 97 98 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 95 def load_translations # Make sure we’ve loaded the translations I18n.backend.send(:init_translations) end |
#output_available_locales ⇒ Object
50 51 52 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 50 def output_available_locales puts "#{I18n.available_locales.size} #{I18n.available_locales.size == 1 ? 'locale' : 'locales'} available: #{I18n.available_locales.join(', ')}" end |
#output_missing_keys(missing_keys) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 54 def output_missing_keys(missing_keys) if missing_keys.size > 0 puts "#{missing_keys.size} #{missing_keys.size == 1 ? 'key is missing' : 'keys are missing'} from one or more locales:" missing_keys.keys.sort.each do |key| puts "'#{key}': Missing from #{missing_keys[key].collect(&:inspect).join(', ')}" end puts "\nERROR: #{missing_keys.size} #{missing_keys.size == 1 ? 'key is missing' : 'keys are missing'} from one or more locales." else puts "No keys are missing" end end |
#output_unique_key_stats(keys) ⇒ Object
66 67 68 69 |
# File 'lib/localch_i18n/missing_keys_finder.rb', line 66 def output_unique_key_stats(keys) number_of_keys = keys.size puts "#{number_of_keys} #{number_of_keys == 1 ? 'unique key' : 'unique keys'} found." end |