From 0385af7c31433b7ad5bfb0ac3cef8f939d0dbdbd Mon Sep 17 00:00:00 2001 From: Tom Corley Date: Tue, 19 Dec 2017 14:36:58 -0500 Subject: [PATCH] add locale as an optional parameter to generated enum i18n methods which is helpful for iterating through optional labels based on available languages change default_locale to locale --- lib/enum_help/i18n.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/enum_help/i18n.rb b/lib/enum_help/i18n.rb index 6a3fe46..fb6c532 100644 --- a/lib/enum_help/i18n.rb +++ b/lib/enum_help/i18n.rb @@ -25,10 +25,10 @@ def self.define_attr_i18n_method(klass, attr_name) attr_i18n_method_name = "#{attr_name}_i18n" klass.class_eval <<-METHOD, __FILE__, __LINE__ - def #{attr_i18n_method_name} + def #{attr_i18n_method_name}(locale = ::I18n.locale) enum_label = self.send(:#{attr_name}) if enum_label - ::EnumHelp::Helper.translate_enum_label('#{klass}', :#{attr_name}, enum_label) + ::EnumHelp::Helper.translate_enum_label('#{klass}', :#{attr_name}, enum_label, locale) else nil end @@ -41,17 +41,21 @@ def self.define_collection_i18n_method(klass, attr_name) collection_i18n_method_name = "#{collection_method_name}_i18n" klass.instance_eval <<-METHOD, __FILE__, __LINE__ - def #{collection_i18n_method_name} + def #{collection_i18n_method_name}(locale = ::I18n.locale) collection_array = #{collection_method_name}.collect do |label, _| - [label, ::EnumHelp::Helper.translate_enum_label('#{klass}', :#{attr_name}, label)] + [label, ::EnumHelp::Helper.translate_enum_label('#{klass}', :#{attr_name}, label, locale)] end Hash[collection_array].with_indifferent_access end METHOD end - def self.translate_enum_label(klass, attr_name, enum_label) - ::I18n.t("enums.#{klass.to_s.underscore.gsub('/', '.')}.#{attr_name}.#{enum_label}", default: enum_label.humanize) + def self.translate_enum_label(klass, attr_name, enum_label, locale = ::I18n.locale) + if locale.nil? || !::I18n.available_locales.include?(locale.to_sym) + locale = ::I18n.locale + end + + ::I18n.t("enums.#{klass.to_s.underscore.gsub('/', '.')}.#{attr_name}.#{enum_label}", locale: locale, default: enum_label.humanize) end end