Module: R18n::Translated::Base
- Defined in:
- lib/r18n-core/translated.rb
Overview
Module with class methods, which be added after R18n::Translated include.
Instance Attribute Summary collapse
-
#translation_types ⇒ Object
readonly
Hash of translation method names to it type for filters.
Instance Method Summary collapse
-
#translation(name, options = {}) ⇒ Object
Add proxy-method
name
. -
#translations(*methods) ⇒ 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
orunlocalized_setters
. -
#unlocalized_setters(method) ⇒ Object
Return Hash of locale code to setter method for proxy
method
.
Instance Attribute Details
#translation_types ⇒ Object (readonly)
Hash of translation method names to it type for filters.
97 98 99 |
# File 'lib/r18n-core/translated.rb', line 97 def translation_types @translation_types end |
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'
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 |
# File 'lib/r18n-core/translated.rb', line 113 def translation(name, = {}) if [:methods] @unlocalized_getters[name] = R18n::Utils .hash_map([:methods]) { |l, i| [l.to_s, i.to_s] } unless [:no_write] @unlocalized_setters[name] = R18n::Utils .hash_map([:methods]) { |l, i| [l.to_s, i.to_s + '='] } 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.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 |
#translations(*methods) ⇒ Object
Add several proxy methods
. See R18n::Translated for description. It’s more compact, that translation
.
translations :title, :keywords, [:desciption, { type: 'markdown' }]
103 104 105 106 107 |
# File 'lib/r18n-core/translated.rb', line 103 def translations(*methods) methods.each do |method| translation(*method) end 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.
177 178 179 180 181 182 183 184 185 186 |
# File 'lib/r18n-core/translated.rb', line 177 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
.
170 171 172 |
# File 'lib/r18n-core/translated.rb', line 170 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.
191 192 193 194 195 196 197 198 199 200 |
# File 'lib/r18n-core/translated.rb', line 191 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 |