Module: Redmine::I18n

Defined Under Namespace

Classes: Backend

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object


22
23
24
# File 'lib/redmine/i18n.rb', line 22

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

Instance Method Details

#current_languageObject


146
147
148
# File 'lib/redmine/i18n.rb', line 146

def current_language
  ::I18n.locale
end

#day_letter(day) ⇒ Object


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

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

#day_name(day) ⇒ Object


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

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

#find_language(lang) ⇒ Object


135
136
137
138
# File 'lib/redmine/i18n.rb', line 135

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


69
70
71
72
73
74
# File 'lib/redmine/i18n.rb', line 69

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


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

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


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

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


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

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


48
49
50
51
# File 'lib/redmine/i18n.rb', line 48

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


53
54
55
# File 'lib/redmine/i18n.rb', line 53

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

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


43
44
45
46
# File 'lib/redmine/i18n.rb', line 43

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


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

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


57
58
59
60
61
# File 'lib/redmine/i18n.rb', line 57

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


64
65
66
67
# File 'lib/redmine/i18n.rb', line 64

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

#month_name(month) ⇒ Object


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

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

#set_language_if_valid(lang) ⇒ Object


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

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

#valid_languagesObject


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

def valid_languages
  ::I18n.available_locales
end