Class: IsoDoc::I18n

Inherits:
Object
  • Object
show all
Defined in:
lib/isodoc/i18n.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lang, script, i18nyaml = nil) ⇒ I18n

Returns a new instance of I18n.



51
52
53
54
55
56
57
58
59
60
61
# 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

Class Method Details

.l10n(text, lang = @lang, script = @script) ⇒ Object



63
64
65
# File 'lib/isodoc/i18n.rb', line 63

def self.l10n(text, lang = @lang, script = @script)
  l10n(text, lang, script)
end

Instance Method Details

#getObject



43
44
45
# File 'lib/isodoc/i18n.rb', line 43

def get
  @labels
end

#l10n(text, lang = @lang, script = @script) ⇒ Object

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



70
71
72
73
74
75
76
77
78
79
80
81
82
# 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) ⇒ Object



5
6
7
8
9
10
# 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) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
# 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) ⇒ Object



38
39
40
41
# 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) ⇒ Object



84
85
86
87
88
89
90
91
# 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) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
# 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) ⇒ Object



47
48
49
# File 'lib/isodoc/i18n.rb', line 47

def set(key, val)
  @labels[key] = val
end