module FastGettext::Storage

Responsibility:

- store data threadsave
- provide error messages when repositories are unconfigured
- accept/reject locales that are set by the user

Public Instance Methods

available_locales() click to toggle source
# File lib/fast_gettext/storage.rb, line 28
def available_locales
  locales = Thread.current[:fast_gettext_available_locales] || default_available_locales
  return unless locales
  locales.map{|s|s.to_s}
end
best_locale_in(locales) click to toggle source

Opera: de-DE,de;q=0.9,en;q=0.8 Firefox de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 IE6/7 de nil if nothing matches

# File lib/fast_gettext/storage.rb, line 130
def best_locale_in(locales)
  formatted_sorted_locales(locales).each do |candidate|
    return candidate if not available_locales
    return candidate if available_locales.include?(candidate)
    return candidate[0..1] if available_locales.include?(candidate[0..1])#available locales include a langauge
  end
  return nil#nothing found im sorry :P
end
cache() click to toggle source
# File lib/fast_gettext/storage.rb, line 63
def cache
  Thread.current[:fast_gettext_cache] ||= cache_class.new
end
cached_find(key) click to toggle source
# File lib/fast_gettext/storage.rb, line 86
def cached_find(key)
  cache.fetch(key) { current_repository[key] }
end
cached_plural_find(*keys) click to toggle source
# File lib/fast_gettext/storage.rb, line 90
def cached_plural_find(*keys)
  key = '||||' + keys * '||||'
  cache.fetch(key) { current_repository.plural(*keys) }
end
current_repository() click to toggle source
# File lib/fast_gettext/storage.rb, line 78
def current_repository
  translation_repositories[text_domain] || raise(NoTextDomainConfigured)
end
default_locale() click to toggle source
# File lib/fast_gettext/storage.rb, line 122
def default_locale
  @@default_locale
end
default_locale=(new_locale) click to toggle source
# File lib/fast_gettext/storage.rb, line 117
def default_locale=(new_locale)
  @@default_locale = best_locale_in(new_locale)
  switch_cache
end
expire_cache_for(key) click to toggle source
# File lib/fast_gettext/storage.rb, line 95
def expire_cache_for(key)
  cache.delete(key)
end
key_exist?(key) click to toggle source
# File lib/fast_gettext/storage.rb, line 82
def key_exist?(key)
  !!(cached_find key)
end
locale() click to toggle source
# File lib/fast_gettext/storage.rb, line 99
def locale
  _locale || ( default_locale || (available_locales||[]).first || 'en' )
end
locale=(new_locale) click to toggle source
# File lib/fast_gettext/storage.rb, line 103
def locale=(new_locale)
  set_locale(new_locale)
end
pluralisation_rule() click to toggle source

if overwritten by user( FastGettext.pluralisation_rule = xxx) use it, otherwise fall back to repo or to default lambda

# File lib/fast_gettext/storage.rb, line 59
def pluralisation_rule
  Thread.current[:fast_gettext_pluralisation_rule] ||  current_repository.pluralisation_rule || lambda{|i| i!=1}
end
reload!() click to toggle source
# File lib/fast_gettext/storage.rb, line 67
def reload!
  cache.reload!
  translation_repositories.values.each(&:reload)
end
set_locale(new_locale) click to toggle source

for chaining: puts set_locale('xx') == 'xx' ? 'applied' : 'rejected' returns the current locale, not the one that was supplied like locale=(), whoes behavior cannot be changed

# File lib/fast_gettext/storage.rb, line 110
def set_locale(new_locale)
  new_locale = best_locale_in(new_locale)
  self._locale = new_locale
  locale
end
silence_errors() click to toggle source

turn off translation if none was defined to disable all resulting errors

# File lib/fast_gettext/storage.rb, line 140
def silence_errors
  require 'fast_gettext/translation_repository/base'
  translation_repositories[text_domain] ||= TranslationRepository::Base.new('x', :path => 'locale')
end
text_domain() click to toggle source
# File lib/fast_gettext/storage.rb, line 53
def text_domain
  Thread.current[:fast_gettext_text_domain] || default_text_domain
end
translation_repositories() click to toggle source
# File lib/fast_gettext/storage.rb, line 74
def translation_repositories
  @@translation_repositories
end

Private Instance Methods

_locale() click to toggle source
# File lib/fast_gettext/storage.rb, line 22
def _locale
  Thread.current[:fast_gettext__locale]
end
format_locale(locale) click to toggle source

de-de -> de_DE

# File lib/fast_gettext/storage.rb, line 171
def format_locale(locale)
  locale.sub(/^([a-zA-Z]{2,3})[-_]([a-zA-Z]{2,3})$/){$1.downcase+'_'+$2.upcase}
end
formatted_sorted_locales(locales) click to toggle source

de-de,DE-CH;q=0.9 -> ['de_DE','de_CH']

# File lib/fast_gettext/storage.rb, line 148
def formatted_sorted_locales(locales)
  found = weighted_locales(locales).reject{|x|x.empty?}.sort_by{|l|l.last}.reverse #sort them by weight which is the last entry
  found.flatten.map{|l| format_locale(l)}
end
switch_cache() click to toggle source
# File lib/fast_gettext/storage.rb, line 175
def switch_cache
  cache.switch_to(text_domain, locale)
end
weighted_locales(locales) click to toggle source

split the locale and seperate it into different languages de-de,de;q=0.9,en;q=0.8 => [['de-de','de','0.5'], ['en','0.8']]

# File lib/fast_gettext/storage.rb, line 155
def weighted_locales(locales)
  locales = locales.to_s.gsub(/\s/,'')
  found = [[]]
  locales.split(',').each do |part|
    if part =~ /;q=/ #contains language and weight ?
      found.last << part.split(/;q=/)
      found.last.flatten!
      found << []
    else
      found.last << part
    end
  end
  found
end