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



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

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



146
147
148
149
150
151
152
153
# File 'lib/fast_gettext/storage.rb', line 146

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



96
97
98
99
100
101
102
103
# File 'lib/fast_gettext/storage.rb', line 96

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



105
106
107
108
109
110
111
112
113
# File 'lib/fast_gettext/storage.rb', line 105

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



84
85
86
# File 'lib/fast_gettext/storage.rb', line 84

def caches
  @@caches
end

#current_cacheObject



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

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

#current_cache=(cache) ⇒ Object



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

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

#current_repositoryObject



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

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

#default_available_localesObject



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

def default_available_locales
  @@default_available_locales
end

#default_available_locales=(avail_locales) ⇒ Object



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

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

#default_localeObject



138
139
140
# File 'lib/fast_gettext/storage.rb', line 138

def default_locale
  @@default_locale
end

#default_locale=(new_locale) ⇒ Object



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

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

#default_text_domainObject



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

def default_text_domain
  @@default_text_domain
end

#default_text_domain=(domain) ⇒ Object



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

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

#key_exist?(key) ⇒ Boolean

Returns:

  • (Boolean)


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

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

#localeObject



115
116
117
# File 'lib/fast_gettext/storage.rb', line 115

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

#locale=(new_locale) ⇒ Object



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

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

#pluralisation_ruleObject

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



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

def pluralisation_rule
  Thread.current[:fast_gettext_pluralisation_rule] ||  current_repository.pluralisation_rule || lambda{|i| i!=1}
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



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

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

#silence_errorsObject

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



156
157
158
159
# File 'lib/fast_gettext/storage.rb', line 156

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

#text_domainObject



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

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

#translation_repositoriesObject



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

def translation_repositories
  @@translation_repositories
end