Module: R18n::Translated::Base
- Defined in:
- lib/r18n-core/translated.rb
Overview
Module with class methods, which be added after R18n::Translated include.
Instance Method Summary collapse
-
#translation(name, options = {}) ⇒ Object
Add proxy-method ‘name`.
-
#translation_types ⇒ Object
‘Hash` of translation method names to it type for filters.
-
#translations(*names) ⇒ Object
Add several proxy methods.
-
#unlocalized_getters(method) ⇒ Object
Return ‘Hash` of locale code to getter method for proxy `method`.
-
#unlocalized_methods ⇒ Object
Return array of methods to find ‘unlocalized_getters` or `unlocalized_setters`.
-
#unlocalized_setters(method) ⇒ Object
Return ‘Hash` of locale code to setter method for proxy `method`.
Instance Method Details
#translation(name, options = {}) ⇒ Object
Add proxy-method ‘name`. See `R18n::Translated` for description. It’s more useful to set options.
translation :desciption, type: 'markdown'
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/r18n-core/translated.rb', line 112 def translation(name, = {}) if [:methods] @unlocalized_getters[name] = [:methods].map { |l, i| [l.to_s, i.to_s] }.to_h unless [:no_write] @unlocalized_setters[name] = [:methods].map { |l, i| [l.to_s, i.to_s + '='] }.to_h end end translation_types[name] = [:type] define_method name do |*params| unlocalized = self.class.unlocalized_getters(name) result = nil r18n.locales.each do |locale| code = locale.downcased_code next unless unlocalized.key? code result = send( unlocalized[code], *(params unless [:no_params]) ) next unless result path = "#{self.class.name}##{name}" type = self.class.translation_types[name] if type return r18n.filter_list.process( :all, type, result, locale, path, params ) elsif result.is_a? String result = TranslatedString.new(result, locale, path) return r18n.filter_list.process_string( :all, result, path, params ) else return result end end result end return if [:no_write] define_method "#{name}=" do |*params| unlocalized = self.class.unlocalized_setters(name) r18n.locales.each do |locale| code = locale.code next unless unlocalized.key? code return send unlocalized[code], *params end end end |
#translation_types ⇒ Object
‘Hash` of translation method names to it type for filters.
96 97 98 |
# File 'lib/r18n-core/translated.rb', line 96 def translation_types @translation_types ||= {} end |
#translations(*names) ⇒ Object
Add several proxy methods. See ‘R18n::Translated` for description. It’s more compact, that ‘translation`.
translations :title, :keywords, [:desciption, { type: 'markdown' }]
104 105 106 |
# File 'lib/r18n-core/translated.rb', line 104 def translations(*names) names.each { |name| translation(*name) } end |
#unlocalized_getters(method) ⇒ Object
Return ‘Hash` of locale code to getter method for proxy `method`. If you didn’t set map in ‘translation` option `methods`, it will be detect automatically.
178 179 180 181 182 183 184 185 186 187 |
# File 'lib/r18n-core/translated.rb', line 178 def unlocalized_getters(method) matcher = Regexp.new('^' + Regexp.escape(method.to_s) + '_(\w+)$') unless @unlocalized_getters.key? method @unlocalized_getters[method] = {} unlocalized_methods.select { |i| i =~ matcher }.each do |i| @unlocalized_getters[method][i.to_s.match(matcher)[1]] = i.to_s end end @unlocalized_getters[method] end |
#unlocalized_methods ⇒ Object
Return array of methods to find ‘unlocalized_getters` or `unlocalized_setters`.
171 172 173 |
# File 'lib/r18n-core/translated.rb', line 171 def unlocalized_methods instance_methods end |
#unlocalized_setters(method) ⇒ Object
Return ‘Hash` of locale code to setter method for proxy `method`. If you didn’t set map in ‘translation` option `methods`, it will be detect automatically.
192 193 194 195 196 197 198 199 200 201 |
# File 'lib/r18n-core/translated.rb', line 192 def unlocalized_setters(method) matcher = Regexp.new('^' + Regexp.escape(method.to_s) + '_(\w+)=$') unless @unlocalized_setters.key? method @unlocalized_setters[method] = {} unlocalized_methods.select { |i| i =~ matcher }.each do |i| @unlocalized_setters[method][i.to_s.match(matcher)[1]] = i.to_s end end @unlocalized_setters[method] end |