lib/i18n/tasks/missing_keys.rb in i18n-tasks-0.2.19 vs lib/i18n/tasks/missing_keys.rb in i18n-tasks-0.2.20
- old
+ new
@@ -1,23 +1,56 @@
-module I18n::Tasks::MissingKeys
- # @return Array missing keys, i.e. key that are in the code but are not in the base locale data
- def keys_not_in_base
- find_source_keys.reject { |key|
- key_value?(key, base_locale) || pattern_key?(key) || ignore_key?(key, :missing)
- }
- end
+module I18n::Tasks
+ module MissingKeys
+ # @param [:missing_from_base, :missing_from_locale, :eq_base] type (default nil)
+ # @return [KeyGroup]
+ def missing_keys(opts = {})
+ type = opts[:type]
+ locales = non_base_locales(opts[:locales])
+ if type
+ if type == :missing_from_base
+ keys_missing_from_base
+ else
+ locales.map { |locale| send("keys_#{type}", locale) }.reduce(:+)
+ end
+ else
+ missing_keys(type: :missing_from_base) +
+ missing_keys(type: :eq_base, locales: locales) +
+ missing_keys(type: :missing_from_locale, locales: locales)
+ end
+ end
- # @return Array keys missing (nil or blank?) in locale but present in base
- def keys_blank_in_locale(locale)
- traverse_map_if data[base_locale] do |key, base_value|
- key if !ignore_key?(key, :missing) && !key_value?(key, locale) && !key_value?(depluralize_key(key), locale)
+ def untranslated_keys(locales = nil)
+ I18n::Tasks.warn_deprecated("#untranslated_keys. Please use #missing_keys instead")
+ missing_keys(locales: locales)
end
- end
- # @return Array keys missing value (but present in base)
- def keys_eq_base(locale)
- traverse_map_if data[base_locale] do |key, base_value|
- key if base_value == t(locale, key) && !ignore_key?(key, :eq_base, locale)
+ # @return [KeyGroup] missing keys, i.e. key that are in the code but are not in the base locale data
+ def keys_missing_from_base
+ @keys_missing_from_base ||= begin
+ KeyGroup.new(
+ used_keys.keys.reject { |k|
+ key = k.key
+ key_value?(key, base_locale) || pattern_key?(key) || ignore_key?(key, :missing)
+ }.map(&:clone_orphan), type: :missing_from_base, locale: base_locale)
+ end
end
- end
-end
\ No newline at end of file
+ # @return [KeyGroup] keys missing (nil or blank?) in locale but present in base
+ def keys_missing_from_locale(locale)
+ return keys_missing_from_base if locale == base_locale
+ @keys_missing_from_locale ||= {}
+ @keys_missing_from_locale[locale] ||= KeyGroup.new(
+ traverse_map_if(data[base_locale]) { |key, base_value|
+ key if !ignore_key?(key, :missing) && !key_value?(key, locale) && !key_value?(depluralize_key(key), locale)
+ }, type: :missing_from_locale, locale: locale)
+
+ end
+
+ # @return [KeyGroup] keys missing value (but present in base)
+ def keys_eq_base(locale)
+ @keys_eq_base ||= KeyGroup.new(
+ traverse_map_if(data[base_locale]) { |key, base_value|
+ key if base_value == t(locale, key) && !ignore_key?(key, :eq_base, locale)
+ }, type: :eq_base, locale: locale)
+ end
+ end
+end