class Tml::TranslationKey
Public Class Methods
cache_key(locale, key)
click to toggle source
# File lib/tml/translation_key.rb, line 92 def self.cache_key(locale, key) File.join(locale, 'keys', key) end
generate_key(label, desc = '')
click to toggle source
# File lib/tml/translation_key.rb, line 62 def self.generate_key(label, desc = '') "#{Digest::MD5.hexdigest("#{label};;;#{desc}")}~"[0..-2].to_s end
new(attrs = {})
click to toggle source
Calls superclass method
Tml::Base::new
# File lib/tml/translation_key.rb, line 40 def initialize(attrs = {}) super self.attributes[:key] ||= self.class.generate_key(label, description) self.attributes[:locale] ||= Tml.session.block_option(:locale) || (application ? application.default_locale : Tml.config.default_locale) self.attributes[:language] ||= application ? application.language(locale) : Tml.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 = Tml::Translation.new(translation_hash.merge(:translation_key => self, :locale => language.locale)) self.attributes[:translations][locale] << translation end end end end
substitute_tokens(label, token_values, language, options = {})
click to toggle source
if the translations engine is disabled
# File lib/tml/translation_key.rb, line 197 def self.substitute_tokens(label, token_values, language, options = {}) return label.to_s if options[:skip_substitution] Tml::TranslationKey.new(:label => label.to_s).substitute_tokens(label.to_s, token_values, language, options) end
Public Instance Methods
data_tokens()
click to toggle source
Returns an array of data tokens from the translation key
# File lib/tml/translation_key.rb, line 179 def data_tokens @data_tokens ||= begin dt = Tml::Tokenizers::Data.new(label) dt.tokens end end
data_tokens_names_map()
click to toggle source
# File lib/tml/translation_key.rb, line 186 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()
click to toggle source
Returns an array of decoration tokens from the translation key
# File lib/tml/translation_key.rb, line 170 def decoration_tokens @decoration_tokens ||= begin dt = Tml::Tokenizers::Decoration.new(label) dt.parse dt.tokens end end
fetch_translations(locale)
click to toggle source
fetch translations for a specific translation key
# File lib/tml/translation_key.rb, line 106 def fetch_translations(locale) self.translations ||= {} return if self.translations[locale] # Tml.logger.debug("Fetching translations for #{label}") results = self.application.api_client.get( "translation_keys/#{self.key}/translations", {:locale => locale, :per_page => 10000}, {:cache_key => Tml::TranslationKey.cache_key(locale, self.key)} ) || [] update_translations(locale, results) self rescue Tml::Exception => ex self.translations = {} self end
find_first_valid_translation(language, token_values)
click to toggle source
# File lib/tml/translation_key.rb, line 135 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)
click to toggle source
# File lib/tml/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)
click to toggle source
switches to a new application
# File lib/tml/translation_key.rb, line 81 def set_application(app) self.application = app translations.values.each do |locale_translations| locale_translations.each do |translation| translation.translation_key = self translation.language = self.application.language(translation.locale) end end self end
set_translations(locale, translations)
click to toggle source
# File lib/tml/translation_key.rb, line 70 def set_translations(locale, translations) return unless translations translations.each do |translation| translation.locale ||= locale translation.translation_key = self translation.language = self.application.language(translation.locale) end self.translations[locale] = translations end
substitute_tokens(translated_label, token_values, language, options = {})
click to toggle source
# File lib/tml/translation_key.rb, line 202 def substitute_tokens(translated_label, token_values, language, options = {}) if options[:syntax] == 'xmessage' # pp "Translating #{translated_label} using xmessage syntax" tokenizer = Tml::Tokenizers::XMessage.new(translated_label) return tokenizer.substitute(language, token_values, options) end if Tml::Tokenizers::Decoration.required?(translated_label) translated_label = Tml::Tokenizers::Decoration.new(translated_label, token_values, :allowed_tokens => decoration_tokens).substitute end if Tml::Tokenizers::Data.required?(translated_label) translated_label = Tml::Tokenizers::Data.new(translated_label, token_values, :allowed_tokens => data_tokens_names_map).substitute(language, options) end translated_label end
translate(language, token_values = {}, options = {})
click to toggle source
# File lib/tml/translation_key.rb, line 147 def translate(language, token_values = {}, options = {}) if Tml.config.disabled? return substitute_tokens(label, token_values, language, options.merge(:fallback => false)) end translation = find_first_valid_translation(language, token_values) decorator = Tml::Decorators::Base.decorator(options) if translation options[:locked] = translation.locked translated_label = substitute_tokens(translation.label, token_values, translation.language, options) return decorator.decorate(translated_label, translation.language, language, self, options) end translated_label = substitute_tokens(label, token_values, self.language, options) decorator.decorate(translated_label, self.language, language, self, options) end
translations_for_language(language)
click to toggle source
Translation Methods
# File lib/tml/translation_key.rb, line 130 def translations_for_language(language) return [] unless self.translations self.translations[language.locale] || [] end
update_translations(locale, data)
click to toggle source
update translations in the key
# File lib/tml/translation_key.rb, line 97 def update_translations(locale, data) set_translations(locale, application.cache_translations( locale, key, data.is_a?(Hash) ? data['translations'] : data )) end