You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by 3844370 <38...@163.com> on 2009/08/11 20:04:54 UTC
bug On struts1: MessageResources.getMessage locale , whether has
the problem?
On struts1: MessageResources.getMessage(Locale locale, String key, Object[] args) , don't use client's locale to format !
for example: my webApp has a myResources_en_US.properties : test =your money is {0, number, currency}
client's locale is en_US, server's locale is zh_CN
my action :
MessageResources resource = getResources(request, "myResources");
//client's locale
Locale userLocale = getLocale(request);
//use client's locale to format value , problem is here!
String message = resource.getMessage(userLocale, "test", new Object[]{ new Long(10000)})
the result is : your money is ¥10,000.00 ,
problem is: I use english locale to format “ your money is {0, number, currency}” ,but now why is ¥??
so, I read src about getMessage(Locale locale, String key, Object[] args),
format = new MessageFormat(escape(formatString));
format.setLocale(locale);
format.format(args)
for MessageFormat setLocale() , Subformats that have already been created are not affected,
so, struts1 getMessage(Locale locale, String key, Object[] args), original idea is use client's locale to format,
but now use server's locale, this is the problem!
following is my test procedures:
Locale localeEN = new Locale("en", "US");
// simulate struts1 MessageResources.getMessage(Locale locale, String key, Object[] args)
MessageFormat format1 = new MessageFormat(" your money is {0, number, currency}");
//now set EN locale already later to format "your money is {0, number, currency}"
format1.setLocale(localeEN);
System.out.println(format1.format(new Object[]{ new Long(10000)})); // your money is ¥10,000.00
//correct method 1
MessageFormat format2 = new MessageFormat(" your money is {0, number, currency}", localeEN);
System.out.println(format2.format(new Object[]{ new Long(10000)})); // your money is $10,000.00
//correct method 2
MessageFormat format3 = new MessageFormat("");
format3.setLocale(localeEN);
format3.applyPattern(" your money is {0, number, currency}");
System.out.println(format3.format(new Object[]{ new Long(10000)})); // your money is $10,000.00
please write back! Thank you!
yours, wangyanning from JiNan ShanDong Province in CHINA
Re: bug On struts1: MessageResources.getMessage locale , whether has
the problem?
Posted by Paul Benedict <pb...@apache.org>.
Are you trying to tell us a problem or a recommendation?
2009/8/11 3844370 <38...@163.com>:
>
> On struts1: MessageResources.getMessage(Locale locale, String key, Object[] args) , don't use client's locale to format !
> for example: my webApp has a myResources_en_US.properties : test =your money is {0, number, currency}
> client's locale is en_US, server's locale is zh_CN
> my action :
> MessageResources resource = getResources(request, "myResources");
> //client's locale
> Locale userLocale = getLocale(request);
> //use client's locale to format value , problem is here!
> String message = resource.getMessage(userLocale, "test", new Object[]{ new Long(10000)})
>
> the result is : your money is ¥10,000.00 ,
> problem is: I use english locale to format “ your money is {0, number, currency}” ,but now why is ¥??
>
> so, I read src about getMessage(Locale locale, String key, Object[] args),
> format = new MessageFormat(escape(formatString));
> format.setLocale(locale);
> format.format(args)
>
> for MessageFormat setLocale() , Subformats that have already been created are not affected,
> so, struts1 getMessage(Locale locale, String key, Object[] args), original idea is use client's locale to format,
> but now use server's locale, this is the problem!
>
> following is my test procedures:
> Locale localeEN = new Locale("en", "US");
>
> // simulate struts1 MessageResources.getMessage(Locale locale, String key, Object[] args)
> MessageFormat format1 = new MessageFormat(" your money is {0, number, currency}");
> //now set EN locale already later to format "your money is {0, number, currency}"
> format1.setLocale(localeEN);
> System.out.println(format1.format(new Object[]{ new Long(10000)})); // your money is ¥10,000.00
>
> //correct method 1
> MessageFormat format2 = new MessageFormat(" your money is {0, number, currency}", localeEN);
> System.out.println(format2.format(new Object[]{ new Long(10000)})); // your money is $10,000.00
>
> //correct method 2
> MessageFormat format3 = new MessageFormat("");
> format3.setLocale(localeEN);
> format3.applyPattern(" your money is {0, number, currency}");
> System.out.println(format3.format(new Object[]{ new Long(10000)})); // your money is $10,000.00
>
> please write back! Thank you!
> yours, wangyanning from JiNan ShanDong Province in CHINA
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org