Parent

R18n::Locale

Information about locale (language, country and other special variant preferences). Locale was named by RFC 3066. For example, locale for French speaking people in Canada will be fr-CA.

Locale classes are placed in R18n::Locales module and storage install locales/ dir.

Each locale has sublocales – often known languages for people from this locale. For example, many Belorussians know Russian and English. If there is’t translation for Belorussian, it will be searched in Russian and next in English translations.

Usage

Get Russian locale and print it information

ru = R18n.locale('ru')
ru.title #=> "Русский"
ru.code  #=> "ru"
ru.ltr?  #=> true

Available data

You can see more available data about locale in samples in locales/ dir.

Constants

LOCALES_DIR

Public Class Methods

available() click to toggle source

Codes of all available locales.

# File lib/r18n-core/locale.rb, line 63
def self.available
  Dir.glob(File.join(LOCALES_DIR, '*.rb')).map do |i|
    File.basename(i, '.rb')
  end
end
exists?(locale) click to toggle source

Is locale has info file.

# File lib/r18n-core/locale.rb, line 70
def self.exists?(locale)
  File.exists?(File.join(LOCALES_DIR, locale.to_s + '.rb'))
end
load(code) click to toggle source

Load locale by RFC 3066 code.

# File lib/r18n-core/locale.rb, line 75
def self.load(code)
  original = code.to_s.gsub(/[^-_a-zA-Z]/, '')
  code = original.gsub('_', '-').downcase

  @@loaded[code] ||= begin
    if exists? code
      require LOCALES_DIR.join("#{code}.rb").to_s
      name = code.gsub(/[\w\d]+/) { |i| i.capitalize }.gsub('-', '')
      eval('R18n::Locales::' + name).new
    else
      UnsupportedLocale.new(original)
    end
  end
end
set(properties) click to toggle source

Set locale properties. Locale class will have methods for each propetry name, which return propetry value:

class R18n::Locales::En < R18n::Locale
  set :title => 'English',
      :code  => 'en'
end

locale = R18n::Locales::En.new
locale.title #=> "English"
locale.code  #=> "en"
# File lib/r18n-core/locale.rb, line 101
def self.set(properties)
  properties.each_pair do |key, value|
    define_method(key) { value }
  end
end

Public Instance Methods

==(locale) click to toggle source

Is another locale has same code.

# File lib/r18n-core/locale.rb, line 130
def ==(locale)
  self.class == locale.class
end
code() click to toggle source

Locale RFC 3066 code.

# File lib/r18n-core/locale.rb, line 108
def code
  name = self.class.name.split('::').last
  lang, culture = name.match(/([A-Z][a-z]+)([A-Z]\w+)?/).captures
  lang.downcase + (culture ? '-' + culture.upcase : '')
end
format_date_full(date, year = true, *params) click to toggle source

Format date in most official form. For example, “December 31st, 2009”. For special cases you can replace it in locale’s class. If year is false date will be without year.

# File lib/r18n-core/locale.rb, line 287
def format_date_full(date, year = true, *params)
  format = full_format
  format = year_format.sub('_', format) if year
  strftime(date, format)
end
format_date_human(date, i18n, now = Date.today, *params) click to toggle source

Format date in human usable form. For example “5 days ago” or “yesterday”. In now you can set base time, which be used to get relative time. For special cases you can replace it in locale’s class.

# File lib/r18n-core/locale.rb, line 261
def format_date_human(date, i18n, now = Date.today, *params)
  days = (date - now).to_i
  case days
  when -6..-2
    i18n.human_time.days_ago(days.abs)
  when -1
    i18n.human_time.yesterday
  when 0
    i18n.human_time.today
  when 1
    i18n.human_time.tomorrow
  when 2..6
    i18n.human_time.after_days(days)
  else
    format_date_full(date, date.year != now.year)
  end
end
format_date_standard(date, *params) click to toggle source

Format date in compact form. For example, “12/31/09”.

# File lib/r18n-core/locale.rb, line 280
def format_date_standard(date, *params)
  strftime(date, date_format)
end
format_float(float) click to toggle source

Returns the float in String form, according to the rules of the locale. It will also put real typographic minus.

# File lib/r18n-core/locale.rb, line 189
def format_float(float)
  decimal = number_decimal
  self.format_integer(float.to_i) + decimal + float.to_s.split('.').last
end
format_integer(integer) click to toggle source

Returns the integer in String form, according to the rules of the locale. It will also put real typographic minus.

# File lib/r18n-core/locale.rb, line 177
def format_integer(integer)
  str = integer.to_s
  str[0] = '−' if 0 > integer # Real typographic minus
  group = number_group

  str.gsub(/(\d)(?=(\d\d\d)+(?!\d))/) do |match|
    match + group
  end
end
format_time(time) click to toggle source

Format time without date. For example, “12:59”.

# File lib/r18n-core/locale.rb, line 219
def format_time(time)
  strftime(time, time_format)
end
format_time_full(time, *params) click to toggle source

Format time in most official form. For example, “December 31st, 2009 12:59”. For special cases you can replace it in locale’s class.

# File lib/r18n-core/locale.rb, line 254
def format_time_full(time, *params)
  format_date_full(time) + format_time(time)
end
format_time_human(time, i18n, now = Time.now, *params) click to toggle source

Format time in human usable form. For example “5 minutes ago” or “yesterday”. In now you can set base time, which be used to get relative time. For special cases you can replace it in locale’s class.

# File lib/r18n-core/locale.rb, line 226
def format_time_human(time, i18n, now = Time.now, *params)
  minutes = (time - now) / 60.0
  diff = minutes.abs
  if (diff > 24 * 60) or (time.mday != now.mday and diff > 12 * 24)
    format_date_human(R18n::Utils.to_date(time), i18n,
                      R18n::Utils.to_date(now)) + format_time(time)
  else
    if -1 < minutes and 1 > minutes
      i18n.human_time.now
    elsif 60 <= minutes
      i18n.human_time.after_hours((diff / 60.0).floor)
    elsif -60 >= minutes
      i18n.human_time.hours_ago((diff / 60.0).floor)
    elsif 0 < minutes
      i18n.human_time.after_minutes(minutes.round)
    else
      i18n.human_time.minutes_ago(minutes.round.abs)
    end
  end
end
format_time_standard(time, *params) click to toggle source

Format time in compact form. For example, “12/31/09 12:59”.

# File lib/r18n-core/locale.rb, line 248
def format_time_standard(time, *params)
  format_date_standard(time) + format_time(time)
end
inspect() click to toggle source

Human readable locale code and title.

# File lib/r18n-core/locale.rb, line 140
def inspect
  "Locale #{code} (#{title})"
end
localize(obj, format = nil, *params) click to toggle source

Convert object to String. It support Fixnum, Bignum, Float, Time, Date and DateTime.

For time classes you can set format in standard strftime form, :full (“01 Jule, 2009”), :human (“yesterday”), :standard (“07/01/09”) or :month for standalone month name. Default format is :standard.

# File lib/r18n-core/locale.rb, line 151
def localize(obj, format = nil, *params)
  case obj
  when Integer
    format_integer(obj)
  when Float, BigDecimal
    format_float(obj.to_f)
  when Time, DateTime, Date
    return strftime(obj, format) if format.is_a? String
    return month_standalone[obj.month - 1] if :month == format
    return obj.to_s if :human == format and not params.first.is_a? I18n

    type = obj.is_a?(Date) ? 'date' : 'time'
    format = :standard unless format

    unless [:human, :full, :standard].include? format
      raise ArgumentError, "Unknown time formatter #{format}"
    end

    send "format_#{type}_#{format}", obj, *params
  else
    obj.to_s
  end
end
ltr?() click to toggle source

Is locale has left-to-right write direction.

# File lib/r18n-core/locale.rb, line 127
def ltr?; true; end
month_abbrs() click to toggle source
# File lib/r18n-core/locale.rb, line 123
def month_abbrs;      month_names; end
month_standalone() click to toggle source
# File lib/r18n-core/locale.rb, line 122
def month_standalone; month_names; end
pluralize(n) click to toggle source

Return pluralization type for n items. This is simple form. For special cases you can replace it in locale’s class.

# File lib/r18n-core/locale.rb, line 295
def pluralize(n)
  case n
  when 0
    0
  when 1
    1
  else
    'n'
  end
end
strftime(time, format) click to toggle source

Same that Time.strftime, but translate months and week days names. In time you can use Time, DateTime or Date object. In format you can use standard strftime format.

# File lib/r18n-core/locale.rb, line 197
def strftime(time, format)
  translated = ''
  format.scan(/%[EO]?.|./) do |c|
    case c.sub(/^%[EO]?(.)$/, '%\1')
    when '%A'
      translated << wday_names[time.wday]
    when '%a'
      translated << wday_abbrs[time.wday]
    when '%B'
      translated << month_names[time.month - 1]
    when '%b'
      translated << month_abbrs[time.month - 1]
    when '%p'
      translated << (time.hour < 12 ? time_am : time_pm)
    else
      translated << c
    end
  end
  time.strftime(translated)
end
supported?() click to toggle source

Is locale has information file. In this class always return true.

# File lib/r18n-core/locale.rb, line 135
def supported?
  true
end
wday_abbrs() click to toggle source
# File lib/r18n-core/locale.rb, line 124
def wday_abbrs;       wday_names;  end

[Validate]

Generated with the Darkfish Rdoc Generator 2.