Module: FastGettext::Storage

Included in:
FastGettext
Defined in:
lib/fast_gettext/storage.rb

Overview

Responsibility:

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

Defined Under Namespace

Classes: NoTextDomainConfigured

Constant Summary collapse

@@default_available_locales =

cattr_accessor :default_available_locales

nil
@@default_text_domain =

cattr_accessor :default_text_domain

nil
@@translation_repositories =

global, since re-parsing whole folders takes too much time…

{}
@@caches =

used to speedup simple translations, does not work for pluralisation caches[locale]=translation

{}
@@default_locale =
nil

Instance Method Summary collapse

Instance Method Details

#available_localesObject



26
27
28
29
30
# File 'lib/fast_gettext/storage.rb', line 26

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) ⇒ Object

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



154
155
156
157
158
159
160
161
# File 'lib/fast_gettext/storage.rb', line 154

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

#cached_find(key) ⇒ Object



100
101
102
103
104
105
106
107
# File 'lib/fast_gettext/storage.rb', line 100

def cached_find(key)
  translation = current_cache[key]
  if translation.nil? # uncached
    current_cache[key] = current_repository[key] || false
  else
    translation
  end
end

#cached_plural_find(*keys) ⇒ Object



109
110
111
112
113
114
115
116
117
# File 'lib/fast_gettext/storage.rb', line 109

def cached_plural_find(*keys)
  key = '||||' + keys * '||||'
  translation = current_cache[key]
  if translation.nil? # uncached
    current_cache[key] = current_repository.plural(*keys) || false
  else
    translation
  end
end

#cachesObject



88
89
90
# File 'lib/fast_gettext/storage.rb', line 88

def caches
  @@caches
end

#current_cacheObject



66
67
68
# File 'lib/fast_gettext/storage.rb', line 66

def current_cache
  Thread.current[:fast_gettext_current_cache] || {}
end

#current_cache=(cache) ⇒ Object



70
71
72
# File 'lib/fast_gettext/storage.rb', line 70

def current_cache=(cache)
  Thread.current[:fast_gettext_current_cache] = cache
end

#current_repositoryObject



92
93
94
# File 'lib/fast_gettext/storage.rb', line 92

def current_repository
  translation_repositories[text_domain] || raise(NoTextDomainConfigured)
end

#default_available_localesObject



39
40
41
# File 'lib/fast_gettext/storage.rb', line 39

def default_available_locales
  @@default_available_locales
end

#default_available_locales=(avail_locales) ⇒ Object



34
35
36
37
# File 'lib/fast_gettext/storage.rb', line 34

def default_available_locales=(avail_locales)
  @@default_available_locales = avail_locales
  update_current_cache
end

#default_localeObject



146
147
148
# File 'lib/fast_gettext/storage.rb', line 146

def default_locale
  @@default_locale
end

#default_locale=(new_locale) ⇒ Object



141
142
143
144
# File 'lib/fast_gettext/storage.rb', line 141

def default_locale=(new_locale)
  @@default_locale = best_locale_in(new_locale)
  update_current_cache
end

#default_text_domainObject



55
56
57
# File 'lib/fast_gettext/storage.rb', line 55

def default_text_domain
  @@default_text_domain
end

#default_text_domain=(domain) ⇒ Object



50
51
52
53
# File 'lib/fast_gettext/storage.rb', line 50

def default_text_domain=(domain)
  @@default_text_domain = domain
  update_current_cache
end

#expire_cache_for(key) ⇒ Object



119
120
121
# File 'lib/fast_gettext/storage.rb', line 119

def expire_cache_for(key)
  current_cache.delete(key)
end

#key_exist?(key) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/fast_gettext/storage.rb', line 96

def key_exist?(key)
  !!(cached_find key)
end

#localeObject



123
124
125
# File 'lib/fast_gettext/storage.rb', line 123

def locale
  _locale || ( default_locale || (available_locales||[]).first || 'en' )
end

#locale=(new_locale) ⇒ Object



127
128
129
# File 'lib/fast_gettext/storage.rb', line 127

def locale=(new_locale)
  set_locale(new_locale)
end

#pluralisation_ruleObject

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



62
63
64
# File 'lib/fast_gettext/storage.rb', line 62

def pluralisation_rule
  Thread.current[:fast_gettext_pluralisation_rule] ||  current_repository.pluralisation_rule || lambda{|i| i!=1}
end

#reload!Object



74
75
76
77
# File 'lib/fast_gettext/storage.rb', line 74

def reload!
  self.current_cache = {}
  translation_repositories.values.each(&:reload)
end

#set_locale(new_locale) ⇒ Object

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



134
135
136
137
138
# File 'lib/fast_gettext/storage.rb', line 134

def set_locale(new_locale)
  new_locale = best_locale_in(new_locale)
  self._locale = new_locale
  locale
end

#silence_errorsObject

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



164
165
166
167
# File 'lib/fast_gettext/storage.rb', line 164

def silence_errors
  require 'fast_gettext/translation_repository/base'
  translation_repositories[text_domain] ||= TranslationRepository::Base.new('x', :path => 'locale')
end

#text_domainObject



44
45
46
# File 'lib/fast_gettext/storage.rb', line 44

def text_domain
  Thread.current[:fast_gettext_text_domain] || default_text_domain
end

#translation_repositoriesObject



81
82
83
# File 'lib/fast_gettext/storage.rb', line 81

def translation_repositories
  @@translation_repositories
end