class IsoDoc::I18n

Public Class Methods

l10n(text, lang = @lang, script = @script) click to toggle source
# File lib/isodoc/i18n.rb, line 63
def self.l10n(text, lang = @lang, script = @script)
  l10n(text, lang, script)
end
new(lang, script, i18nyaml = nil) click to toggle source
# File lib/isodoc/i18n.rb, line 51
def initialize(lang, script, i18nyaml = nil)
  @lang = lang
  @script = script
  y = load_yaml(lang, script, i18nyaml)
  @labels = y
  @labels["language"] = @lang
  @labels["script"] = @script
  @labels.each do |k, v|
    self.class.send(:define_method, k.downcase) { v }
  end
end

Public Instance Methods

get() click to toggle source
# File lib/isodoc/i18n.rb, line 43
def get
  @labels
end
l10n(text, lang = @lang, script = @script) click to toggle source

TODO: move to localization file function localising spaces and punctuation. Not clear if period needs to be localised for zh

# File lib/isodoc/i18n.rb, line 70
def l10n(text, lang = @lang, script = @script)
  if lang == "zh" && script == "Hans"
    xml = Nokogiri::HTML::DocumentFragment.parse(text)
    xml.traverse do |n|
      next unless n.text?

      n.replace(n.text.gsub(/ /, "").gsub(/:/, ":").gsub(/,/, "、")
        .gsub(/\(/, "(").gsub(/\)/, ")").gsub(/\[/, "【").gsub(/\]/, "】"))
    end
    xml.to_xml.gsub(/<b>/, "").gsub("</b>", "").gsub(/<\?[^>]+>/, "")
  else text
  end
end
load_yaml(lang, script, i18nyaml = nil) click to toggle source
# File lib/isodoc/i18n.rb, line 5
def load_yaml(lang, script, i18nyaml = nil)
  ret = load_yaml1(lang, script)
  return normalise_hash(ret.merge(YAML.load_file(i18nyaml))) if i18nyaml

  normalise_hash(ret)
end
load_yaml1(lang, script) click to toggle source
# File lib/isodoc/i18n.rb, line 25
def load_yaml1(lang, script)
  case lang
  when "en", "fr", "ru", "de", "es", "ar"
    load_yaml2(lang)
  when "zh"
    if script == "Hans" then load_yaml2("zh-Hans")
    else load_yaml2("en")
    end
  else
    load_yaml2("en")
  end
end
load_yaml2(str) click to toggle source
# File lib/isodoc/i18n.rb, line 38
def load_yaml2(str)
  YAML.load_file(File.join(File.dirname(__FILE__),
                           "../isodoc-yaml/i18n-#{str}.yaml"))
end
multiple_and(names, andword) click to toggle source
# File lib/isodoc/i18n.rb, line 84
def multiple_and(names, andword)
  return "" if names.empty?
  return names[0] if names.length == 1

  (names.length == 2) &&
    (return l10n("#{names[0]} #{andword} #{names[1]}", @lang, @script))
  l10n(names[0..-2].join(", ") + " #{andword} #{names[-1]}", @lang, @script)
end
normalise_hash(ret) click to toggle source
# File lib/isodoc/i18n.rb, line 12
def normalise_hash(ret)
  case ret
  when Hash
    ret.each do |k, v|
      ret[k] = normalise_hash(v)
    end
    ret
  when Array then ret.map { |n| normalise_hash(n) }
  when String then ret.unicode_normalize(:nfc)
  else ret
  end
end
set(key, val) click to toggle source
# File lib/isodoc/i18n.rb, line 47
def set(key, val)
  @labels[key] = val
end