google / google/closure-templates

Translation of non-HTML content

Open
#70 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
700
Forks
199
Avg merge
2d 12h
Merged PRs (30d)
26

Description

Sometimes it is necessary to translate non-HTML content (for example text emails). However currently this seems to be difficult because the following problems.

Problem 1: `{msg}` supports only HTML content (i.e. its content type is always assumed to be `text/html`).

The following template:

```
{namespace ns}
/** subject */
{template .subject kind="text"}
{msg desc="subject"}Email Subject <&>{/msg}
{/template}
```

leads to exception:

```
Exception in thread "main" java.lang.IllegalStateException: No match found
at java.util.regex.Matcher.group(Matcher.java:536)
at java.util.regex.Matcher.group(Matcher.java:496)
at com.google.template.soy.soytree.MsgHtmlTagNode$Builder.computeLcTagName(MsgHtmlTagNode.java:305)
at com.google.template.soy.soytree.MsgHtmlTagNode$Builder.build(MsgHtmlTagNode.java:257)
at com.google.template.soy.soyparse.TemplateParser.MsgHtmlTag(TemplateParser.java:2081)
at com.google.template.soy.soyparse.TemplateParser.TemplateBlockForMsg(TemplateParser.java:1952)
at com.google.template.soy.soyparse.TemplateParser.MsgStmt(TemplateParser.java:1890)
at com.google.template.soy.soyparse.TemplateParser.Stmt(TemplateParser.java:1778)
at com.google.template.soy.soyparse.TemplateParser.TemplateBlock(TemplateParser.java:1750)
at com.google.template.soy.soyparse.TemplateParser.CallParam(TemplateParser.java:2502)
at com.google.template.soy.soyparse.TemplateParser.CallStmt(TemplateParser.java:2420)
at com.google.template.soy.soyparse.TemplateParser.Stmt(TemplateParser.java:1796)
at com.google.template.soy.soyparse.TemplateParser.TemplateBlock(TemplateParser.java:1750)
at com.google.template.soy.soyparse.TemplateParser.TemplateContentInput(TemplateParser.java:1521)
at com.google.template.soy.soyparse.TemplateParser.parseTemplateContent(TemplateParser.java:311)
at com.google.template.soy.soyparse.SoyFileParser.Template(SoyFileParser.java:424)
at com.google.template.soy.soyparse.SoyFileParser.SoyFile(SoyFileParser.java:257)
at com.google.template.soy.soyparse.SoyFileParser.parseSoyFile(SoyFileParser.java:165)
at com.google.template.soy.SoyFileSetParser.parseSoyFileHelper(SoyFileSetParser.java:201)
at com.google.template.soy.SoyFileSetParser.parseWithVersions(SoyFileSetParser.java:152)
at com.google.template.soy.SoyFileSetParser.parse(SoyFileSetParser.java:107)
at com.google.template.soy.SoyFileSet.parse(SoyFileSet.java:1207)
at com.google.template.soy.SoyFileSet.parse(SoyFileSet.java:1164)
at com.google.template.soy.SoyFileSet.compileForServerRendering(SoyFileSet.java:920)
at com.google.template.soy.SoyFileSet.compileToTofu(SoyFileSet.java:825)
```

A possible workaround is to use `{literal}`:

```
{namespace ns}
/** subject */
{template .subject kind="text"}
{msg desc="subject"}{literal}Email Subject <&>{/literal}{/msg}
{/template}
```

However it is better to make `{msg}` inherit the `kind` of the template in which it resides.

Problem 2: The extracted XLIFF file uses only `datatype="html"`.

The generated XLIFF file for the template above is:

```




Email Subject <&>
subject


```

It is better to use `datatype` based on the template's `kind` from which the message was extracted. I suppose that fixing problem 1 will lead to fix of problem 2.

Problem 3: When building `SoyMsgBundle` out of XLIFF file the `datatype` attribute is ignored.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.