2012-03-21 67 views
0

我有一般的設計問題。你將如何本地化GWT中的類的字段名稱?

你將如何本地化GWT中的類的字段名稱?

想象我有豆與虛註釋如

class Person 
{ 
    @LocalizedName(value = "{Person.name}") 
    String name; 

    @LocalizedName(value = "{Person.address}") 
    String address; 
} 

我對英語和地方這兩個值將被指定的資源包德語。

在運行時的某個時間點,我將有Class<Person>的實例和一些String,其中包含一個字段的名稱(例如name)。

我想以某種方式自動獲取本地化版本的名稱。

我知道I can創建我的我的Messages接口,並調用其getString()但這需要指定這樣令人費解的方法名作爲MyMessages.person_address()類的每個字段被本地化這不僅酷,而且往往會打破,如果我重新命名屬性在重構期間。

這就是我今天的樣子,這很醜陋。

想法?也許我可以使用Generators?還有別的嗎?你是怎麼做到的?

回答

0

如果你想在GWT中做國際化,你應該使用他們內置的機制。谷歌的應用程序通常使用GWT構建爲320個排列,因此這種方法對於大量的國際化十分明顯,並且不應該很難實現。

的選項有:

  • 在接口文件:(
  • 與外部串屬性文件信息接口硬編碼字符串信息接口:|
  • UiBinder的與標籤,輔以本地化的字符串文件:)

我個人認爲UiBinder的情況。當你需要在一個小部件(即標題,標籤等),使用一個字符串,你只是包裝的字符串,像這樣:

<ui:msg description="my great title">You're Title!</ui:msg> 

現在,當您編譯,GWT將收集所有串在一起,並識別它們通過MD5哈希。多次使用相同的單詞/短語,它只會出現在您的i18n屬性文件中,GWT會從它找到的所有唯一字符串爲您動態編譯。現在只需翻譯該文件並將其命名爲name_DE並且GWT會將所有英文單詞替換爲德文的德文組合。

注:只有信息界面可以從類。您必須使用它們來動態更新應用程序中的字符串。

查看GWT i18n guide瞭解更多。

VielGlück。

+0

謝謝你的評論!我瞭解UiBinder模板的國際化。我用它。但問題是關於bean/classes的本地化。這是不同的情況。 – expert 2012-03-21 01:58:57

+0

我沒有讀過你的問題,看到我修改後的答案。至於在beans/classes中這樣做,這不是可悲的GWT設計。 – 2012-03-21 02:03:24

相關問題