This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/unit/localization-test.js

190 lines
5.3 KiB
JavaScript

import { module, test } from "qunit";
import I18n from "I18n";
import LocalizationInitializer from "discourse/initializers/localization";
import { getApplication } from "@ember/test-helpers";
module("initializer:localization", {
_locale: I18n.locale,
_translations: I18n.translations,
_extras: I18n.extras,
_compiledMFs: I18n._compiledMFs,
_overrides: I18n._overrides,
_mfOverrides: I18n._mfOverrides,
beforeEach() {
I18n.locale = "fr";
I18n.translations = {
fr: {
js: {
composer: {
both_languages1: "composer.both_languages1 (FR)",
both_languages2: "composer.both_languages2 (FR)",
},
},
},
en: {
js: {
composer: {
both_languages1: "composer.both_languages1 (EN)",
both_languages2: "composer.both_languages2 (EN)",
only_english1: "composer.only_english1 (EN)",
only_english2: "composer.only_english2 (EN)",
},
},
},
};
I18n._compiledMFs = {
"user.messages.some_key_MF": () => "user.messages.some_key_MF (FR)",
};
I18n.extras = {
fr: {
admin: {
api: {
both_languages1: "admin.api.both_languages1 (FR)",
both_languages2: "admin.api.both_languages2 (FR)",
},
},
},
en: {
admin: {
api: {
both_languages1: "admin.api.both_languages1 (EN)",
both_languages2: "admin.api.both_languages2 (EN)",
only_english1: "admin.api.only_english1 (EN)",
only_english2: "admin.api.only_english2 (EN)",
},
},
},
};
},
afterEach() {
I18n.locale = this._locale;
I18n.translations = this._translations;
I18n.extras = this._extras;
I18n._compiledMFs = this._compiledMFs;
I18n._overrides = this._overrides;
I18n._mfOverrides = this._mfOverrides;
},
});
test("translation overrides", function (assert) {
I18n._overrides = {
fr: {
"js.composer.both_languages1": "composer.both_languages1 (FR override)",
"js.composer.only_english2": "composer.only_english2 (FR override)",
},
en: {
"js.composer.both_languages2": "composer.both_languages2 (EN override)",
"js.composer.only_english1": "composer.only_english1 (EN override)",
},
};
LocalizationInitializer.initialize(getApplication());
assert.strictEqual(
I18n.t("composer.both_languages1"),
"composer.both_languages1 (FR override)",
"overrides existing translation in current locale"
);
assert.strictEqual(
I18n.t("composer.only_english1"),
"composer.only_english1 (EN override)",
"overrides translation in fallback locale"
);
assert.strictEqual(
I18n.t("composer.only_english2"),
"composer.only_english2 (FR override)",
"overrides translation that doesn't exist in current locale"
);
assert.strictEqual(
I18n.t("composer.both_languages2"),
"composer.both_languages2 (FR)",
"prefers translation in current locale over override in fallback locale"
);
});
test("translation overrides (admin_js)", function (assert) {
I18n._overrides = {
fr: {
"admin_js.admin.api.both_languages1":
"admin.api.both_languages1 (FR override)",
"admin_js.admin.api.only_english2":
"admin.api.only_english2 (FR override)",
"admin_js.type_to_filter": "type_to_filter (FR override)",
},
en: {
"admin_js.admin.api.both_languages2":
"admin.api.both_languages2 (EN override)",
"admin_js.admin.api.only_english1":
"admin.api.only_english1 (EN override)",
},
};
LocalizationInitializer.initialize(getApplication());
assert.strictEqual(
I18n.t("admin.api.both_languages1"),
"admin.api.both_languages1 (FR override)",
"overrides existing translation in current locale"
);
assert.strictEqual(
I18n.t("admin.api.only_english1"),
"admin.api.only_english1 (EN override)",
"overrides translation in fallback locale"
);
assert.strictEqual(
I18n.t("admin.api.only_english2"),
"admin.api.only_english2 (FR override)",
"overrides translation that doesn't exist in current locale"
);
assert.strictEqual(
I18n.t("admin.api.both_languages2"),
"admin.api.both_languages2 (FR)",
"prefers translation in current locale over override in fallback locale"
);
assert.strictEqual(
I18n.t("type_to_filter"),
"type_to_filter (FR override)",
"correctly changes the translation key by removing `admin_js`"
);
});
test("translation overrides for MessageFormat strings", function (assert) {
I18n._mfOverrides = {
"js.user.messages.some_key_MF": () =>
"user.messages.some_key_MF (FR override)",
};
LocalizationInitializer.initialize(getApplication());
assert.strictEqual(
I18n.messageFormat("user.messages.some_key_MF", {}),
"user.messages.some_key_MF (FR override)",
"overrides existing MessageFormat string"
);
});
test("skip translation override if parent node is not an object", function (assert) {
I18n._overrides = {
fr: {
"js.composer.both_languages1.foo":
"composer.both_languages1.foo (FR override)",
},
};
LocalizationInitializer.initialize(getApplication());
assert.strictEqual(
I18n.t("composer.both_languages1.foo"),
"[fr.composer.both_languages1.foo]"
);
});