Your achievements

Level 1

0% to

Level 2

Tip /
Sign in

Sign in to Community

to gain points, level up, and earn exciting badges like the new
BedrockMission!

Learn more

View all

Sign in to view all badges

SOLVED

Dynamic locale in HTL date object

Richard_Bystrom
Level 2
Level 2

I am currently working on a list component in AEM 6.4.8 which shows the last edited date for the pages listed. For this I'm using the built in HTL properties like so:

${'dd MMMM yyyy' @ format=item.lastModified}

 

Now I am trying to update this so it can be used in various languages rather than just in English. The same property above can also have a locale, and that is working fine. However, that is fairly meaningless since that would still be hardcoded to a single locale. So I've been trying to fetch the language value of the current page from the backend. So when I hardcode this value in the HTL like this:

${'dd MMMM yyyy' @ format=item.lastModified,locale='sv'}

 

It works just fine - component is rendered properly and month names are printed in Swedish. However, when I try to get value from the backend and the backend returns the value 'sv' I get an error, and I'm not sure if this is a bug or something that I am missing. This is the HTL:

${'dd MMMM yyyy' @ format=item.lastModified,locale=item.language}

And the error I get when trying to use this is:

org.apache.sling.api.SlingException: Cannot get DefaultSlingScript: Invalid locale format: 'sv'
	at org.apache.sling.scripting.core.impl.DefaultSlingScript.service(DefaultSlingScript.java:510) [org.apache.sling.scripting.core:2.0.54]
	at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:552) [org.apache.sling.engine:2.7.2]
	at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilterChain.java:44) [org.apache.sling.engine:2.7.2]
	at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilterChain.java:82) [org.apache.sling.engine:2.7.2]
	at com.day.cq.wcm.core.impl.WCMDeveloperModeFilter.doFilterWithErrorHandling(WCMDeveloperModeFilter.java:164) [com.day.cq.wcm.cq-wcm-core:5.11.312]
	at com.day.cq.wcm.core.impl.WCMDeveloperModeFilter.doFilter(WCMDeveloperModeFilter.java:135) [com.day.cq.wcm.cq-wcm-core:5.11.312]

 

So it is complaining about an invalid locale format - despite the value being exactly the same in the logs as what I hardcoded on the HTL frontend. So, is this a bug? Or is it simply not possible to fetch values from the backend for the HTL date? Or am I doing something else wrong? 

1 Accepted Solution
Manjunath_K
Correct answer by
Community Advisor
Community Advisor

Hi @Richard_Bystrom 

Send language code from backend without single quote, it will resolve the issue.

 

return "sv";

View solution in original post

6 Replies
Vijayalakshmi_S
Community Advisor
Community Advisor

Hi @Richard_Bystrom,

Can you let know the data type of "language" (item.language used in your HTL) in backend. Is it a Locale object or String?

Richard_Bystrom
Level 2
Level 2

Hello! Currently I am returning it as a simple string from the backend, like this:

return "'sv'";

 I also tried escaping the quotes, to no success.

Vijayalakshmi_S
Community Advisor
Community Advisor
Try storing the locale value in a variable and return the variable
Richard_Bystrom
Level 2
Level 2
Tried storing the value as a String and return that variable to the frontend. Same result - "invalid locale format"
Manjunath_K
Correct answer by
Community Advisor
Community Advisor

Hi @Richard_Bystrom 

Send language code from backend without single quote, it will resolve the issue.

 

return "sv";

View solution in original post

Richard_Bystrom
Level 2
Level 2
I was entirely sure I had already tried this - but apparently not! Works great now, thanks for the help!