Leszek Gawron wrote:
Thomas Lutz wrote:
Leszek Gawron wrote:
Thomas Lutz wrote:
private Locale locale = Locale.getDefault();
It takes the default locale from the host, but shouldn't it take
the locale set via the browser or the LocaleAction.java ? So the
line should rather be something like:
private Locale locale = I18nUtils.findLocale(....); ?
in your own cocoon webapp you can do:
var form = new Form( "cocoon:/form-def/" + config.filterModelName );
form.locale = determineLocale();
and implement determineLocale() with any logic you like.
For cocoon samples: we should probably make use of LocaleAction.
I tried to do this in javaflow (as I only use java as flow script
language), that's not that easy.
org.apache.cocoon.forms.formmodel.Form.java has no setter for it's
member locale, and locale is private... so no chance of tweaking in ?
I do not know how you do it in javaflow but here is how
HandleFormSubmitAction does it:
Form form = formManager.createForm(source);
Request request = ObjectModelHelper.getRequest(objectModel);
FormHandler formHandler = null;
if (formHandlerClassName != null) {
// TODO cache these classes
Class clazz = Class.forName(formHandlerClassName);
formHandler = (FormHandler)clazz.newInstance();
LifecycleHelper.setupComponent(formHandler, null, null, manager,
null);
form.setFormHandler(formHandler);
}
FormContext formContext = new FormContext(request, locale);
boolean finished = form.process(formContext);
request.setAttribute(formAttribute, form);
you can pass locale via FormContext instance.
Ok, I figured out how it could be done in javaflow, but this would
require a patch on org.apache.cocoon.forms.flow.java.FormInstance.java
This class is the form interface for javaflow, as far as I understood
from the samples. In its form.show function the FormContext is used as
in your example. It uses the private member locale, that is never set
by a constructor or a setter, so if I added them, I could set the forms
locale from javaflow, too.
If a patch for this is welcome, I'll do my very best :-) and add it to
bugzilla.
What's the reason for Locale.getDefault() ? At least I would expect
to behave forms like all other I18N components, and take the locale
from the user agent, so dates and whatsoever get a proper formatting
in the forms... or am I missing something ?
I think this is a good choice that core cforms classes do not depend
on environment. Every user is free to choose the method to determine
locale. You could implement a scenario where locale is fetched from
user personal settings stored in database.
Well, I agree that every user or better developer should be free to
choose his method of locale determination. But, on the other hand it
seems very confusing to me, that cforms uses the hosts default locale,
where all (ehm, all that I know :-)) other I18N components use the one
specified by I18nUtils.java.
This should be consistent, shouldn't it ?
So, imho cforms should use the locale "from LocaleAction", too, if
someone wants another method of of locale determination, he still could
implement it. It's just a matter of default unification| I think.