struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bugzi...@apache.org
Subject DO NOT REPLY [Bug 11852] - The bean:message tag should accept Objects as arguments
Date Sun, 08 Sep 2002 14:32:29 GMT
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11852>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11852

The bean:message tag should accept Objects as arguments





------- Additional Comments From areus@ibit.org  2002-09-08 14:32 -------
Sorry for my previus comment, I don't know what happened, here it goes again:


This is a bit long and I'm not very good explaining things in english, so excuse me.

This is what I tested:
 
ApplicationResources.properties snip
---------------------------------------------- 
date.test= Data actual: {0,date,long} 
---------------------------------------------- 
 
test.jsp snip 
----------------------------------------------- 
<bean:message key="date.test" arg0="<%=new java.util.Date()%>" /> 
----------------------------------------------- 

And I get: 
---------------------------------------------- 
Data actual: 7 / setembre / 2002 
--------------------------------------------- 
(Note that my system locale is "ca", Catalan) 
 
Then I added an ApplicationResources_en.properties with the line: 
---------------------------------------------- 
date.test= Current date: {0,date,long} 
---------------------------------------------- 
 
I configured my browser to send "en" language, and I got: 
---------------------------------------------- 
Current date: 7 / setembre / 2002 
---------------------------------------------- 
 
While I was expecting:  
---------------------------------------------- 
Current date: September 7, 2002 
---------------------------------------------- 

I realized that the java.text.MessageFormat constructed in 
MessageResources.getMessage (line 327) was not using the user locale.  
 
MessageFormat uses DateFormat and NumberFormat when it has to process thing 
like {0,date,long} or {1,number,currency}. Both DateFormat and NumberFormat 
implement a static getInstance(Locale), and a static getInstance() that uses the 
system locale. 
 
For MessageFormat to call getInstance(Locale) when it needs a DateFormat or 
NumberFormat I changed MessageResources: 
 
--------------------------------------------------------------- 
diff -u -u -r1.14 MessageResources.java 
--- MessageResources.java	30 Jun 2002 03:38:30 -0000	1.14 
+++ MessageResources.java	8 Sep 2002 13:46:12 -0000 
@@ -324,7 +324,9 @@ 
 
	    else 
 
		return ("???" + formatKey + "???"); 
 
	} 
-
	format = new MessageFormat(escape(formatString)); 
+
	format = new MessageFormat(""); 
+
	format.setLocale(locale); 
+
	format.applyPattern(escape(formatString)); 
 
	formats.put(formatKey, format); 
 	    } 
-------------------------------------------------------- 
 
(From j2sdk javadoc I noted that after calling setLocale it's necessary to call 
applyPattern so It's no necessary to use the pattern in the constructor) 
 
With that applied ( and the previous patch for MessageTag to use Objects as
args) my test works as expected. 
 
But I came across a weird effect: If I configured my browser to send "es"
(Spanish), as I had no ApplicationResources_es, PropertyMessageResources used
the default ApplicationResources, which is in Catalan (ca), but MessageResources
is not aware that PropertyMessageResources had to fall to the default locale,
and it used the user locale (es) to build the MessageFormat.

So I end up with the message in Catalan (from de default ApplicationResources)
and the Date formatted in Spanish! 
------------------------------------------- 
Data actual: 8 de septiembre de 2002 
------------------------------------------- 
 
What do you think about it? 
 
I'm used to develop webapps that support several locales ("ca", "es", "en", "de"
...), and struts has helped us a lot, so I'm interested in this. 
 
IMHO MessageResources should have an  
abstract Locale[] getAvaliableLocales()  or 
abstract Enumeration getAvaliableLocales() 

that PropertyMessageResources (and hopefully other in the future) would implement.

And processLocale in RequestProcessor should choose the locale from the 
avaliable locales in the application MessageResources, also it should use 
request.getLocales instead of request.getLocale (If my browser uses "ca" and
"es" and the application has "en" -as default- and "es", struts will end up
using "en" while the correct would be "es") 
 
I can code it I you think is worth it

--
To unsubscribe, e-mail:   <mailto:struts-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:struts-dev-help@jakarta.apache.org>


Mime
View raw message