module FastGettext::Storage
Responsibility:
- store data threadsafe - provide error messages when repositories are unconfigured - accept/reject locales that are set by the user
Constants
- DEFAULT_PLURALIZATION_RULE
Public Instance Methods
available_locales()
click to toggle source
# File lib/fast_gettext/storage.rb, line 33 def available_locales locales = Thread.current[:fast_gettext_available_locales] || default_available_locales return unless locales locales.map(&: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 136 def best_locale_in(locales) formatted_sorted_locales(locales).each do |candidate| return candidate unless 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 nil # nothing found im sorry :P end
cache()
click to toggle source
# File lib/fast_gettext/storage.rb, line 69 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 92 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 96 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 84 def current_repository translation_repositories[text_domain] || raise(NoTextDomainConfigured) end
default_locale()
click to toggle source
# File lib/fast_gettext/storage.rb, line 128 def default_locale @@default_locale end
default_locale=(new_locale)
click to toggle source
# File lib/fast_gettext/storage.rb, line 123 def default_locale=(new_locale) @@default_locale = best_locale_in(new_locale) # rubocop:disable Style/ClassVars switch_cache end
expire_cache_for(key)
click to toggle source
# File lib/fast_gettext/storage.rb, line 101 def expire_cache_for(key) cache.delete(key) end
key_exist?(key)
click to toggle source
# File lib/fast_gettext/storage.rb, line 88 def key_exist?(key) !!(cached_find key) end
locale()
click to toggle source
# File lib/fast_gettext/storage.rb, line 105 def locale _locale || (default_locale || (available_locales || []).first || 'en') end
locale=(new_locale)
click to toggle source
# File lib/fast_gettext/storage.rb, line 109 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 65 def pluralisation_rule Thread.current[:fast_gettext_pluralisation_rule] || current_repository.pluralisation_rule || DEFAULT_PLURALIZATION_RULE end
reload!()
click to toggle source
# File lib/fast_gettext/storage.rb, line 73 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 116 def set_locale(new_locale) # rubocop:disable Naming/AccessorMethodName 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 156 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 59 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 80 def translation_repositories @@translation_repositories end
with_locale(temp_locale) { || ... }
click to toggle source
temporarily switch locale for a block FastGettext.with_locale 'xx' { _('cars') }
# File lib/fast_gettext/storage.rb, line 147 def with_locale(temp_locale) current_locale = locale set_locale temp_locale yield ensure set_locale current_locale end
Private Instance Methods
_locale()
click to toggle source
# File lib/fast_gettext/storage.rb, line 28 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 187 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 164 def formatted_sorted_locales(locales) found = weighted_locales(locales).reject(&:empty?).sort_by(&: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 191 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 171 def weighted_locales(locales) locales = locales.to_s.gsub(/\s/, '') found = [[]] locales.split(',').each do |part| if part.include? ';q=' # contains language and weight ? found.last << part.split(/;q=/) found.last.flatten! found << [] else found.last << part end end found end