FIX: Don't crash when MF definitions are missing
Currently, if MF definitions are missing (typically because there’s a compilation error), `I18n.messageFormat` will try to access `I18n._mfMessages.hasMessage` resulting in a crash that will in turn crash Ember. This patch addresses the issue by using the optional chaining operator making the `I18n.messageFormat` method return a "Missing Key" message. MF strings won’t be rendered properly, but the site will stay usable.
This commit is contained in:
parent
e81fc27a0f
commit
cfa4f07378
|
@ -379,7 +379,7 @@ export class I18n {
|
||||||
}
|
}
|
||||||
|
|
||||||
messageFormat(key, options) {
|
messageFormat(key, options) {
|
||||||
const message = this._mfMessages.hasMessage(
|
const message = this._mfMessages?.hasMessage(
|
||||||
key,
|
key,
|
||||||
this._mfMessages.locale,
|
this._mfMessages.locale,
|
||||||
this._mfMessages.defaultLocale
|
this._mfMessages.defaultLocale
|
||||||
|
|
|
@ -12,6 +12,7 @@ module("Unit | Utility | i18n", function (hooks) {
|
||||||
this._translations = I18n.translations;
|
this._translations = I18n.translations;
|
||||||
this._extras = I18n.extras;
|
this._extras = I18n.extras;
|
||||||
this._pluralizationRules = { ...I18n.pluralizationRules };
|
this._pluralizationRules = { ...I18n.pluralizationRules };
|
||||||
|
this._mfMessages = I18n._mfMessages;
|
||||||
|
|
||||||
I18n.locale = "fr";
|
I18n.locale = "fr";
|
||||||
|
|
||||||
|
@ -109,6 +110,7 @@ module("Unit | Utility | i18n", function (hooks) {
|
||||||
I18n.translations = this._translations;
|
I18n.translations = this._translations;
|
||||||
I18n.extras = this._extras;
|
I18n.extras = this._extras;
|
||||||
I18n.pluralizationRules = this._pluralizationRules;
|
I18n.pluralizationRules = this._pluralizationRules;
|
||||||
|
I18n._mfMessages = this._mfMessages;
|
||||||
});
|
});
|
||||||
|
|
||||||
test("defaults", function (assert) {
|
test("defaults", function (assert) {
|
||||||
|
@ -356,4 +358,19 @@ module("Unit | Utility | i18n", function (hooks) {
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("messageFormat", function (assert) {
|
||||||
|
assert.ok(
|
||||||
|
I18n.messageFormat("posts_likes_MF", { count: 2, ratio: "high" }).match(
|
||||||
|
/2 replies/
|
||||||
|
),
|
||||||
|
"It works properly"
|
||||||
|
);
|
||||||
|
I18n._mfMessages = null;
|
||||||
|
assert.strictEqual(
|
||||||
|
I18n.messageFormat("posts_likes_MF", { count: 2, ratio: "high" }),
|
||||||
|
"Missing Key: posts_likes_MF",
|
||||||
|
"Degrades gracefully if MF definitions are not available."
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue