Published source
Download source ZIP
CH-J Server Manager
Browse directories and files for a specific application release.
Source is provided under the CH-J Proprietary Software License 1.14. Its availability does not change the license terms or grant additional rights.
1
"use strict";3
const test = require("node:test");4
const assert = require("node:assert/strict");5
const fs = require("node:fs");6
const path = require("node:path");7
const { catalogs, createI18n, normalizeLanguage, supportedLanguages } = require("../src/renderer/i18n");9
test("all i18n catalogs expose the same translation keys", () => {10
const expected = Object.keys(catalogs.cs).sort();11
assert.deepEqual(supportedLanguages, ["cs", "de", "en"]);12
for (const language of supportedLanguages) assert.deepEqual(Object.keys(catalogs[language]).sort(), expected);13
});15
test("i18n selects a supported language, interpolates values and falls back safely", () => {16
const i18n = createI18n("de-DE");17
assert.equal(i18n.getLanguage(), "de");18
assert.equal(i18n.t("updates.channel", { channel: "alpha" }), "Kanal alpha");19
assert.equal(i18n.t("missing.translation"), "missing.translation");20
assert.equal(i18n.setLanguage("../../en"), "cs");21
assert.equal(normalizeLanguage("en-US"), "en");22
});24
test("every translation key used by renderer markup exists in the catalogs", () => {25
const html = fs.readFileSync(path.join(__dirname, "..", "src", "renderer", "index.html"), "utf8");26
const keys = [...html.matchAll(/data-i18n(?:-placeholder|-aria-label)?="([^"]+)"/g)].map((match) => match[1]);27
assert.ok(keys.length > 50);28
for (const key of keys) assert.ok(key in catalogs.cs, `Missing renderer translation: ${key}`);29
});31
test("every literal dynamic translation key exists in the catalogs", () => {32
const source = fs.readFileSync(path.join(__dirname, "..", "src", "renderer", "app.js"), "utf8");33
const keys = [...source.matchAll(/\bt\("([^"]+)"/g)].map((match) => match[1]);34
assert.ok(keys.length > 25);35
for (const key of keys) assert.ok(key in catalogs.cs, `Missing dynamic translation: ${key}`);36
});SHA-256: e28748ae243a3775079c60abaf1504fb81377f238c8c952674467b60ff35dcf0
Archive SHA-256: 5ac91caf4fa32a6fdb114f2430deed486fbe7489d5eea343d1f034169fafb5e0