From 36a2f1f3c085dd81171cf7d8220770d4ff921ab3 Mon Sep 17 00:00:00 2001 From: hukl Date: Sat, 7 Feb 2009 15:50:40 +0100 Subject: added globalize2 plugin as well as some modifications which use the new translation facilities. backend mostly. --- .../globalize2/lib/globalize/locale/fallbacks.rb | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 vendor/plugins/globalize2/lib/globalize/locale/fallbacks.rb (limited to 'vendor/plugins/globalize2/lib/globalize/locale/fallbacks.rb') diff --git a/vendor/plugins/globalize2/lib/globalize/locale/fallbacks.rb b/vendor/plugins/globalize2/lib/globalize/locale/fallbacks.rb new file mode 100644 index 00000000..c4acd57a --- /dev/null +++ b/vendor/plugins/globalize2/lib/globalize/locale/fallbacks.rb @@ -0,0 +1,63 @@ +require 'globalize/locale/language_tag' + +module I18n + @@fallbacks = nil + + class << self + # Returns the current fallbacks. Defaults to +Globalize::Locale::Fallbacks+. + def fallbacks + @@fallbacks ||= Globalize::Locale::Fallbacks.new + end + + # Sets the current fallbacks. Used to set a custom fallbacks instance. + def fallbacks=(fallbacks) + @@fallbacks = fallbacks + end + end +end + +module Globalize + module Locale + class Fallbacks < Hash + def initialize(*defaults) + @map = {} + map defaults.pop if defaults.last.is_a?(Hash) + + defaults = [I18n.default_locale.to_sym] if defaults.empty? + self.defaults = defaults + end + + def defaults=(defaults) + @defaults = defaults.map{|default| compute(default, false) }.flatten << :root + end + attr_reader :defaults + + def [](tag) + tag = tag.to_sym + has_key?(tag) ? fetch(tag) : store(tag, compute(tag)) + end + + def map(mappings) + mappings.each do |from, to| + from, to = from.to_sym, Array(to) + to.each do |to| + @map[from] ||= [] + @map[from] << to.to_sym + end + end + end + + protected + + def compute(tags, include_defaults = true) + result = Array(tags).collect do |tag| + tags = LanguageTag::tag(tag.to_sym).parents(true).map! {|t| t.to_sym } + tags.each{|tag| tags += compute(@map[tag]) if @map[tag] } + tags + end.flatten + result.push *defaults if include_defaults + result.uniq + end + end + end +end -- cgit v1.3