2013-08-06 88 views
1

我有一個國際化支持(客戶端)的GWT應用程序。GWT國際化(i18n)在服務器端

我有一個消息類:

/** 
* Interface to represent the messages contained in resource bundle: 
*/ 
public interface Messages extends com.google.gwt.i18n.client.Messages { 

    /** 
    * Translated "No". 
    * 
    * @return translated "No" 
    */ 
    @DefaultMessage("No") 
    @Key("NO") 
    String NO(); 
} 

我有兩個屬性Messages.properties和Messages_fr.properties。

我也有這個配置:

<inherits name="com.google.gwt.i18n.I18N" /> 
<extend-property name="locale" values="fr" /> 
<set-configuration-property name="locale.useragent" value="Y"/> 

而在客戶端我這樣做:

private final Messages messages = GWT.create(Messages.class); 
//... 
messages.NO(); 

與國際化的客戶端是工作,但如果我添加論文follwoing在服務器端線:

private final Messages messages = GWT.create(Messages.class); 

我有一個錯誤,因爲GWT.create它只適用於客戶端sid即

你知道我該如何在服務器端顯示國際化信息?

謝謝!

+0

我成功使用這裏描述的代理:http://stackoverflow.com/a/4660195/4491066 – Adam

回答

2

請記住,GWT在JavaScript中轉換客戶端java代碼,以便瀏覽器可以執行它。這就是爲什麼你的服務器不能對你的Messages類做任何事情並拋出錯誤。請參閱com.google.gwt.i18n.client.Messages中的包客戶端?這是客戶端代碼,所以最終它會是js。

一個良好的開端在服務器端代碼的國際化可能是http://docs.oracle.com/javase/tutorial/i18n/

你仍然可以使用你正在使用的客戶端代碼的.properties,但你必須使用普通的Java方法來訪問它們。一個例子是:

ResourceBundle bundle = ResourceBundle.getBundle("com.example.client.i18n.myresource"); 
bundle.getString("stringToRetrieve"); 
+0

這很奇怪,爲什麼GWT i18n方法不適用於服務器端,它看起來比JDK好得多。 – kan

2

沒有一個明確的答案,但遺憾的是GWT目前沒有對完全重複使用的客戶端郵件的服務器上文件的支持,雖然有工作正在進行中,將其添加到GWT。 John Tamplin在GWT Meet-up 2013上發表了關於在服務器端重新使用客戶端消息的進展和問題的演講。你可以在meetup youtube頻道找到the presentation