class ReVIEW::I18n

Constants

ALPHA_L
ALPHA_LW
ALPHA_U
ALPHA_UW
ARABIC_LW
ARABIC_UW
JAPAN
ROMAN_L
ROMAN_U
ROMAN_UW

Attributes

locale[RW]

Public Class Methods

get(word, locale = nil) click to toggle source
# File lib/review/i18n.rb, line 58
def self.get(word, locale = nil)
  @i18n.get(word, locale)
end
i18n(*args) click to toggle source
# File lib/review/i18n.rb, line 34
def self.i18n(*args)
  raise NotImplementedError, "I18n.i18n is obsoleted. Please use I18n.setup(locale, [ymlfile])"
end
locale=(locale) click to toggle source
# File lib/review/i18n.rb, line 42
def self.locale=(locale)
  if @i18n
    @i18n.locale = locale
  else
    I18n.setup(locale)
  end
end
new(locale = nil) click to toggle source
# File lib/review/i18n.rb, line 64
def initialize(locale = nil)
  @locale = locale
  load_default
end
setup(locale="ja", ymlfile = "locale.yml") click to toggle source
# File lib/review/i18n.rb, line 16
def self.setup(locale="ja", ymlfile = "locale.yml")
  @i18n = ReVIEW::I18n.new(locale)

  lfile = nil
  if ymlfile
    lfile = File.expand_path(ymlfile, Dir.pwd)

    # backward compatibility
    if !File.exist?(lfile) && (ymlfile == "locale.yml") && File.exist?(File.expand_path("locale.yaml", Dir.pwd))
      raise ReVIEW::ConfigError, "locale.yaml is obsoleted.  Please use locale.yml."
    end
  end

  if lfile && File.file?(lfile)
    @i18n.update_localefile(lfile)
  end
end
t(str, args = nil) click to toggle source
# File lib/review/i18n.rb, line 38
def self.t(str, args = nil)
  @i18n.t(str, args)
end
Also aliased as: v
update(user_i18n, locale = nil) click to toggle source
# File lib/review/i18n.rb, line 54
def self.update(user_i18n, locale = nil)
  @i18n.update(user_i18n, locale)
end
v(str, args = nil)
Alias for: t

Public Instance Methods

get(word, locale = nil) click to toggle source
# File lib/review/i18n.rb, line 104
def get(word, locale = nil)
  locale ||= @locale
  @store[locale][word]
end
load_default() click to toggle source
# File lib/review/i18n.rb, line 69
def load_default
  load_file(File.expand_path("i18n.yml", File.dirname(__FILE__)))
end
load_file(path) click to toggle source
# File lib/review/i18n.rb, line 73
def load_file(path)
  @store = YAML.load_file(path)
end
t(str, args = nil) click to toggle source
# File lib/review/i18n.rb, line 109
def t(str, args = nil)
  frmt = @store[@locale][str].dup
  frmt.gsub!('%%', '##')

  if !args.is_a?(Array)
    if args.nil? && frmt !~ /\%/
      args = []
    else
      args = [args]
    end
  end

  percents = frmt.scan(/%[A-Za-z]{1,3}/)
  remove_args = []
  percents.each_with_index do |i, idx|
    case i
    when "%pA"
      frmt.sub!(i, ALPHA_U[args[idx]])
      remove_args << idx
    when "%pa"
      frmt.sub!(i, ALPHA_L[args[idx]])
      remove_args << idx
    when "%pAW"
      frmt.sub!(i, ALPHA_UW[args[idx]])
      remove_args << idx
    when "%paW"
      frmt.sub!(i, ALPHA_LW[args[idx]])
      remove_args << idx
    when "%pR"
      frmt.sub!(i, ROMAN_U[args[idx]])
      remove_args << idx
    when "%pr"
      frmt.sub!(i, ROMAN_L[args[idx]])
      remove_args << idx
    when "%pRW"
      frmt.sub!(i, ROMAN_UW[args[idx]])
      remove_args << idx
    when "%pJ"
      frmt.sub!(i, JAPAN[args[idx]])
      remove_args << idx
    when "%pdW"
      frmt.sub!(i, ARABIC_LW[args[idx]])
      remove_args << idx
    when "%pDW"
      frmt.sub!(i, ARABIC_UW[args[idx]])
      remove_args << idx
    else
      # noop
    end
  end
  remove_args.reverse_each do |idx|
    args.delete_at idx
  end
  args_matched = (frmt.count("%") == args.size)
  frmt.gsub!('##', '%%')
  args_matched ? (frmt % args) : frmt
rescue
  str
end
update(user_i18n, locale = nil) click to toggle source
# File lib/review/i18n.rb, line 95
def update(user_i18n, locale = nil)
  locale ||= @locale
  if @store[locale]
    @store[locale].merge!(user_i18n)
  else
    @store[locale] = user_i18n
  end
end
update_localefile(path) click to toggle source
# File lib/review/i18n.rb, line 77
def update_localefile(path)
  user_i18n = YAML.load_file(path)
  locale = user_i18n["locale"]
  if locale
    user_i18n.delete("locale")
    if @store[locale]
      @store[locale].merge!(user_i18n)
    else
      @store[locale] = user_i18n
    end
  else
    user_i18n.each do |key, values|
      raise KeyError, "Invalid locale file: #{path}" unless values.kind_of? Hash
      @store[key].merge!(values)
    end
  end
end