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.
98 99 100 |
# File 'lib/r18n-core/translated.rb', line 98 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'
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 114 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] params = [:no_params] ? '' : ', *params' class_eval <<-EOS, __FILE__, __LINE__ def #{name}(*params) unlocalized = self.class.unlocalized_getters(#{name.inspect}) r18n.locales.each do |locale| code = locale.code next unless unlocalized.has_key? code result = send unlocalized[code]#{params} next unless result path = "\#{self.class.name}##{name}" type = self.class.translation_types[#{name.inspect}] 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 R18n::Untranslated.new("\#{self.class.name}\#", '#{name}', r18n.locale, r18n.filter_list) end EOS unless [:no_write] class_eval <<-EOS, __FILE__, __LINE__ def #{name}=(*params) unlocalized = self.class.unlocalized_setters(#{name.inspect}) r18n.locales.each do |locale| code = locale.code next unless unlocalized.has_key? code return send unlocalized[code], *params end end EOS 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'}]
104 105 106 107 108 |
# File 'lib/r18n-core/translated.rb', line 104 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.
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.has_key? method @unlocalized_getters[method] = {} self.unlocalized_methods.reject { |i| not 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 self.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.has_key? method @unlocalized_setters[method] = {} self.unlocalized_methods.reject { |i| not i =~ matcher }.each do |i| @unlocalized_setters[method][i.to_s.match(matcher)[1]] = i.to_s end end @unlocalized_setters[method] end |