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

@@translation_repositories =

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

{}
@@default_locale =
nil

Instance Method Summary collapse

Instance Method Details

#available_localesObject



28
29
30
31
32
# 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) ⇒ 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



130
131
132
133
134
135
136
137
# 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

#cacheObject



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

def cache
  Thread.current[:fast_gettext_cache] ||= cache_class.new
end

#cached_find(key) ⇒ Object



86
87
88
# File 'lib/fast_gettext/storage.rb', line 86

def cached_find(key)
  cache.fetch(key) { current_repository[key] }
end

#cached_plural_find(*keys) ⇒ Object



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

def cached_plural_find(*keys)
  key = '||||' + keys * '||||'
  cache.fetch(key) { current_repository.plural(*keys) }
end

#current_repositoryObject



78
79
80
# File 'lib/fast_gettext/storage.rb', line 78

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

#default_localeObject



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

def default_locale
  @@default_locale
end

#default_locale=(new_locale) ⇒ Object



117
118
119
120
# 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) ⇒ Object



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

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

#key_exist?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#localeObject



99
100
101
# File 'lib/fast_gettext/storage.rb', line 99

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

#locale=(new_locale) ⇒ Object



103
104
105
# File 'lib/fast_gettext/storage.rb', line 103

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



59
60
61
# 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!Object



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

def reload!
  cache.reload!
  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



110
111
112
113
114
# 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_errorsObject

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



150
151
152
153
# File 'lib/fast_gettext/storage.rb', line 150

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

#text_domainObject



53
54
55
# File 'lib/fast_gettext/storage.rb', line 53

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

#translation_repositoriesObject



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

def translation_repositories
  @@translation_repositories
end

#with_locale(temp_locale) ⇒ Object

temporarily switch locale for a block FastGettext.with_locale ‘xx’ { _(‘cars’) }



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

def with_locale(temp_locale)
  current_locale = locale
  set_locale temp_locale
  yield
ensure
  set_locale current_locale
end