Module: Redmine::I18n
- Includes:
- ActionView::Helpers::NumberHelper
- Included in:
- ApplicationController, ApplicationHelper, DestroyProjectJob, DestroyProjectsJob, Issue, IssueRelation::Relations, MailHandler, Mailer, QueryColumn, QueryFilter, DefaultData::Loader, Export::CSV::Base, Export::PDF::ITCPDF, FieldFormat::Base, Helpers::Calendar, Helpers::Gantt, Hook::Listener, MenuManager::MenuItem, MyPage, Pagination::Helper, Views::LabelledFormBuilder
- Defined in:
- lib/redmine/i18n.rb
Defined Under Namespace
Classes: Backend
Class Method Summary collapse
Instance Method Summary collapse
- #abbr_day_name(day) ⇒ Object
- #current_language ⇒ Object
- #day_letter(day) ⇒ Object
- #day_name(day) ⇒ Object
- #find_language(lang) ⇒ Object
- #format_date(date) ⇒ Object
- #format_hours(hours) ⇒ Object
- #format_time(time, include_date = true, user = nil) ⇒ Object
- #l(*args) ⇒ Object
- #l_hours(hours) ⇒ Object
- #l_hours_short(hours) ⇒ Object
- #l_or_humanize(s, options = {}) ⇒ Object
-
#languages_options(options = {}) ⇒ Object
Returns an array of languages names and code sorted by names, example: [[“Deutsch”, “de”], [“English”, “en”] …].
- #ll(lang, str, arg = nil) ⇒ Object
-
#lu(user, *args) ⇒ Object
Localizes the given args with user’s language.
- #month_name(month) ⇒ Object
-
#normalize_float(value) ⇒ Object
Will consider language specific separator in user input and normalize them to a unified format to be accepted by Kernel.Float().
- #set_language_if_valid(lang) ⇒ Object
- #valid_languages ⇒ Object
Class Method Details
Instance Method Details
#abbr_day_name(day) ⇒ Object
120 121 122 |
# File 'lib/redmine/i18n.rb', line 120 def abbr_day_name(day) ::I18n.t('date.abbr_day_names')[day % 7] end |
#current_language ⇒ Object
172 173 174 |
# File 'lib/redmine/i18n.rb', line 172 def current_language ::I18n.locale end |
#day_letter(day) ⇒ Object
124 125 126 |
# File 'lib/redmine/i18n.rb', line 124 def day_letter(day) ::I18n.t('date.abbr_day_names')[day % 7].first end |
#day_name(day) ⇒ Object
116 117 118 |
# File 'lib/redmine/i18n.rb', line 116 def day_name(day) ::I18n.t('date.day_names')[day % 7] end |
#find_language(lang) ⇒ Object
157 158 159 160 161 162 163 164 |
# File 'lib/redmine/i18n.rb', line 157 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
73 74 75 76 77 78 79 |
# File 'lib/redmine/i18n.rb', line 73 def format_date(date) return nil unless date = {} [:format] = Setting.date_format unless Setting.date_format.blank? ::I18n.l(date.to_date, **) end |
#format_hours(hours) ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/redmine/i18n.rb', line 92 def format_hours(hours) return "" if hours.blank? minutes = (hours * 60).round if Setting.timespan_format == 'minutes' h, m = minutes.divmod(60) "%d:%02d" % [h, m] else number_with_delimiter(sprintf('%.2f', minutes.fdiv(60)), delimiter: nil) end end |
#format_time(time, include_date = true, user = nil) ⇒ Object
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/redmine/i18n.rb', line 81 def format_time(time, include_date=true, user=nil) return nil unless time user ||= User.current = {} [: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, **) end |
#l(*args) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/redmine/i18n.rb', line 30 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
52 53 54 55 |
# File 'lib/redmine/i18n.rb', line 52 def l_hours(hours) hours = hours.to_f unless hours.is_a?(Numeric) l((hours < 2.0 ? :label_f_hour : :label_f_hour_plural), :value => format_hours(hours)) end |
#l_hours_short(hours) ⇒ Object
57 58 59 |
# File 'lib/redmine/i18n.rb', line 57 def l_hours_short(hours) l(:label_f_hour_short, :value => format_hours(hours.is_a?(Numeric) ? hours : hours.to_f)) end |
#l_or_humanize(s, options = {}) ⇒ Object
47 48 49 50 |
# File 'lib/redmine/i18n.rb', line 47 def l_or_humanize(s, ={}) k = :"#{[:prefix]}#{s}" ::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
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/redmine/i18n.rb', line 141 def (={}) = if [: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 :cache => false end end .map {|name, lang| [name.force_encoding("UTF-8"), lang.force_encoding("UTF-8")]} end |
#ll(lang, str, arg = nil) ⇒ Object
61 62 63 64 65 |
# File 'lib/redmine/i18n.rb', line 61 def ll(lang, str, arg=nil) = arg.is_a?(Hash) ? arg : {:value => arg} locale = lang.to_s.gsub(%r{(.+)\-(.+)$}) {"#{$1}-#{$2.upcase}"} ::I18n.t(str.to_s, **, locale: locale) end |
#lu(user, *args) ⇒ Object
Localizes the given args with user’s language
68 69 70 71 |
# File 'lib/redmine/i18n.rb', line 68 def lu(user, *args) lang = user.try(:language).presence || Setting.default_language ll(lang, *args) end |
#month_name(month) ⇒ Object
128 129 130 |
# File 'lib/redmine/i18n.rb', line 128 def month_name(month) ::I18n.t('date.month_names')[month] end |
#normalize_float(value) ⇒ Object
The delimiter cannot be used here if it is a decimal point since it will clash with the dot separator.
Will consider language specific separator in user input and normalize them to a unified format to be accepted by Kernel.Float().
111 112 113 114 |
# File 'lib/redmine/i18n.rb', line 111 def normalize_float(value) separator = ::I18n.t('number.format.separator') value.gsub(/[#{separator}]/, separator => '.') end |
#set_language_if_valid(lang) ⇒ Object
166 167 168 169 170 |
# File 'lib/redmine/i18n.rb', line 166 def set_language_if_valid(lang) if l = find_language(lang) ::I18n.locale = l end end |
#valid_languages ⇒ Object
132 133 134 |
# File 'lib/redmine/i18n.rb', line 132 def valid_languages ::I18n.available_locales end |