Class: Spider::I18n::Rails

Inherits:
Provider show all
Defined in:
lib/spiderfw/i18n/rails.rb

Instance Method Summary collapse

Methods inherited from Provider

#day_names, #default_calendar, #localize, #month_names, #week_start, #weekend_end, #weekend_start

Constructor Details

#initialize(locale) ⇒ Rails

Returns a new instance of Rails.



7
8
9
# File 'lib/spiderfw/i18n/rails.rb', line 7

def initialize(locale)
    @locale = load_locale(locale)
end

Instance Method Details

#find_locale(locale) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/spiderfw/i18n/rails.rb', line 32

def find_locale(locale)
    try = locale.to_s
    while (try)
        extensions = ['yml', 'rb']
        extensions.each do |ext|
            full_path = Spider.conf.get('i18n.rails_path')+'/'+try+'.'+ext
            return [full_path, try] if (File.exist?(full_path))
        end
        if (try =~ (/^([^\.-_@]+)[\.-_@]/))
            try = $1
        else
            try = false
        end
    end
end

#load_locale(locale) ⇒ Object

Raises:

  • (ArgumentError)


12
13
14
15
16
17
18
19
20
# File 'lib/spiderfw/i18n/rails.rb', line 12

def load_locale(locale)
    orig_locale = locale
    file, locale = find_locale(locale)
    l = load_locale_file(file) if file
    @locale_data = l[locale] if l
    raise ArgumentError unless @l
    @locale_data.extend(Spider::HashDottedAccess)
    return locale
end

#load_locale_file(filename) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/spiderfw/i18n/rails.rb', line 22

def load_locale_file(filename)
    type = File.extname(filename).tr('.', '').downcase
    if (type == 'rb')
        return eval(IO.read(filename), binding, filename)
    elsif (type == 'yml')
        return YAML::load(IO.read(filename))
    end
end

#localize_date_time(locale, object, format = :default, options = {}) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/spiderfw/i18n/rails.rb', line 48

def localize_date_time(locale, object, format = :default, options={})
    l = @locale_data
    type = object.respond_to?(:sec) ? 'time' : 'date'
    formats = l["#{type}.formats"]
    format = formats[format.to_s] if formats && formats[format.to_s]
    raise "Format #{format} not found" unless format

    format = format.to_s.dup

    format.gsub!(/%a/, l['date.abbr_day_names'][object.wday])
    format.gsub!(/%A/, l["date.day_names"][object.wday])
    format.gsub!(/%b/, l["date.abbr_month_names"][object.mon])
    format.gsub!(/%B/, l["date.month_names"][object.mon])
    format.gsub!(/%p/, l["time.#{object.hour < 12 ? :am : :pm}"]) if object.respond_to? :hour
    object.strftime(format)
end

#localize_number(number, precision = nil, options = {}) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
# File 'lib/spiderfw/i18n/rails.rb', line 82

def localize_number(number, precision=nil, options={})
    l = @locale_data
    defaults           = l["number.format"]
    precision_defaults = l["number.precision.format"]
    defaults           = defaults.merge(precision_defaults)
    separator = (options[:separator] || defaults[:separator])
    delimiter = (options[:delimiter] || defaults[:delimiter])
    
    Spider::I18n.do_localize_number(number, delimiter, separator, precision, options)
    
end

#parse_date_time(locale, string, format = :default, options = {}) ⇒ Object

FIXME: add extended format handling like in localize



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/spiderfw/i18n/rails.rb', line 66

def parse_date_time(locale, string, format = :default, options={})
    l = @locale_data
    type = object.respond_to?(:sec) ? 'time' : 'date'
    formats = l["#{type}.formats"]
    format = formats[format.to_s] if formats && formats[format.to_s]
    raise "Format #{format} not found" unless format

    format = format.to_s.dup
    if (options[:return] == :datetime)
        klass = DateTime
    elsif (options[:return] == :date)
        klass = Date
    end
    object.strptime(format)
end

#parse_number(string, options = {}) ⇒ Object



94
95
96
97
98
99
100
101
102
103
# File 'lib/spiderfw/i18n/rails.rb', line 94

def parse_number(string, options={})
    l = @locale_data
    defaults           = l["number.format"]
    precision_defaults = l["number.precision.format"]
    defaults           = defaults.merge(precision_defaults)
    separator = (options[:separator] || defaults[:separator])
    delimiter = (options[:delimiter] || defaults[:delimiter])
    
    Spider::I18n.do_parse_number(string, delimiter, separator, options)
end

#time_ago_in_words(from_time, include_seconds = false) ⇒ Object



107
108
109
# File 'lib/spiderfw/i18n/rails.rb', line 107

def time_ago_in_words(from_time, include_seconds = false)
  distance_of_time_in_words(from_time, Time.now, include_seconds)
end