|
|
|
|
|
|
|
module I18nHelper
|
|
|
|
def url_for_locale(locale, url = nil)
|
|
|
|
return url unless locale.present?
|
|
|
|
url ||= current_path(true)
|
|
|
|
|
|
|
|
return url if Rails.env.development? || Rails.env.test?
|
|
|
|
return "https://preview-#{locale.to_s}.bikebike.org#{url}" if Rails.env.preview?
|
|
|
|
"https://#{locale.to_s}.bikebike.org#{url}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def current_path(relative = false)
|
|
|
|
new_params = params.merge({action: (params[:_original_action] || params[:action])})
|
|
|
|
new_params.delete(:_original_action)
|
|
|
|
|
|
|
|
if Rails.env.development? || Rails.env.test?
|
|
|
|
return url_for(new_params.merge({lang: locale.to_s}))
|
|
|
|
end
|
|
|
|
|
|
|
|
# return now if this is a relative path, don't add the host
|
|
|
|
return url_for(new_params) if relative
|
|
|
|
|
|
|
|
subdomain = Rails.env.preview? ? "preview-#{locale.to_s}" : locale.to_s
|
|
|
|
url_for(new_params.merge(host: "#{subdomain}.bikebike.org"))
|
|
|
|
end
|
|
|
|
|
|
|
|
def canonical_url
|
|
|
|
url = current_path
|
|
|
|
return url if Rails.env.development? || Rails.env.test?
|
|
|
|
return "https://preview.bikebike.org#{url}" if Rails.env.preview?
|
|
|
|
"https://bikebike.org#{url}"
|
|
|
|
end
|
|
|
|
|
|
|
|
def date(date, format = :long)
|
|
|
|
I18n.l(date.is_a?(String) ? Date.parse(date) : date, :format => format)
|
|
|
|
end
|
|
|
|
|
|
|
|
def time(time, format = :short)
|
|
|
|
if time.is_a?(String)
|
|
|
|
time = Date.parse(time)
|
|
|
|
elsif time.is_a?(Float) || time.is_a?(Integer)
|
|
|
|
time = DateTime.now.midnight + time.hours
|
|
|
|
end
|
|
|
|
|
|
|
|
I18n.l(time, format: format)
|
|
|
|
end
|
|
|
|
|
|
|
|
def date_span(date1, date2)
|
|
|
|
key = 'same_month'
|
|
|
|
if date1.year != date2.year
|
|
|
|
key = 'different_year'
|
|
|
|
elsif date1.month != date2.month
|
|
|
|
key = 'same_year'
|
|
|
|
end
|
|
|
|
d1 = I18n.l(date1.to_date, format: "span_#{key}_date_1".to_sym)
|
|
|
|
d2 = I18n.l(date2.to_date, format: "span_#{key}_date_2".to_sym)
|
|
|
|
_('date.date_span', vars: {:date_1 => d1, :date_2 => d2})
|
|
|
|
end
|
|
|
|
|
|
|
|
def time_length(length)
|
|
|
|
hours = length.to_i
|
|
|
|
minutes = ((length - hours) * 60).to_i
|
|
|
|
hours = hours > 0 ? (I18n.t 'datetime.distance_in_words.x_hours', count: hours) : nil
|
|
|
|
minutes = minutes > 0 ? (I18n.t 'datetime.distance_in_words.x_minutes', count: minutes) : nil
|
|
|
|
return hours.present? ? (minutes.present? ? (I18n.t 'datetime.distance_in_words.x_and_y', x: hours, y: minutes) : hours) : minutes
|
|
|
|
end
|
|
|
|
|
|
|
|
def hour_span(time1, time2)
|
|
|
|
(time2 - time1) / 3600
|
|
|
|
end
|
|
|
|
|
|
|
|
def hours(time1, time2)
|
|
|
|
time_length hour_span(time1, time2)
|
|
|
|
end
|
|
|
|
|
|
|
|
def money(amount)
|
|
|
|
return _!('$0.00') if amount == 0
|
|
|
|
_!((amount * 100).to_i.to_s.gsub(/^(.*)(\d\d)$/, '$\1.\2'))
|
|
|
|
end
|
|
|
|
|
|
|
|
def percent(p)
|
|
|
|
return _!('0.00%') if p == 0
|
|
|
|
_!((p * 10000).to_i.to_s.gsub(/^(.*)(\d\d)$/, '\1.\2%'))
|
|
|
|
end
|
|
|
|
end
|