GWT筆記(5)

chszs發表於2007-07-22
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/1701721

GWT筆記(5)

Internationalization 國際化 (I18N)
國際化(簡寫為i18n)是一個附加框架的過程,它讓你的應用程式支援不同國家的語言。
Localization 本地化(L10N)
本地化(簡寫為l10n)為當使用框架定製應用程式的每一種語言時。
GWT提供了完整的和可伸縮的國際化支援工具。
還有拼寫檢查和語法錯誤檢查等。
實現國際化的標準Java方法是通過資源繫結和配置檔案來實現。GWT也是如此。
一、Constants,Messages and Dictionary
GWT為本地化文字提供了4種選擇。
1)常量 Constants
這種型別只能用於文字中且不能替換。例如域標籤或選單名,還有數字、布林值和對映等。
2)ConstantsWithLookup
者是同樣的常量介面,且你可以用動態字串來查詢它。
3)Message
這是通常的字串,可以包括佔位符。
4)Dictionary
這是最靈活的,在所有選擇中最低效的,字典介面支援動態指定現場(locale)。
前三者更高效一些,因為能提前決定現場,再編譯到應用程式。GWT編譯器為每一個現場產生一個不同的.cache.html檔案,並在執行時載入適合的版本。
訊息介面對大多數應用程式來說是最好的選擇,下面將顯示它的用法。
它們的API是相似的。在應用程式中使用多個風格是可能的。
二、建立屬性配置檔案(Property File)
下面用一個簡單的程式開始,使用訊息代替硬編碼的(hard-coded)字串來轉換它,原始程式如下:
I18NProject/src/com/xyz/client/I18NOrig.java
————————————————–
public class I18NOrig implements EntryPoint{
  privae Button m_clickMeButton;
  public void onModuleLoad(){
    RootPanel rootPanel=RootPanel.get();
    {
      m_clickMeButton=new Button();
      rootPanel.add(m_clickMeButton);
      m_clickMeButton.setText(“Click me!”);
      m_clickMeButton.addClickListener(new ClickListener(){
        public void onClick(Widget sender){
          Window.alert(“Hello, GWT World!”);
        }
      });
    }
  }
}
————————————————–
第一步是查詢所有的字串並複製它們到屬性配置檔案。它使用標準的name = value 格式。註釋用“#”開始,用於代替引數的佔位符用{0},{1}等等來指定。下面是用於轉換程式的屬性配置檔案:
I18NProject/src/com/xyz/client/AppMessages.properties
————————————————–
m_clickMeButton_text=Click me!
m_helloAlert_text=Hello,{0} World!
————————————————–
在客戶端,這個檔案是必須的。這是預設的語言檔案,英語或其它語言。要提供翻譯成其它語言,使用ISO語言和國家程式碼字尾,如:“_fr”指法語,“_fr_CA”指加拿大法語。
I18NProject/src/com/xyz/client/AppMessages_fr.properties
————————————————–
m_clickMeButton_text=Cliquez-moi!
m_helloAlert_text=Bonjour, Monde de {0}!
三、建立存取器類(Accessor Class)
如果你熟悉標準Java訊息,你就知道它們是靠字串來訪問的。
要得到已翻譯的訊息,呼叫方法getString(“m_clickMeButton_text”)。但這種方法有兩個問題,一是訊息鍵要和訊息值一樣長或比它長;二是如果訊息中有錯誤,則只能在執行時才能發現。
GWT改進了訊息工作方式。它通過Java方法來引用訊息,而不是靠字串。這需要建立一個新的Java類,對每一個訊息有一個相一致的方法。
I18NProject/src/com/xyz/client/AppMessages.java
————————————————–
package com.xyz.client;
import com.google.gwt.i18n.client.Messages;
public interface AppMessages extends Messages{
  String m_clickMeButton_text();
  String m_helloAlert_text(String toolkit);
}
————————————————–
注意:不管你的應用程式要支援多少種語言,這裡只能有一個存取器類。
四、引用訊息
下一步就是在程式碼中用引用新訊息來取代靜態字串。使用GWT.create來得到一個對存取器類的引用後,呼叫新方法來檢索訊息文字。例:
I18NProject/src/com/xyz/client/I18N.java
————————————————–
public class I18N implements EntryPoint{
  private static final AppMessages MESSAGES=(AppMessages) Gwt.create(AppMessages.class);
  private Button m_clickMeButton;
  public void onModuleLoad(){
    RootPanel rootpanel=RootPanel.get();
    {
      m_clickMeButton=new Button();
      rootpanel.add(m_clickMeButton);
      m_clickMeButton.setText(MESSAGES.m_clickMeButton_text());
      m_clickMeButton.addClickListener(new ClickListener(){
        public void onClick(Widget sender){
          Window.alert(MESSAGES.m_helloAlert_text(“GWT”));
        }
      });
    }
  }
}
————————————————–
五、改動模組
模組檔案要完成轉變,有兩個小改動是必須的。首先,需要告訴GWT從I18N模組繼承的功能性;其次,需要定義要翻譯成的哪種語言。例:
I18NProject/src/com/xyz/I18N.gwt.xml
————————————————–
<module>
  <inherits name=”com.google.gwt.user.User”/>
  <entry-point class=”com.xyz.client.I18N”/>
  <extend-property name=”locale” value=”fr,de”/>
</module>
————————————————–
六、執行例子
首先在主機模式下執行例子。
要嘗試法語版本,在瀏覽器中編輯URL並增加字尾?locale=fr。按Enter鍵重新整理頁面,將顯示用法語代替英語。點選按鈕,也顯示法語文字。
在HTML檔案中選擇現場的另一種方法是嵌入它作為元標記(meta tag)。如:
<meta name=`gwt:property` content=`locale=ja_JP`>
在伺服器端動態產生HTML可能更方便,就像JSP檔案一樣。
 


相關文章