mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2026-02-15 07:28:59 +00:00
Fix i18n lint rule with emoji->emojify component
This commit is contained in:
@@ -8,6 +8,7 @@ const globalMessages = require('../../_locales/en/messages.json');
|
||||
const messageKeys = Object.keys(globalMessages).sort((a, b) => {
|
||||
return a.localeCompare(b);
|
||||
});
|
||||
|
||||
const allIcuParams = messageKeys
|
||||
.filter(key => {
|
||||
return isIcuMessageKey(globalMessages, key);
|
||||
@@ -18,9 +19,12 @@ const allIcuParams = messageKeys
|
||||
).join('\n');
|
||||
});
|
||||
|
||||
const DEFAULT_RICH_TEXT_ELEMENT_NAMES = ['emojify'];
|
||||
|
||||
const hashSum = crypto.createHash('sha256');
|
||||
hashSum.update(messageKeys.join('\n'));
|
||||
hashSum.update(allIcuParams.join('\n'));
|
||||
hashSum.update(DEFAULT_RICH_TEXT_ELEMENT_NAMES.join('\n'));
|
||||
const messagesCacheKey = hashSum.digest('hex');
|
||||
|
||||
function isI18nCall(node) {
|
||||
@@ -129,7 +133,7 @@ function isDeletedMessageKey(messages, key) {
|
||||
return description?.toLowerCase().startsWith('(deleted ');
|
||||
}
|
||||
|
||||
function getIcuMessageParams(message) {
|
||||
function getIcuMessageParams(message, defaultRichTextElementNames = []) {
|
||||
const params = new Set();
|
||||
|
||||
function visitOptions(options) {
|
||||
@@ -177,6 +181,10 @@ function getIcuMessageParams(message) {
|
||||
|
||||
visit(icuParser.parse(message));
|
||||
|
||||
for (const defaultRichTextElementName of defaultRichTextElementNames) {
|
||||
params.delete(defaultRichTextElementName);
|
||||
}
|
||||
|
||||
return params;
|
||||
}
|
||||
|
||||
@@ -286,7 +294,10 @@ module.exports = {
|
||||
return;
|
||||
}
|
||||
|
||||
const params = getIcuMessageParams(messages[key].messageformat);
|
||||
const params = getIcuMessageParams(
|
||||
messages[key].messageformat,
|
||||
DEFAULT_RICH_TEXT_ELEMENT_NAMES
|
||||
);
|
||||
const components = getIntlElementComponents(node);
|
||||
|
||||
if (params.size === 0) {
|
||||
@@ -389,7 +400,10 @@ module.exports = {
|
||||
return;
|
||||
}
|
||||
|
||||
const params = getIcuMessageParams(messages[key].messageformat);
|
||||
const params = getIcuMessageParams(
|
||||
messages[key].messageformat,
|
||||
DEFAULT_RICH_TEXT_ELEMENT_NAMES
|
||||
);
|
||||
const values = getI18nCallValues(node);
|
||||
|
||||
if (params.size === 0) {
|
||||
|
||||
@@ -23,6 +23,9 @@ const __mockMessages__ = {
|
||||
'icu:nested': {
|
||||
messageformat: '{one, select, other {{two, plural, other {{three}}}}}}',
|
||||
},
|
||||
'icu:emojify': {
|
||||
messageformat: '<emojify>👩</emojify>',
|
||||
},
|
||||
};
|
||||
|
||||
// Need to load so mocha doesn't complain about polluting the global namespace
|
||||
@@ -65,6 +68,14 @@ ruleTester.run('valid-i18n-keys', rule, {
|
||||
code: `i18n("icu:nested", { one: "1", two: "2", three: "3" })`,
|
||||
options: [{ messagesCacheKey, __mockMessages__ }],
|
||||
},
|
||||
{
|
||||
code: `i18n("icu:emojify")`,
|
||||
options: [{ messagesCacheKey, __mockMessages__ }],
|
||||
},
|
||||
{
|
||||
code: `let jsx = <Intl id="icu:emojify"/>`,
|
||||
options: [{ messagesCacheKey, __mockMessages__ }],
|
||||
},
|
||||
],
|
||||
invalid: [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user