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_locales ⇒ Object
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]) end
return nilend
|
#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? 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? current_cache[key] = current_repository.plural(*keys) || false
else
translation
end
end
|
#caches ⇒ Object
88
89
90
|
# File 'lib/fast_gettext/storage.rb', line 88
def caches
@@caches
end
|
#current_cache ⇒ Object
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_repository ⇒ Object
92
93
94
|
# File 'lib/fast_gettext/storage.rb', line 92
def current_repository
translation_repositories[text_domain] || raise(NoTextDomainConfigured)
end
|
#default_available_locales ⇒ Object
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_locale ⇒ Object
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_domain ⇒ Object
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
96
97
98
|
# File 'lib/fast_gettext/storage.rb', line 96
def key_exist?(key)
!!(cached_find key)
end
|
#locale ⇒ Object
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_rule ⇒ Object
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_errors ⇒ Object
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_domain ⇒ Object
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_repositories ⇒ Object
81
82
83
|
# File 'lib/fast_gettext/storage.rb', line 81
def translation_repositories
@@translation_repositories
end
|