No, that is not the only solution. Did you read my previous reply?
-Adrian
Bruno Busco wrote:
So the only solution is to split the strings and have the ${} into the ftl ?
It is not the case to think to implement an iterative strings rendering
until no more ${} are found?
(this is why I used dev ml)
This would also solve the issue that splitting the sentence in several
labels it is necessary to stick to english words order that generally is
different from other languages.
Thank you
-Bruno
2008/7/3 BJ Freeman <[EMAIL PROTECTED]>:
probably should be in user ml
use
uiLabelMap.yourstringid
then move the text to
config/name of fileUiLabels.xml
take a look at CatalogCommonScreens.xml for where you may find the
UiLabels.xml files like
<property-map resource="ProductUiLabels"
map-name="uiLabelMap" global="true"/>
<property-map resource="CommonUiLabels"
map-name="uiLabelMap" global="true"/>
note you will have to break it up so the $() stay in the ftl, i believe.
Bruno Busco sent the following on 7/2/2008 11:15 PM:
Thank you very much for your suggestions, I have been able to answer you
only now...
The issue, i think, is not related to the availability of the information
in
the context, the two variables are already defined in the context. The
problem I have is that the UI label rendering should do a "double
rendering"
and it seems not to do so.
I try to better explain (sorry for the message length).
I am working on the file
\applications\product\webapp\catalog\find\miniproductlist.ftl. At lines
46-50 of this file there is the following:
<#if (listSize > viewSize)>
<div>
<div>NOTE: Only showing the first ${viewSize} of
${listSize} products. To view the rest, use the Products tab for this
category.</div>
</div>
</#if>
The viewSize and listSize variables are correctly rendered since they are
correctly defined in the context by the miniproductlist.groovy script.
The problem is that this string is english only and I would like to
transform in a standard UiLabel, so I added the following in the
ProductUiLabels.xml file:
<property key="ProductOnlyShowingFirstN">
<value xml:lang="en">NOTE: Only showing the first ${viewSize} of
${listSize} products. To view the rest, use the Products tab for this
category.</value>
<value xml:lang="it">NOTA: Sono elencati solo ${viewSize} di
${listSize} prodotti. Per visualizzare gli altri, usa il pannello
Prodotti
di questa categoria.</value>
</property>
and replaced the above lines in the miniproductlist.ftl file with the
following:
<#if (listSize > viewSize)>
<div>
<div>${uiLabelMap.ProductOnlyShowingFirstN}</div>
</div>
</#if>
well, in this case what I get on the screen is the following:
NOTE: Only showing the first ${viewSize} of ${listSize} products. To view
the rest, use the Products tab for this category.
where you can see that the variables are not rendered even if they are
defined in the context.
In my opinion a cyclic rendering should be done on the string until no
more
${} are found because all have been rendered.
I think that this is the reason why in many cases labels are divided into
several labels (sometimes of one word only) that are then included in ftl
files to form the whole sentence. Doing this can be a workaround for the
variables rendering (because the variables are not included in the
UiLabels
string but in the ftl directly) but we already discussed in the ML that
this
should be avoided because it imposes the english words order that is
often
different for other languages.
Many thanks,
-Bruno
2008/6/30 Ashish Vijaywargiya <[EMAIL PROTECTED]>:
Hello Bruno,
Unfortunately I see that the parameters ${viewSize} and ${listSize} are
not
rendered as expected but the whole string is displayed as it appears in
the
UiLabel.xml file.
${viewSize} and ${listSize} means that we should put this values in the
screen context first then this will be available in the UiLabel.xml
file.Suppose you are preparing context in the *Screens.xml then you
should
write down something like this :-
<set field="viewSize" value="2"/>
<set field="listSize" value="2"/>
Or if you would like to put this values in the *.bsh file that is
included
in your *Screens.xml file then you should write down the following code.
context.put("viewSize","2");
context.put("listSize","2");
If you are keeping your values in the parameters then you should read
the
values from the parameters map inside your UiLabel.xml file.
In this case you will read by ${parameters.viewSize} &
${parameters.listSize}
For example :-
<set field="parameters.viewSize" value="2"/>
<set field="parameters.listSize" value="2"/>
& while putting the values in *.bsh
parameters.put("viewSize","2");
parameters.put("listSize","2");
You should notice that in the screen definition all the Decorator comes
after setting this context values and decorator includes(set) the values
from Property Files.So all the values kept in the context(either in
parameters or context map) will be available in those *UiLabel.xml
files.
And for the localization thing I agree from the Scott's comment.
So I think I am safe on that point :-)
Please let us know if you still have some more question.
--
Ashish
On Sun, Jun 29, 2008 at 2:25 PM, Scott Gray <[EMAIL PROTECTED]> wrote:
Hi Bruno
I think you're looking for something like this:
UtilProperties.getMessage(resource,
"AccountingAdditionalShippingChargeForShipment",
UtilMisc.toMap("shipmentId", shipmentId), locale);
Regard
2008/6/29 Bruno Busco <[EMAIL PROTECTED]>:
Hi,
I am trying to add the following UiLabel that includes some parameters
<property key="ProductOnlyShowingFirstN">
<value xml:lang="en">NOTE: Only showing the first ${viewSize}
of
${listSize} products. To view the rest, use the Products tab for this
category.</value>
<value xml:lang="it">NOTA: Sono elencati solo ${viewSize} di
${listSize} prodotti. Per visualizzare gli altri, usa il pannello
Prodotti
di questa categoria.</value>
</property>
I would like to use it in miniproductlist.ftl to replace an english
constant
text.
Unfortunately I see that the parameters ${viewSize} and ${listSize}
are
not
rendered as expected but the whole string is displayed as it appears
in
the
UiLabel.xml file.
What is the correct way to display parametrized labels?
Many thanks,
Bruno