require "spec_helper" RSpec.describe IsoDoc::I18n do it "has a version number" do expect(IsoDoc::I18n::VERSION).not_to be nil end it "loads language files" do c = IsoDoc::I18n.new("en", "Latn") expect(c.text).to eq "text" expect(c.at).to eq "at" expect(c.language).to eq "en" expect(c.script).to eq "Latn" end it "manipulates i18n class" do c = IsoDoc::I18n.new("en", "Latn") expect(c.get["text"]).to eq "text" expect(c.get["fred"]).to be_nil c.set("fred", "frederic") expect(c.get["fred"]).to eq "frederic" end it "loads default for missing language files" do c = IsoDoc::I18n.new("tlh", "Klin") expect(c.text).to eq "text" expect(c.at).to eq "at" expect(c.language).to eq "tlh" expect(c.script).to eq "Klin" end it "loads language file overrides" do c = IsoDoc::I18n.new("en", "Latn", i18nyaml: "spec/assets/new.yaml") expect(c.text).to eq "text2" expect(c.at).to eq "at" expect(c.hash.to_s).to be_equivalent_to '{"key1"=>"val1", "key2"=>"val2"}' expect(c.arr.to_s).to eq '["arr1", "arr2"]' end it "loads language hash overrides" do c = IsoDoc::I18n.new("en", "Latn", i18nhash: YAML.load_file("spec/assets/new.yaml")) expect(c.text).to eq "text2" expect(c.at).to eq "at" expect(c.hash.to_s).to be_equivalent_to '{"key1"=>"val1", "key2"=>"val2"}' expect(c.arr.to_s).to eq '["arr1", "arr2"]' end it "does English localisation" do c = IsoDoc::I18n.new("en", "Latn") expect(c.l10n("Code (hello, world.)")) .to be_equivalent_to "Code (hello, world.)" expect(c.l10n("Code (hello, world.)")) .to be_equivalent_to "Code (hello, world.)" end it "does Chinese localisation" do c = IsoDoc::I18n.new("zh", "Hans") expect(c.l10n("Code (hello, world.)")) .to be_equivalent_to "Code (hello, world.)" expect(c.l10n("计算机代码 (你好, 世界.)")) .to be_equivalent_to " 计算机代码(你好,世界。)" expect(c.l10n("计算机代码 (你好, 世界.)")) .to be_equivalent_to "计算机代码 (你好, 世界。)" end it "does Hebrew RTL localisation" do c = IsoDoc::I18n.new("en", "Hebr") expect(c.l10n("Code (hello, world.)")) .to be_equivalent_to "Code (hello, world.)" expect(c.l10n("Code (hello, world.)", "en", "Latn")) .to be_equivalent_to "‎Code (hello, world.)‎" c = IsoDoc::I18n.new("en", "Latn") expect(c.l10n("Code (hello, world.)", "en", "Hebr")) .to be_equivalent_to "‏Code (hello, world.)‏" end it "does Arabic RTL localisation" do c = IsoDoc::I18n.new("en", "Arab") expect(c.l10n("Code (hello, world.)")) .to be_equivalent_to "Code (hello, world.)" expect(c.l10n("Code (hello, world.)", "en", "Latn")) .to be_equivalent_to "‎Code (hello, world.)‎" c = IsoDoc::I18n.new("en", "Latn") expect(c.l10n("Code (hello, world.)", "en", "Arab")) .to be_equivalent_to "؜Code (hello, world.)؜" end it "does French localisation" do e = HTMLEntities.new c = IsoDoc::I18n.new("fr", "Latn") expect(e.encode(c.l10n("Code; «code» and: code!"), :hexadecimal)) .to be_equivalent_to "Code ; « code » "\ "and : code !" expect(e.encode(c.l10n("Code; «code» and: code!"), :hexadecimal)) .to be_equivalent_to "Code ; « code » "\ "and : code !" c = IsoDoc::I18n.new("fr", "Latn", locale: "FR") expect(e.encode(c.l10n("Code; «code» and: code!"), :hexadecimal)) .to be_equivalent_to "Code ; « code » "\ "and : code !" c = IsoDoc::I18n.new("fr", "Latn", locale: "CH") expect(e.encode(c.l10n("Code; «code» and: code!"), :hexadecimal)) .to be_equivalent_to "Code ; « code » "\ "and : code !" expect(e.encode(c.l10n("http://xyz a;b"), :hexadecimal)) .to be_equivalent_to "http://xyz a;b" end it "does boolean conjunctions" do c = IsoDoc::I18n.new("en", "Latn") expect(c.boolean_conj([], "and")).to eq "" expect(c.boolean_conj(%w(a), "and")).to eq "a" expect(c.boolean_conj(%w(a b), "and")).to eq "a and b" expect(c.boolean_conj(%w(a b c), "and")).to eq "a, b, and c" expect(c.boolean_conj(%w(a b c d), "and")).to eq "a, b, c, and d" end it "does German ordinals" do c = IsoDoc::I18n.new("de", "Latn", i18nyaml: "spec/assets/de.yaml") term = c.inflection[c.edition] expect(c.inflect_ordinal(5, term, "SpelloutRules")) .to eq "fünfte" end it "does Chinese ordinals" do c = IsoDoc::I18n.new("zh", "Hans", i18nyaml: "spec/assets/zh-Hans.yaml") term = c.inflection[c.edition] expect(c.inflect_ordinal(5, term, "SpelloutRules")) .to eq "第五" end it "does Klingon ordinals" do c = IsoDoc::I18n.new("tlh", "Hans", i18nyaml: "spec/assets/zh-Hans.yaml") term = c.inflection[c.edition] expect(c.inflect_ordinal(5, term, "SpelloutRules")) .to eq "fifth" end end