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.



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/isodoc/i18n.rb', line 49

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



61
62
63
# File 'lib/isodoc/i18n.rb', line 61

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

Instance Method Details

#getObject



41
42
43
# File 'lib/isodoc/i18n.rb', line 41

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



68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/isodoc/i18n.rb', line 68

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
37
38
39
# File 'lib/isodoc/i18n.rb', line 25

def load_yaml1(lang, script)
  if lang == "en"
    YAML.load_file(File.join(File.dirname(__FILE__),
                             "../isodoc-yaml/i18n-en.yaml"))
  elsif lang == "fr"
    YAML.load_file(File.join(File.dirname(__FILE__),
                             "../isodoc-yaml/i18n-fr.yaml"))
  elsif lang == "zh" && script == "Hans"
    YAML.load_file(File.join(File.dirname(__FILE__),
                             "../isodoc-yaml/i18n-zh-Hans.yaml"))
  else
    YAML.load_file(File.join(File.dirname(__FILE__),
                             "../isodoc-yaml/i18n-en.yaml"))
  end
end

#multiple_and(names, andword) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/isodoc/i18n.rb', line 82

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



45
46
47
# File 'lib/isodoc/i18n.rb', line 45

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