Class: Tr8n::TranslationKey
Instance Attribute Summary
Attributes inherited from Base
Class Method Summary collapse
- .generate_key(label, desc = "") ⇒ Object
-
.substitute_tokens(label, token_values, language, options = {}) ⇒ Object
if the translations engine is disabled.
Instance Method Summary collapse
-
#data_tokens ⇒ Object
Returns an array of data tokens from the translation key.
- #data_tokens_names_map ⇒ Object
-
#decoration_tokens ⇒ Object
Returns an array of decoration tokens from the translation key.
- #fetch_translations(language, options = {}) ⇒ Object
- #find_first_valid_translation(language, token_values) ⇒ Object
- #has_translations_for_language?(language) ⇒ Boolean
-
#initialize(attrs = {}) ⇒ TranslationKey
constructor
A new instance of TranslationKey.
-
#set_application(app) ⇒ Object
switches to a new application.
- #set_language_translations(language, translations) ⇒ Object
- #substitute_tokens(translated_label, token_values, language, options = {}) ⇒ Object
- #translate(language, token_values = {}, options = {}) ⇒ Object
-
#translations_for_language(language) ⇒ Object
Translation Methods.
Methods inherited from Base
attributes, belongs_to, has_many, hash_value, #hash_value, #method_missing, #to_hash, #update_attributes
Constructor Details
#initialize(attrs = {}) ⇒ TranslationKey
Returns a new instance of TranslationKey.
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/tr8n/translation_key.rb', line 40 def initialize(attrs = {}) super self.attributes[:key] ||= self.class.generate_key(label, description) self.attributes[:locale] ||= Tr8n.session.[:locale] || (application ? application.default_locale : Tr8n.config.default_locale) self.attributes[:language] ||= application ? application.language(locale) : Tr8n.config.default_language self.attributes[:translations] = {} if hash_value(attrs, :translations) hash_value(attrs, :translations).each do |locale, translations| language = application.language(locale) self.attributes[:translations][locale] ||= [] translations.each do |translation_hash| translation = Tr8n::Translation.new(translation_hash.merge(:translation_key => self, :locale => language.locale)) self.attributes[:translations][locale] << translation end end end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Tr8n::Base
Class Method Details
.generate_key(label, desc = "") ⇒ Object
62 63 64 |
# File 'lib/tr8n/translation_key.rb', line 62 def self.generate_key(label, desc = "") "#{Digest::MD5.hexdigest("#{label};;;#{desc}")}~"[0..-2].to_s end |
.substitute_tokens(label, token_values, language, options = {}) ⇒ Object
if the translations engine is disabled
173 174 175 176 |
# File 'lib/tr8n/translation_key.rb', line 173 def self.substitute_tokens(label, token_values, language, = {}) return label.to_s if [:skip_substitution] Tr8n::TranslationKey.new(:label => label.to_s).substitute_tokens(label.to_s, token_values, language, ) end |
Instance Method Details
#data_tokens ⇒ Object
Returns an array of data tokens from the translation key
155 156 157 158 159 160 |
# File 'lib/tr8n/translation_key.rb', line 155 def data_tokens @data_tokens ||= begin dt = Tr8n::Tokenizers::Data.new(label) dt.tokens end end |
#data_tokens_names_map ⇒ Object
162 163 164 165 166 167 168 169 170 |
# File 'lib/tr8n/translation_key.rb', line 162 def data_tokens_names_map @data_tokens_names_map ||= begin map = {} data_tokens.each do |token| map[token.name] = token end map end end |
#decoration_tokens ⇒ Object
Returns an array of decoration tokens from the translation key
146 147 148 149 150 151 152 |
# File 'lib/tr8n/translation_key.rb', line 146 def decoration_tokens @decoration_tokens ||= begin dt = Tr8n::Tokenizers::Decoration.new(label) dt.parse dt.tokens end end |
#fetch_translations(language, options = {}) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/tr8n/translation_key.rb', line 70 def fetch_translations(language, = {}) return self if self.id and has_translations_for_language?(language) if [:dry] or Tr8n.session.[:dry] return application.cache_translation_key(self) end tkey = application.post("translation_key/translations", {:key => key, :label => label, :description => description, :locale => language.locale}, {:class => Tr8n::TranslationKey, :attributes => {:application => application}}) application.cache_translation_key(tkey) end |
#find_first_valid_translation(language, token_values) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/tr8n/translation_key.rb', line 112 def find_first_valid_translation(language, token_values) translations = translations_for_language(language) translations.sort! { |x,y| x.precedence <=> y.precedence } translations.each do |translation| return translation if translation.matches_rules?(token_values) end nil end |
#has_translations_for_language?(language) ⇒ Boolean
66 67 68 |
# File 'lib/tr8n/translation_key.rb', line 66 def has_translations_for_language?(language) translations and translations[language.locale] and translations[language.locale].any? end |
#set_application(app) ⇒ Object
switches to a new application
85 86 87 88 89 90 91 92 93 |
# File 'lib/tr8n/translation_key.rb', line 85 def set_application(app) self.application = app translations.values.each do |locale_translations| locale_translations.each do |t| t.set_translation_key(self) end end self end |
#set_language_translations(language, translations) ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/tr8n/translation_key.rb', line 95 def set_language_translations(language, translations) translations.each do |translation| translation.locale = language.locale translation.set_translation_key(self) end self.translations[language.locale] = translations end |
#substitute_tokens(translated_label, token_values, language, options = {}) ⇒ Object
178 179 180 181 182 183 184 185 186 187 188 |
# File 'lib/tr8n/translation_key.rb', line 178 def substitute_tokens(translated_label, token_values, language, = {}) if Tr8n::Tokenizers::Data.required?(translated_label) translated_label = Tr8n::Tokenizers::Data.new(translated_label, token_values, :allowed_tokens => data_tokens_names_map).substitute(language, ) end if Tr8n::Tokenizers::Decoration.required?(translated_label) translated_label = Tr8n::Tokenizers::Decoration.new(translated_label, token_values, :allowed_tokens => decoration_tokens).substitute end translated_label end |
#translate(language, token_values = {}, options = {}) ⇒ Object
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/tr8n/translation_key.rb', line 124 def translate(language, token_values = {}, = {}) if Tr8n.config.disabled? or language.locale == self.locale return substitute_tokens(label, token_values, language, .merge(:fallback => false)) end translation = find_first_valid_translation(language, token_values) decorator = Tr8n::Decorators::Base.decorator if translation translated_label = substitute_tokens(translation.label, token_values, translation.language, ) return decorator.decorate(translated_label, translation.language, language, self, ) end translated_label = substitute_tokens(label, token_values, self.language, ) decorator.decorate(translated_label, self.language, language, self, ) end |
#translations_for_language(language) ⇒ Object
Translation Methods
107 108 109 110 |
# File 'lib/tr8n/translation_key.rb', line 107 def translations_for_language(language) return [] unless self.translations self.translations[language.locale] || [] end |