Bruno,

The expressions inside UI labels issue has been fixed in rev 674387.

-Adrian

Bruno Busco wrote:
Sure,
thanks!

-Bruno

2008/7/4 Adrian Crum <[EMAIL PROTECTED]>:

The same thing can be accomplished without the ?interpret add-on.

Wait a little while longer on this - I am looking through the FreeMarker
code trying to find a better way.

-Adrian


--- On Fri, 7/4/08, Bruno Busco <[EMAIL PROTECTED]> wrote:

From: Bruno Busco <[EMAIL PROTECTED]>
Subject: Re: How to include parameters into UiLabels strings?
To: dev@ofbiz.apache.org
Date: Friday, July 4, 2008, 1:34 PM
Googling around I found this:
http://lists.ofbiz.org/pipermail/dev/2003-November/003762.html

so in the .FTL I have used the following:
<div><#assign

ProductOnlyShowingFirstN=uiLabelMap.ProductOnlyShowingFirstN?interpret><@ProductOnlyShowingFirstN/>.</div>
and so doing it is not necessary to change the screens XML
files to insert
the <set> tag.
If there are no objections it could still be "the way
to go"

Thank you,
-Bruno


2008/7/4 Adrian Crum <[EMAIL PROTECTED]>:

Doing so would require a change to the Freemarker
code. It would be worth
looking into.

-Adrian


BJ Freeman wrote:

wouldn't be easier to change the rendering
code
instead of doing this for every line that has
split labels with variables.
just seems more of a quick fix but not a
solution\

Adrian Crum sent the following on 7/3/2008 12:42
PM:
Keep it simple:

<set
field="ProductOnlyShowingFirstN"
value="${uiLabelMap.ProductOnlyShowingFirstN}"/>
and

${ProductOnlyShowingFirstN}

-Adrian

Bruno Busco wrote:

Adrian,
yes I did read your solution and now I
have also tested and solved the
problem.
Thank you.

BTW, since this is something that will
happen more than once (above
all if
we replace some splitted english-ordered
sentences with a whole label)
I ask
for a best practice to do it.
I propose the one that I have implemented
right now as following:
In order to display the following UILabel:
<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 have used the following line in the
actions tag:
<set
field="uiLabelMap_ProductOnlyShowingFirstN"
value="${uiLabelMap.ProductOnlyShowingFirstN}"/>
and the following line in the .FTL file
${uiLabelMap_ProductOnlyShowingFirstN}


So the guideline could be that the field
used has the same name has the
UiLabel except the "." replaced
by the "_"
Does this make sense?

Thank you,
Bruno

P.S.
To implement this it has been necessary to
change the screen xml file
and
the ftl file.
I also tried to use the #assign tag in
order to have this local to the
.FTL
file with the following lines:

                   <#assign
uiLabelMap_ProductOnlyShowingFirstN =
uiLabelMap.ProductOnlyShowingFirstN>

<div>${uiLabelMap_ProductOnlyShowingFirstN}.</div>
but this does not work :-(
There are no way to make this work?

2008/7/3 BJ Freeman
<[EMAIL PROTECTED]>:
 Ok sorry now it makes sense.
my languages are limited but like in
spanish the sentence structure is
different than english so the
placement of the variables would be
different.

so the approach have the $() in the
uilabels files is what you are
suggesting.

Bruno Busco sent the following on
7/3/2008 1:15 AM:
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








Reply via email to