Jeff,

You are right. This code did not work although there was no compilation
error.
I have 2 other solutions ( and this time, I have successfully tested the
first one :) )

1. with a class that switch I18n

public class I18nSwitcher {
    public static I18n getI18n()
    {
        final String profil = getProfil();
        if ("profil1".equals(profil)) {
            return GWT.create(I18nProfil1.class);
        } else if ("profil2".equals(profil)) {
            return GWT.create(I18nProfil2.class);
        } else {
            // default
            return GWT.create(I18n.class);
        }
    }
    private static native String getProfil()
    /*-{
        return $wnd.profil;
     }-*/;
}
public interface I18n extends com.google.gwt.i18n.client.Messages{
  // all your i18n keys
}
public interface I18nProfil1 extends I18n {
  // nothing
}

in .ui.xml :
    <ui:with field='i18n' type='com.xxx.gwt.i18n.client.I18n' />
in .java
    @UiField(provided = true)
    com.xxx.gwt.i18n.client.I18n i18n = I18nSwitcher.getI18n();

This method has a drawback ; if 10 profils are defined, 10 values of i18n
will be load on browser although only 1 is used. That's why the second
solution is better IMHO.


2. using a generator
Replacing
    <replace-with class="com.xxx.gwt.i18n.client.I18n">
        <when-type-is class="com.xxx.gwt.i18n.client.profil1.I18n" />
        <when-property-is name="profil" value="profil1" />
    </replace-with>
with:
    <generate-with class="com.xxx.gwt.i18n.rebind.I18nProfil1Generator">
        <all>
            <when-type-is class="com.xxx.gwt.i18n.client.I18n" />
            <when-property-is name="profil" value="profil1" />
        </all>
    </generate-with>

I will try the second solution in the next days.


Thanks for the bug you found for me,
Alexandre


2011/4/15 Jeff Burnham <jeffrey.burn...@gmail.com>

> Alexandre,
>
> I had tried this but ran into the issue that the "<replace-with
> class="xxx">" declaration required a class rather than an interface which is
> what is used by i18n when utilizing property files. I've seen other
> approaches where people have used this approach along with a factory but
> that doesn't appear to work with ui binders where the constants interface is
> utilized within the ui.xml file.
>
> Did your project use the approach of the constants being referenced
> directly in the ui.xml file?
>
> Thanks,
> Jeff
>
> On Fri, Apr 15, 2011 at 12:03 AM, Alexandre Ardhuin <
> alexandre.ardh...@gmail.com> wrote:
>
>> I have something similar in my project. I resolved the problem with
>> Deferred Binding.
>>
>> In HTML page, I can set a js variable :
>>     var profil = "profil1";
>>
>> This js variable will be re-use in Module.gwt.xml to replace default i18n
>> by a specific one:
>>     <!-- 'profil' property -->
>>     <define-property name="profil" values="profil1,profil2,profil3" />
>>     <property-provider name="profil"><![CDATA[
>>         return profil || "profil1";
>>     ]]></property-provider>
>>     <replace-with class="com.xxx.gwt.i18n.client.I18n">
>>         <when-type-is class="com.xxx.gwt.i18n.client.profil1.I18n" />
>>         <when-property-is name="profil" value="profil1" />
>>     </replace-with>
>>
>> Thus, com.xxx.gwt.i18n.client.I18n and
>> com.xxx.gwt.i18n.client.profil1.I18n can reference differents properties
>> files.
>>
>>
>> Hope this helps,
>> Alexandre
>>
>>
>> 2011/4/14 Jeff <jeffrey.burn...@gmail.com>
>>
>>> Does anyone have any experience with how to handle the following
>>> problem?
>>>
>>> My application has multiple user roles, all of which see the same
>>> screen with the same fields but depending on what role the user comes
>>> in with, the labels on the fields may differ. I'd like to use an
>>> approach similar to i18n (constants class backed by various property
>>> files) where in my use case the role is synonomous with a locale. Note
>>> that all labels are assigned in UiBinder ui.xml files so the goal is
>>> something like:
>>>
>>> <ui:with field="const" type="com.sample.client.LabelConstants" />
>>>
>>> Where the above declaration should use
>>> "LabelConstants_registered.properties" or
>>> "LabelConstants_anonymous.properties" similarly to how i18n would use
>>> "LabelConstants_en.properties" or "LabelConstants_fr.properties"
>>> depending on the locale.
>>>
>>> Any ideas or experiences?
>>>
>>> Thanks in advance.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Google Web Toolkit" group.
>>> To post to this group, send email to google-web-toolkit@googlegroups.com
>>> .
>>> To unsubscribe from this group, send email to
>>> google-web-toolkit+unsubscr...@googlegroups.com.
>>> For more options, visit this group at
>>> http://groups.google.com/group/google-web-toolkit?hl=en.
>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Google Web Toolkit" group.
>> To post to this group, send email to google-web-toolkit@googlegroups.com.
>> To unsubscribe from this group, send email to
>> google-web-toolkit+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/google-web-toolkit?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To post to this group, send email to google-web-toolkit@googlegroups.com.
> To unsubscribe from this group, send email to
> google-web-toolkit+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to 
google-web-toolkit+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to