google / google/closure-templates
Translation of non-HTML content
- 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
Assessment
This issue has not been assessed yet.