GWT筆記(5)
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檔案一樣。
相關文章
- GWT筆記(6)筆記
- GWT筆記(GoogleWebToolkit)1筆記GoWeb
- 對GWT還是不死心vue-gwtVue
- Python筆記5Python筆記
- python筆記-5Python筆記
- 閱讀筆記5筆記
- Ajax框架之GWT框架
- Vue學習筆記5Vue筆記
- FPGA讀書筆記5FPGA筆記
- git學習筆記5Git筆記
- CCNA學習筆記5筆記
- Delphi逆向工程筆記[5]筆記
- HTML5學習筆記HTML筆記
- Android學習筆記(5)Android筆記
- PL/SQL學習筆記-5SQL筆記
- ruby字串學習筆記5字串筆記
- G01學習筆記-5筆記
- prettus/l5-repository筆記筆記
- GoodNotes 5 for Mac筆記軟體GoMac筆記
- swift學習筆記《5》- 實用Swift筆記
- H5學習筆記(一)H5筆記
- GoodNotes 5 for Mac(筆記軟體)GoMac筆記
- 筆記軟體GoodNotes 5 for Mac筆記GoMac
- Kotlin學習筆記(5)- 類Kotlin筆記
- MD5之學習筆記筆記
- railscasts學習筆記(5-2)AIAST筆記
- HTML5學習筆記 拖放HTML筆記
- 《人月神話》閱讀筆記5筆記
- spring-5學習筆記Spring筆記
- GWT2.2新增canvas元件支援Canvas元件
- 關於GWT的Java heap spaceJava
- C++ Primer 5th筆記(5)chapter5 語句C++筆記APT
- OpenCV學習筆記(5)——normalize函式OpenCV筆記ORM函式
- Flutter學習筆記(5)--Dart運算子Flutter筆記Dart
- OCP 複習筆記之PL/SQL (5)筆記SQL
- 《大圖景》閱讀筆記續5筆記
- Python基礎課程筆記5Python筆記
- linux學習筆記-day5Linux筆記