Module: Redmine::I18n

Defined Under Namespace

Classes: Backend

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



24
25
26
# File 'lib/redmine/i18n.rb', line 24

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

Instance Method Details

#current_languageObject



154
155
156
# File 'lib/redmine/i18n.rb', line 154

def current_language
  ::I18n.locale
end

#day_letter(day) ⇒ Object



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

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

#day_name(day) ⇒ Object



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

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

#find_language(lang) ⇒ Object



139
140
141
142
143
144
145
146
# File 'lib/redmine/i18n.rb', line 139

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

#format_date(date) ⇒ Object



71
72
73
74
75
76
77
# File 'lib/redmine/i18n.rb', line 71

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



90
91
92
93
94
95
96
97
98
99
100
# File 'lib/redmine/i18n.rb', line 90

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



79
80
81
82
83
84
85
86
87
88
# File 'lib/redmine/i18n.rb', line 79

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)
  local = user.convert_time_to_user_timezone(time)
  (include_date ? "#{format_date(local)} " : "") + ::I18n.l(local, **options)
end

#l(*args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/redmine/i18n.rb', line 28

def l(*args)
  case args.size
  when 1
    ::I18n.t(*args)
  when 2
    if args.last.is_a?(Hash)
      ::I18n.t(*args.first, **args.last)
    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



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

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



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

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

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



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

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



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'lib/redmine/i18n.rb', line 123

def languages_options(options={})
  options =
    if options[:cache] == false
      available_locales = ::I18n.backend.available_locales
      valid_languages.
        select {|locale| available_locales.include?(locale)}.
        map {|lang| [ll(lang.to_s, :general_lang_name), lang.to_s]}.
        sort_by(&: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



59
60
61
62
63
# File 'lib/redmine/i18n.rb', line 59

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, locale: locale)
end

#lu(user, *args) ⇒ Object

Localizes the given args with user’s language



66
67
68
69
# File 'lib/redmine/i18n.rb', line 66

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

#month_name(month) ⇒ Object



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

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

#set_language_if_valid(lang) ⇒ Object



148
149
150
151
152
# File 'lib/redmine/i18n.rb', line 148

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

#valid_languagesObject



114
115
116
# File 'lib/redmine/i18n.rb', line 114

def valid_languages
  ::I18n.available_locales
end