Module: Redmine::I18n

Defined Under Namespace

Classes: Backend

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



20
21
22
# File 'lib/redmine/i18n.rb', line 20

def self.included(base)
  base.extend Redmine::I18n
end

Instance Method Details

#current_languageObject



143
144
145
# File 'lib/redmine/i18n.rb', line 143

def current_language
  ::I18n.locale
end

#day_letter(day) ⇒ Object



101
102
103
# File 'lib/redmine/i18n.rb', line 101

def day_letter(day)
  ::I18n.t('date.abbr_day_names')[day % 7].first
end

#day_name(day) ⇒ Object



97
98
99
# File 'lib/redmine/i18n.rb', line 97

def day_name(day)
  ::I18n.t('date.day_names')[day % 7]
end

#find_language(lang) ⇒ Object



132
133
134
135
# File 'lib/redmine/i18n.rb', line 132

def find_language(lang)
  @@languages_lookup = valid_languages.inject({}) {|k, v| k[v.to_s.downcase] = v; k }
  @@languages_lookup[lang.to_s.downcase]
end

#format_date(date) ⇒ Object



67
68
69
70
71
72
# File 'lib/redmine/i18n.rb', line 67

def format_date(date)
  return nil unless date
  options = {}
  options[:format] = Setting.date_format unless Setting.date_format.blank?
  ::I18n.l(date.to_date, options)
end

#format_hours(hours) ⇒ Object



85
86
87
88
89
90
91
92
93
94
95
# File 'lib/redmine/i18n.rb', line 85

def format_hours(hours)
  return "" if hours.blank?

  if Setting.timespan_format == 'minutes'
    h = hours.floor
    m = ((hours - h) * 60).round
    "%d:%02d" % [ h, m ]
  else
    "%.2f" % hours.to_f
  end
end

#format_time(time, include_date = true, user = nil) ⇒ Object



74
75
76
77
78
79
80
81
82
83
# File 'lib/redmine/i18n.rb', line 74

def format_time(time, include_date=true, user=nil)
  return nil unless time
  user ||= User.current
  options = {}
  options[:format] = (Setting.time_format.blank? ? :time : Setting.time_format)
  time = time.to_time if time.is_a?(String)
  zone = user.time_zone
  local = zone ? time.in_time_zone(zone) : (time.utc? ? time.localtime : time)
  (include_date ? "#{format_date(local)} " : "") + ::I18n.l(local, options)
end

#l(*args) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/redmine/i18n.rb', line 24

def l(*args)
  case args.size
  when 1
    ::I18n.t(*args)
  when 2
    if args.last.is_a?(Hash)
      ::I18n.t(*args)
    elsif args.last.is_a?(String)
      ::I18n.t(args.first, :value => args.last)
    else
      ::I18n.t(args.first, :count => args.last)
    end
  else
    raise "Translation string with multiple values: #{args.first}"
  end
end

#l_hours(hours) ⇒ Object



46
47
48
49
# File 'lib/redmine/i18n.rb', line 46

def l_hours(hours)
  hours = hours.to_f
  l((hours < 2.0 ? :label_f_hour : :label_f_hour_plural), :value => format_hours(hours))
end

#l_hours_short(hours) ⇒ Object



51
52
53
# File 'lib/redmine/i18n.rb', line 51

def l_hours_short(hours)
  l(:label_f_hour_short, :value => format_hours(hours.to_f))
end

#l_or_humanize(s, options = {}) ⇒ Object



41
42
43
44
# File 'lib/redmine/i18n.rb', line 41

def l_or_humanize(s, options={})
  k = "#{options[:prefix]}#{s}".to_sym
  ::I18n.t(k, :default => s.to_s.humanize)
end

#languages_options(options = {}) ⇒ Object

Returns an array of languages names and code sorted by names, example:

[“Deutsch”, “de”], [“English”, “en”

…]

The result is cached to prevent from loading all translations files unless :cache => false option is given



118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/redmine/i18n.rb', line 118

def languages_options(options={})
  options = if options[:cache] == false
    valid_languages.
      select {|locale| ::I18n.exists?(:general_lang_name, locale)}.
      map {|lang| [ll(lang.to_s, :general_lang_name), lang.to_s]}.
      sort {|x,y| x.first <=> y.first }
  else
    ActionController::Base.cache_store.fetch "i18n/languages_options/#{Redmine::VERSION}" do
      languages_options :cache => false
    end
  end
  options.map {|name, lang| [name.force_encoding("UTF-8"), lang.force_encoding("UTF-8")]}
end

#ll(lang, str, arg = nil) ⇒ Object



55
56
57
58
59
# File 'lib/redmine/i18n.rb', line 55

def ll(lang, str, arg=nil)
  options = arg.is_a?(Hash) ? arg : {:value => arg}
  locale = lang.to_s.gsub(%r{(.+)\-(.+)$}) { "#{$1}-#{$2.upcase}" }
  ::I18n.t(str.to_s, options.merge(:locale => locale))
end

#lu(user, *args) ⇒ Object

Localizes the given args with user's language



62
63
64
65
# File 'lib/redmine/i18n.rb', line 62

def lu(user, *args)
  lang = user.try(:language).presence || Setting.default_language
  ll(lang, *args) 
end

#month_name(month) ⇒ Object



105
106
107
# File 'lib/redmine/i18n.rb', line 105

def month_name(month)
  ::I18n.t('date.month_names')[month]
end

#set_language_if_valid(lang) ⇒ Object



137
138
139
140
141
# File 'lib/redmine/i18n.rb', line 137

def set_language_if_valid(lang)
  if l = find_language(lang)
    ::I18n.locale = l
  end
end

#valid_languagesObject



109
110
111
# File 'lib/redmine/i18n.rb', line 109

def valid_languages
  ::I18n.available_locales
end