AEM 6 sightly:如何从语言文件中读取变量?

时间:2015-01-19 10:21:09

标签: aem sightly

我有以下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读取消息我尝试了以下内容:

&LT; div>${'${fooValue}' @ i18n} </div>

但这会在页面中显示${fooValue}。如果我有i18n,如何阅读variable key的邮件?

2 个答案:

答案 0 :(得分: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>

输出与上述相同。

答案 1 :(得分:2)

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

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

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