You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@click.apache.org by Bob Schellink <sa...@gmail.com> on 2010/01/01 04:08:40 UTC
Re: I18N in forms
Hi WarnerJan,
I agree, creating a composite control and "pushing" the localized messages to child controls, its
best to move the getMessage method outside the constructor to one of the event handlers (onInit,
onRender) or even the #render method.
Also note that fields have the convention where it automatically picks up a localized message based
on its name and '.label' postfix so it might not be necessary to push the messages:
username.label=First Name
Keep in mind that stateful pages could create problems with adding controls in the onInit event
because onInit is invoked each request. So either create the controls in the constructor and set the
label during onInit, or do a check in onInit if the control is already present:
public class LoginForm extends Form {
private TextField username;
public LoginForm() {
add(username = new TextField("username", true));
}
public onInit() {
username.setLabel(getMessage("label_username"));
}
}
kind regards
bob
PS: At some stage we need to add a "How to write controls" section to the docs to address these ins
and outs.
WarnerJan Veldhuis wrote:
> It might be worth mentioning in the docs that when subclassing forms and
> using i18n, you should place control creation in onInit(), instead of
> the constructor.
>
> This example will not use i18n, since getMessage() does not have a
> parent context:
>
> public class LoginForm extends Form {
> public *LoginForm()* {
> TextField username = new TextField("username",
> getMessage("label_username"), true);
> add(username);
> }
> }
>
> This example works with i18n, at least, using onInit() is how I solved
> this issue:
>
> public class LoginForm extends Form {
> public LoginForm() {
> }
>
> public *onInit()* {
> TextField username = new TextField("username",
> getMessage("label_username"), true);
> add(username);
> }
> }
>
> Is this assumption correct?
>
> Cheers,
>
> WarnerJan
Happy new year!
Posted by Bob Schellink <sa...@gmail.com>.
WarnerJan Veldhuis wrote:
> Let me be the first to say: Happy new year!!!
Indeed, a happy and prosperous new year to everyone!
kind regards
bob
Re: I18N in forms
Posted by WarnerJan Veldhuis <wa...@qprcostcontrol.com>.
Let me be the first to say: Happy new year!!!
I'll try the auto-pickup of the labels when I get back in to the office
on Monday. I haven't used stateful pages before, so I'll check that out
as well.
Cheers!
WarnerJan
On 01-Jan-10 04:08, Bob Schellink wrote:
> Hi WarnerJan,
>
> I agree, creating a composite control and "pushing" the localized
> messages to child controls, its best to move the getMessage method
> outside the constructor to one of the event handlers (onInit,
> onRender) or even the #render method.
>
> Also note that fields have the convention where it automatically picks
> up a localized message based on its name and '.label' postfix so it
> might not be necessary to push the messages:
>
> username.label=First Name
>
>
> Keep in mind that stateful pages could create problems with adding
> controls in the onInit event because onInit is invoked each request.
> So either create the controls in the constructor and set the label
> during onInit, or do a check in onInit if the control is already present:
>
> public class LoginForm extends Form {
> private TextField username;
>
> public LoginForm() {
> add(username = new TextField("username", true));
> }
>
> public onInit() {
> username.setLabel(getMessage("label_username"));
> }
> }
>
> kind regards
>
> bob
>
> PS: At some stage we need to add a "How to write controls" section to
> the docs to address these ins and outs.
>
>
> WarnerJan Veldhuis wrote:
>> It might be worth mentioning in the docs that when subclassing forms
>> and using i18n, you should place control creation in onInit(),
>> instead of the constructor.
>>
>> This example will not use i18n, since getMessage() does not have a
>> parent context:
>>
>> public class LoginForm extends Form {
>> public *LoginForm()* {
>> TextField username = new TextField("username",
>> getMessage("label_username"), true);
>> add(username);
>> }
>> }
>>
>> This example works with i18n, at least, using onInit() is how I
>> solved this issue:
>>
>> public class LoginForm extends Form {
>> public LoginForm() {
>> }
>>
>> public *onInit()* {
>> TextField username = new TextField("username",
>> getMessage("label_username"), true);
>> add(username);
>> }
>> }
>>
>> Is this assumption correct?
>>
>> Cheers,
>>
>> WarnerJan