templates: Support context variables in Handlebars {{t}} helper.

Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
Anders Kaseorg
2023-03-15 16:47:01 -07:00
committed by Tim Abbott
parent 042bbf2936
commit ba5a2c8866
2 changed files with 15 additions and 7 deletions

View File

@@ -258,6 +258,8 @@ Handlebars [helpers][] that Zulip registers. The syntax for simple strings is:
```html+handlebars ```html+handlebars
{{t 'English text' }} {{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: 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:
<!-- The html+handlebars lexer fails to lex the single braces. --> <!-- The html+handlebars lexer fails to lex the single braces. -->
```text ```text
{{#tr}} {{#tr}}
Block of English text. <p>Block of English text.</p>
{{/tr}} {{/tr}}
{{#tr}} {{#tr}}
Block of English text with a {variable}. <p>Block of English text with a {variable}.</p>
{{/tr}} {{/tr}}
``` ```

View File

@@ -51,13 +51,19 @@ Handlebars.registerHelper({
}, },
}); });
Handlebars.registerHelper("t", (message) => { Handlebars.registerHelper("t", function (message) {
// Marks a string for translation. // Marks a string for translation.
// Example usage: // Example usage 1:
// {{t "some English text"}} // {{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}; const descriptor = {id: message, defaultMessage: message};
return intl.formatMessage(descriptor); return intl.formatMessage(descriptor, this);
}); });
Handlebars.registerHelper("tr", function (options) { Handlebars.registerHelper("tr", function (options) {
@@ -90,7 +96,7 @@ Handlebars.registerHelper("tr", function (options) {
]), ]),
), ),
...Object.fromEntries( ...Object.fromEntries(
Object.entries(this ?? {}).map(([key, value]) => [ Object.entries(this).map(([key, value]) => [
key, key,
Handlebars.Utils.escapeExpression(value), Handlebars.Utils.escapeExpression(value),
]), ]),