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.



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

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(x, lang = @lang, script = @script) ⇒ Object



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

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

Instance Method Details

#getObject



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

def get
  @labels
end

#l10n(x, 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



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

def l10n(x, lang = @lang, script = @script)
  if lang == "zh" && script == "Hans"
    xml = Nokogiri::HTML::DocumentFragment.parse(x)
    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
    x
  end
end

#load_yaml(lang, script, i18nyaml = nil) ⇒ Object



5
6
7
8
9
# 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



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/isodoc/i18n.rb', line 24

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
# 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



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/isodoc/i18n.rb', line 11

def normalise_hash(ret)
  if ret.is_a? Hash 
    ret.each do |k, v|
      ret[k] = normalise_hash(v)
    end
    ret
  elsif ret.is_a? Array then ret.map { |n| normalise_hash(n) }
  elsif ret.is_a? String then ret.unicode_normalize(:nfc) 
  else
    ret
  end
end

#set(x, y) ⇒ Object



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

def set(x, y)
  @labels[x] = y
end