Hello,
I would like to disable i18n translation in dialogs. I have the situation where I load the options for a dropdown dynamically, from a servlet. The options are exactly how they should appear in the dropdown. However, CQ seems to do some additional translation for the options. Is there a way to disable this?
Thanks
Solved! Go to Solution.
Views
Replies
Total Likes
For 5.6 - overlay that and replace use of that without that logic that translates it.
Can you post a screenshot too. I have never heard of this happening before.
Views
Replies
Total Likes
Can you explain a little more what CQ is changing because I have worked on a similar scenario but never faced such an issue. A little more detail might help.
Thanks,
Samir
Views
Replies
Total Likes
Let's say I have an option text called "change". In case a label called "change" exists, then the translated value of the label "change" will be used in the dropdown.
Everything is fine as long as labels having the exact same value as the "text" property do not exist.
Views
Replies
Total Likes
See this community article:
https://helpx.adobe.com/experience-manager/using/dialog_fields_servlets.html
The values in the drop down are the same values returned by the servlet. CQ does not attempt to translate these values.
Views
Replies
Total Likes
It would be helpful if you tell which code you are using to populate drop down..
Views
Replies
Total Likes
This is the dialog:
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Dialog"> <items jcr:primaryType="cq:Widget" xtype="tabpanel"> <items jcr:primaryType="cq:WidgetCollection"> <app-properties jcr:primaryType="cq:Panel" title="App Properties"> <items jcr:primaryType="cq:WidgetCollection"> <type jcr:primaryType="cq:Widget" fieldLabel="App Version" name="./version" type="select" defaultValue="" xtype="selection" optionsRoot="." optionsTextField="value" optionsValueField="key" options="$PATH.versions.json"/> </items> </app-properties> </items> </items> </jcr:root>
The results retrieved by $PATH.versions.json are correct. However something happens when they are present in the dialog...
The servlet result is:
[{"key":"","value":"(Empty)"},{"key":"v_1","value":"v_1"}]
However, because there is a label for v_1 with the value test for English, then instead of showing a dropdown with options: (Empty) and v_1, a dropdown with options (Empty) and test will be displayed.
Views
Replies
Total Likes
See the community article and the dialog in it - notice the values returned by the servlet - you will never get translated values using that code.
Views
Replies
Total Likes
Thanks for the answer. However, I don't think it's related to the server side code. As I said, the returned results are correct. The problem is somewhere on the front end side.
Views
Replies
Total Likes
I have never seen this before - this is not a configurable setting that can be set. Can you post a screen shot of what you are seeing.
Views
Replies
Total Likes
Hmm, I think I'll test this on a fresh project. It might be some custom implementation on our project that I am not aware of. I noticed that in the widgets documentation
https://docs.adobe.com/docs/en/cq/5-6-1/widgets-api/index.html?class=CQ.shared.HTTP it is mentioned that the values will be passed to CQ.Util.formatData (which uses translation) in case optionsRoot does not exist. However, I do have an optionsRoot property. I did some debugging on the widgets.js file and it doesn't call that function, just as it is documented.
I'll do some testing and let you know. Thanks for the quick replies.
Views
Replies
Total Likes
Let us know the results of your testing.
Views
Replies
Total Likes
After more debugging, it looks like the translation happens in the setOptions function of Selection.js, line 419:
for (var i = 0; i < options.length; i++) { var o = options[i]; storeConfig.data.push([o.value, o.text, CQ.I18n.getVarMessage(o[CQ.shared.XSS.getXSSPropertyName("text")]), o.qtip]); }
I am using CQ 5.6.
Views
Replies
Total Likes
For 5.6 - overlay that and replace use of that without that logic that translates it.
Can you post a screenshot too. I have never heard of this happening before.
Views
Replies
Total Likes
Sure,
So here is the dialog:
<?xml version="1.0" encoding="UTF-8"?> <jcr:root xmlns:cq="http://www.day.com/jcr/cq/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" jcr:primaryType="cq:Dialog"> <items jcr:primaryType="cq:Widget" xtype="tabpanel"> <items jcr:primaryType="cq:WidgetCollection"> <app-properties jcr:primaryType="cq:Panel" title="App Properties"> <items jcr:primaryType="cq:WidgetCollection"> <type jcr:primaryType="cq:Widget" fieldLabel="App Version" name="./version" type="select" defaultValue="" xtype="selection" optionsRoot="." optionsTextField="value" optionsValueField="key" options="$PATH.versions.json"/> </items> </app-properties> </items> </items> </jcr:root>
I've hardcoded the options values in the versions.jsp file to simplify testing. Bellow are the results of $PATH.versions.jsp:
Bellow is the setup of the i18n label:
Bellow is the code snippet that does the translation:
for (var i = 0; i < options.length; i++) { var o = options[i]; storeConfig.data.push([o.value, o.text, CQ.I18n.getVarMessage(o[CQ.shared.XSS.getXSSPropertyName("text")]), o.qtip]); }
And here is the result:
Yeah, I was thinking of doing the same as you suggested i.e. overlay the Selection.js file.
Views
Replies
Total Likes