2015-01-19 3 views
4

У меня есть следующий HTML:AEM 6 sightly: Как читать переменную из языкового файла?

<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?

ответ

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> 

Выход будет таким же, как указано выше.

2

Решение Radu прекрасно работает. Я также пробовал это, и это тоже работает, если кто-то ищет решение без привлечения шаблонов.

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

Я лично пошел бы с шаблонами. Делает это немного легче читать. <div>${fooValue @ i18n}</div> vs <div data-sly-call="${translate @ string=fooValue}"></div>.