4

我有以下html:

<div >${'foo' @ i18n}</div>

在我的 i18n 文件中,我有以下内容:

<foo
            jcr:mixinTypes="[sling:Message]"
            jcr:primaryType="sling:MessageEntry"
            sling:key="foo"
            sling:message="This is dummy text"/>

This is dummy text显示在页面中。到目前为止。问题是这foo是一个来自其他模板的变量,我读如下:

${fooValue} //this returns foo

现在要阅读来自 i18n 的消息,我尝试了以下操作:

<div>${'${fooValue}' @ i18n} </div>

但这会显示${fooValue}在页面中。i18n如果我有,如何阅读来自 的消息variable key

4

2 回答 2

5

您可以使用本地模板,将标识 i18n 字典的键的变量传递给该模板:

<template data-sly-template.locale="${@ key}">
    ${key @ i18n, locale='de'}    
</template>

<div data-sly-call="${locale @ key='world'}"></div>

假设您的 i18n 字典有翻译,输出将是:

<div>
    Welt    
</div>

您还可以locale从页面中的另一个模板调用模板:

<template data-sly-template.locale="${@ key}">
    ${key @ i18n, locale='de'}    
</template>

<template data-sly-template.translate="${@ string}">
    <div data-sly-call="${locale @ key=string}" data-sly-unwrap></div>
</template>

<div data-sly-call="${translate @ string='world'}"></div>

输出将与上面相同。

于 2015-01-19T19:36:46.597 回答
2

Radu 的解决方案非常有效。如果有人正在寻找不涉及模板的解决方案,我也尝试过这个并且这也有效。

<div>${fooValue @ i18n}</div>

不过,我个人会使用模板。使它更容易阅读。 <div>${fooValue @ i18n}</div><div data-sly-call="${translate @ string=fooValue}"></div>

于 2015-02-17T21:52:55.523 回答