Class: IsoDoc::I18n
Constant Summary
Function::Utils::CLAUSE_ANCESTOR, Function::Utils::DOCTYPE_HDR, Function::Utils::NOKOHEAD, Function::Utils::NOTE_CONTAINER_ANCESTOR
Class Method Summary
collapse
Instance Method Summary
collapse
-
#bidiwrap(text, lang, script) ⇒ Object
-
#bidiwrap_vars(lang, script) ⇒ Object
-
#get ⇒ Object
-
#initialize(lang, script, i18nyaml = nil) ⇒ I18n
constructor
-
#l10n(text, lang = @lang, script = @script) ⇒ Object
TODO: move to localization file function localising spaces and punctuation.
-
#l10n_zh(text) ⇒ Object
-
#load_yaml(lang, script, i18nyaml = nil) ⇒ Object
-
#load_yaml1(lang, script) ⇒ Object
-
#load_yaml2(str) ⇒ Object
-
#multiple_and(names, andword) ⇒ Object
-
#normalise_hash(ret) ⇒ Object
-
#set(key, val) ⇒ Object
#attr_code, #cleanup_entities, #date_range, #emf?, #empty2nil, #external_path, #extract_delims, #from_xhtml, #get_clause_id, #get_note_container_id, #header_strip, #header_strip_elem?, #image_localfile, #insert_tab, #labelled_ancestor, #liquid, #noko, #ns, #populate_template, #save_dataimage, #sentence_join, #to_xhtml, #to_xhtml_fragment, #to_xhtml_prep
Constructor Details
#initialize(lang, script, i18nyaml = nil) ⇒ I18n
Returns a new instance of I18n.
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/isodoc/i18n.rb', line 52
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) { get[k] }
end
end
|
Class Method Details
.l10n(text, lang = @lang, script = @script) ⇒ Object
64
65
66
|
# File 'lib/isodoc/i18n.rb', line 64
def self.l10n(text, lang = @lang, script = @script)
l10n(text, lang, script)
end
|
Instance Method Details
#bidiwrap(text, lang, script) ⇒ Object
77
78
79
80
81
82
83
84
85
|
# File 'lib/isodoc/i18n.rb', line 77
def bidiwrap(text, lang, script)
my_script, my_rtl, outer_rtl = bidiwrap_vars(lang, script)
if my_rtl && !outer_rtl
mark = %w(Arab Aran).include?(my_script) ? "؜" : "‏"
"#{mark}#{text}#{mark}"
elsif !my_rtl && outer_rtl then "‎#{text}‎"
else text
end
end
|
#bidiwrap_vars(lang, script) ⇒ Object
87
88
89
90
91
92
93
|
# File 'lib/isodoc/i18n.rb', line 87
def bidiwrap_vars(lang, script)
my_script = script || Metanorma::Utils.default_script(lang)
[my_script,
Metanorma::Utils.rtl_script?(my_script),
Metanorma::Utils.rtl_script?(@script || Metanorma::Utils
.default_script(@lang))]
end
|
#get ⇒ Object
44
45
46
|
# File 'lib/isodoc/i18n.rb', line 44
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
71
72
73
74
75
|
# File 'lib/isodoc/i18n.rb', line 71
def l10n(text, lang = @lang, script = @script)
if lang == "zh" && script == "Hans" then l10n_zh(text)
else bidiwrap(text, lang, script)
end
end
|
#l10n_zh(text) ⇒ Object
95
96
97
98
99
100
101
102
103
104
105
|
# File 'lib/isodoc/i18n.rb', line 95
def l10n_zh(text)
xml = Nokogiri::HTML::DocumentFragment.parse(text)
xml.traverse do |n|
next unless n.text?
n.replace(cleanup_entities(n.text.gsub(/ /, "").gsub(/:/, ":")
.gsub(/,/, "、").gsub(/\(/, "(").gsub(/\)/, ")")
.gsub(/\[/, "【").gsub(/\]/, "】"), is_xml: false))
end
xml.to_xml.gsub(/<b>/, "").gsub("</b>", "").gsub(/<\?[^>]+>/, "")
end
|
#load_yaml(lang, script, i18nyaml = nil) ⇒ Object
6
7
8
9
10
11
|
# File 'lib/isodoc/i18n.rb', line 6
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
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/isodoc/i18n.rb', line 26
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
39
40
41
42
|
# File 'lib/isodoc/i18n.rb', line 39
def load_yaml2(str)
YAML.load_file(File.join(File.dirname(__FILE__),
"../isodoc-yaml/i18n-#{str}.yaml"))
end
|
#multiple_and(names, andword) ⇒ Object
107
108
109
110
111
112
113
114
|
# File 'lib/isodoc/i18n.rb', line 107
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
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/isodoc/i18n.rb', line 13
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 cleanup_entities(ret.unicode_normalize(:nfc))
else ret
end
end
|
#set(key, val) ⇒ Object
48
49
50
|
# File 'lib/isodoc/i18n.rb', line 48
def set(key, val)
@labels[key] = val
end
|