diff --git a/docs/translating/internationalization.md b/docs/translating/internationalization.md index 5bcfd54a6a..2e4b40121a 100644 --- a/docs/translating/internationalization.md +++ b/docs/translating/internationalization.md @@ -258,6 +258,8 @@ Handlebars [helpers][] that Zulip registers. The syntax for simple strings is: ```html+handlebars {{t 'English text' }} + +{{t 'Block of English text with a {variable}.' }} ``` If you are passing a translated string to a Handlebars partial, you can use: @@ -268,17 +270,17 @@ If you are passing a translated string to a Handlebars partial, you can use: }} ``` -The syntax for block strings or strings containing variables is: +The syntax for HTML strings is: ```text {{#tr}} - Block of English text. +
Block of English text.
{{/tr}} {{#tr}} - Block of English text with a {variable}. +Block of English text with a {variable}.
{{/tr}} ``` diff --git a/web/src/templates.js b/web/src/templates.js index 11fd72100c..4cb4ece6a6 100644 --- a/web/src/templates.js +++ b/web/src/templates.js @@ -51,13 +51,19 @@ Handlebars.registerHelper({ }, }); -Handlebars.registerHelper("t", (message) => { +Handlebars.registerHelper("t", function (message) { // Marks a string for translation. - // Example usage: + // Example usage 1: // {{t "some English text"}} + // + // Example usage 2: + // {{t "This {variable} will get value from the current context"}} + // + // Note: use `{` and `}` instead of `{{` and `}}` to declare + // variables. const descriptor = {id: message, defaultMessage: message}; - return intl.formatMessage(descriptor); + return intl.formatMessage(descriptor, this); }); Handlebars.registerHelper("tr", function (options) { @@ -90,7 +96,7 @@ Handlebars.registerHelper("tr", function (options) { ]), ), ...Object.fromEntries( - Object.entries(this ?? {}).map(([key, value]) => [ + Object.entries(this).map(([key, value]) => [ key, Handlebars.Utils.escapeExpression(value), ]),