Hu,

One year ago I write a simple support of I18N on server side. The
mechanism was based on Java reflexion. All is in a single class:
http://code.google.com/p/gwt-fusionchart/source/browse/trunk/fusionchart_server/src/com/raisepartner/chartfusion/web/server/gwti18n/GWTI18N.java
The simple call to GWTI18N.create(XXXMessages.class) provides the
expected instance implemented your interface and load properties.

Maybe this could help you.

Regards,
Seb

On 6 oct, 02:18, bufferings <[email protected]> wrote:
> hi
>
> I'm very sorry.
> I made a mistake in my writing.
>
> >  (2) Use KtrI18NCreator.create() in your server side code
>
> Please use
> KtrI18N.createConstants() or KtrI18N.createMessages().
> These are static methods.
>
> --
> bufferings
>
> 2009/10/6 bufferings <[email protected]>:
>
>
>
> >> that's exactly what I need and it runs perfectly !
>
> >> Thanks a lot !
>
> > Glad to hear that.
>
> >> Bufferings, when I look at your site, the procedure to make it work seems 
> >> to
> >> be more complex. Why ?
>
> > From my site's [How Does It Work?]==
> > Kotori I18N uses the super-source trick. It gives the super-source
> > code to the client, and gives the real code to the server. In fact, It
> > uses the GWT#create(Class) for the client as usual, and it uses the
> > javassist for the server to create an implimentation of the interface
> > given on the runtime.
>
> > For the first time I thought it was going to be simple, but it didn't
> > become so because of the limitation of GWT#create(Class) that it must
> > be called with a class literal. To cope with the limitation, I created
> > Kotori I18N Plugin that automatically create the super-source in your
> > project and replace the KtrI18N#createXXX to GWT#create(Class).
>
> > Is it confusing? Yes, I think so. But I don't know the other way to
> > get over the limitation. I hope GWT to remove the limitation. If the
> > limitation would be removed, I will throw the plugin away with
> > pleasure.
> > ==
>
> >> I don't add the super-source tag and it runs like a charm.
>
> > If you want to use KtrI18N.create only on the server side not on the
> > client, you don't have to use super-source and you don't have to edit
> > your gwt.xml module file.
>
> > All you have to do is
> >  (1) Put ktr-i18n.jar and javassist.jar in your classpath
> >  (2) Use KtrI18NCreator.create() in your server side code
>
> > --
> > bufferings
>
> > On 10月5日, 午後11:45, Jerome Cance <[email protected]> wrote:
> >> Wooah,
>
> >> that's exactly what I need and it runs perfectly !
>
> >> Thanks a lot !
>
> >> I think this kind of feature should be available directly in the GWT
> >> project.
>
> >> Bufferings, when I look at your site, the procedure to make it work seems 
> >> to
> >> be more complex. Why ?
> >> I don't add the super-source tag and it runs like a charm.
>
> >> ---------------------------
> >> Jérôme CANCE
>
> >> On Mon, Oct 5, 2009 at 4:20 PM, bufferings <[email protected]> wrote:
>
> >> > Hi Jerome
>
> >> > > I want to do on my server side:
> >> > > myConstants.myMessage();
>
> >> > I also thought about the same thing with you, and I created that with
> >> > javassist.
> >> > [Kotori I18N Project]
> >> >http://code.google.com/p/kotori/wiki/KotoriI18N?wl=en
> >> > I think a part of the project is useful to you.
>
> >> > If you try using the library,
> >> > (1) download "Kotori I18N"(ktr-i18n-0.1.0-alpha-v200909202315.zip).
> >> > In this time, you don't have to download "Kotori I18N Plugin(Eclipse
> >> > plugin)", which is a trick for the seamless use on both the client and
> >> > the server.
> >> > (2) Put ktr-i18n.jar and javassist.jar in your classpath.
> >> > (3) Use KtrI18NCreator.create() in your server side code like
> >> > GWT.create in the client.
>
> >> > If you don't use the library,
> >> > I think a part of it is useful to you.
>
> >> >http://code.google.com/p/kotori/source/browse/#svn/trunk/ktr-i18n/src...
>
> >> > --
> >> > bufferings
>
> >> > On 10月5日, 午後9:35, Jerome Cance <[email protected]> wrote:
> >> > > Thank you for this response, I was thinking of a solution like this but
> >> > what
> >> > > I don't like in this solution is the use of a constant for server side
> >> > > ressource bundle.
>
> >> > > If I can, I want to use a function to refer to an internationalized
> >> > string.
>
> >> > > In summary:
>
> >> > > I want to do on my server side:
> >> > > myConstants.myMessage();
> >> > > (like I do on client side)
>
> >> > > instead of:
> >> > > myConstants.getString("myMessage");
> >> > > (avoid the ressource bundle mechanism to have unicity on client and
> >> > server
> >> > > internationalization)
>
> >> > > But if I can't I will use your solution.
>
> >> > > ---------------------------
> >> > > Jérôme CANCE
>
> >> > > On Mon, Oct 5, 2009 at 2:18 PM, Lothar Kimmeringer <[email protected]
> >> > >wrote:
>
> >> > > > Jerome C. schrieb:
>
> >> > > > > I need to use internationalization files on server side (send 
> >> > > > > email,
> >> > > > > and email content is internationalized).
> >> > > > > When I use GWT.create on my server side, it does not run 
> >> > > > > (exception).
>
> >> > > > [...]
>
> >> > > > > If I can, I don't want to use two different mechanisms for client 
> >> > > > > and
> >> > > > > server internationalization.
>
> >> > > > I solved it by adding the locale-string to the parameters of the
> >> > > > servlet-method to be called:
>
> >> > > > public String getSomething(String param1, long param2, String locale)
> >> > > > throws RemoteServiceException {
> >> > > >  ResourceBundle rb = getResourceBundle(locale);
> >> > > >  try{
> >> > > >    doSomething()
> >> > > >  }
> >> > > >  catch(Exception e){
> >> > > >    throw new
>
> >> > RemoteServiceException(rb.getString("ServiceGeneral_Error_SomethingHappened­­"));
> >> > > >  }
> >> > > > }
>
> >> > > > public static ResourceBundle getResourceBundle(String locale) {
> >> > > >  Locale loc = getLocale(locale);
> >> > > >  ResourceBundle rb =
> >> > > > Utf8ResourceBundle.getBundle(AdminToolsI18NConstants.class.getName(),
> >> > loc,
> >> > > > AdminToolsI18NConstants.class.getClassLoader());
> >> > > >  return rb;
> >> > > > }
>
> >> > > > public static Locale getLocale(String locale){
> >> > > >  if (locale == null){
> >> > > >    return null;
> >> > > >  }
> >> > > >  StringTokenizer tt = new StringTokenizer (locale, "_");
> >> > > >  Locale loc = new Locale(tt.nextToken(), tt.hasMoreTokens() ?
> >> > > > tt.nextToken() : "", tt.hasMoreTokens() ? tt.nextToken() : "");
> >> > > >  return loc;
> >> > > > }
>
> >> > > > The Utf8ResourceBundle is inspired by
> >> > > >http://www.thoughtsabout.net/blog/archives/000044.html
> >> > > > That way you can use the ResourceBundle-files you created for the
> >> > > > GWT-client. In each bundle I added one property, e.g.
>
> >> > > > Locale = DE
>
> >> > > > So a call in the GWT-client looks like this:
>
> >> > > > public static final MyI18NConstants CONSTANTS = (MyI18NConstants)
> >> > > > GWT.create(MyI18NConstants.class);
>
> >> > > > [...]
>
> >> > > >  GeneralServices.Util.getInstance().getSomething(param1, param2,
> >> > > > CONSTANTS.Locale(), new AsyncCallback(){
> >> > > >    [...]
> >> > > >    public void onFailure(Throwable caught) {
> >> > > >      Window.alert(caught.getMessage());
> >> > > >    }
> >> > > >  };
>
> >> > > > If you have defined Messages instead of Constants you can do the
> >> > filling
> >> > > > of the parameters by a simple text-replacement, e.g. by replaceAll:
>
> >> > > > rb.getString(...).replaceAll("\{0\}", e.getMessage());
>
> >> > > > Regards, Lothar- 引用テキストを表示しない -
>
> >> > > - 引用テキストを表示 -- 引用テキストを表示しない -
>
> >> - 引用テキストを表示 -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to