歡迎您光臨本站 註冊首頁

全球化 Eclipse RCP 應用程序

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
Eclipse Rich Client Platform (RCP) 逐漸在軟體開發方面獲得了廣泛的認可。對於跨國公司來說,為世界範圍內的客戶交付支持多語言的軟體變得越來越重要。通過本文,您可以學習到如何在 RCP 應用程序中全球化用戶界面(UI)元素,包括窗口、菜單、工具欄、對話框、歡迎頁面、閃屏和標準 Eclipse UI 元素。樣例應用程序 Hello World 將向您演示整個流程。

簡介

Eclipse Rich Client Platform(RCP)有著許多優勢,如開發迅速、自然的感觀、可擴展性和多平台支持。許多公司都採用 RCP 來開發他們的軟體。對於跨國公司來說,要把軟體出售給世界各地的用戶,交付支持多語言的軟體正變得越來越重要。全球化是 RCP 軟體開發的關鍵部分。通過使用 Hello World 樣例,學習如何全球化一個 RCP 應用程序的 UI。





樣例應用程序

本文的樣例將使用一些簡單的功能實現 Hello World 應用程序全球化。圖 1 顯示的是 Hello World 應用程序的主 UI。


圖 1、Hello World RCP 應用程序


當您單擊 File 菜單中的 Say Hello 時,將會彈出一個對話框 “Hello! This is a sample!”。打開應用程序或者單擊幫助菜單里的 Welcome,歡迎頁面將出現在主 UI 上,提供一些介紹性信息。單擊幫助菜單里的 About Hello World 將會顯示應用程序和版本信息。這就是它的功能 — 非常簡單。

Hello World 應用程序是由 Eclipse V3.4.1 創建,它以 “RCP application with an intro” 模板為基礎,並遵循插件項目嚮導的步驟。完成嚮導后,需要一些附加代碼。請參考本樣例的源代碼,您可以 下載 獲得。本文的焦點在於全球化,因此,本文不會討論實現其他功能的代碼。

完成 Hello World 代碼的編寫后,默認情況下只支持英語。需要為此應用程序添加多語言支持。需要進行全球化的 UI 元素包括菜單、工具欄、對話框、閃屏、歡迎頁面、插件和產品信息,以及標準的 Eclipse UI 元素。





常見資源包

同其他的 Java™ 應用程序一樣,需要為 RCP 應用程序創建一個資源包。在本樣例中,資源包放在 helloworld.resource 包中,並且命名為 “custom”。資源包文件名必須符合 Java 資源包的命名慣例:<resource_name>_<Language Code>_<Country Code>.properties。例如,custom_fr.properties 是用於法語的資源包,而 custom_zh_CN.properties 是簡體中文的資源包。更多有關語言和國家代碼的信息,請參見 參考資料。圖 2 顯示的是 Hello World 的資源包。


圖 2、資源包結構


資源包文件包含了鍵/值對。這些鍵能夠惟一地識別資源包中特定於位置的對象。需要對每個想要全球化的 UI 元素創建一個鍵/值。清單 1 顯示了用於英語的屬性文件。


清單 1、資源包文件 custom_en.properties 的內容
				  MAIN_WINDOW_TITLE=Hello World  MENU_FILE=&File  MENU_FILE_SAY_HELLO=Say Hello  MENU_HELP=&Help  DIALOG_TITLE=Hello  DIALOG_MESSAGE=Hello! This is a sample!  			

現在,您需要一個實用程序來讀取資源包。如清單 2 所示,CustomString 類提供了兩個功能:

  • setBundle 根據位置初始化一個資源包對象。
  • getString 用指定的語言返回一個給定鍵的值。

清單 2、用於讀取資源包(CustomString.java)的實用程序
				  public class CustomString {  	private static final String BUNDLE_NAME = "helloworld.resource.custom";  	private static ResourceBundle rb = null;    	public static void setBundle(Locale locale) {  		try {  			rb = ResourceBundle.getBundle(BUNDLE_NAME, locale);  		} catch (Exception e) {  			rb = ResourceBundle.getBundle(BUNDLE_NAME, Locale.ENGLISH);  		}  	}    	public static String getString(String key) {  		try {  			String keyValue = new String(rb.getString(key).getBytes(  			        "ISO-8859-1"), "UTF-8");  			return keyValue;  		} catch (Exception e) {  			return key;  		}  	}    }  	    

資源包和實用程序準備就緒后,要通知應用程序在啟動時應該使用哪種語言。Application.java 是 RCP 應用程序的入口。建議使用 start() 方法初始化資源包。Locale.getDefault() 返回默認系統位置,如下所示,然後返回的位置會被傳遞給 CustomString.setLocale() 中。應用程序將使用系統位置初始化資源包。


清單 3、在 Application.java 中設定位置
				  	public Object start(IApplicationContext context) {  		CustomString.setLocale(Locale.getDefault());  		...  		}  			

常用資源包現在可以用於整個應用程序。下面的小節將講解如何在 UI 里調用資源包。





工具欄、菜單和對話框

在一個 RCP 應用程序里,菜單和工具欄條目是以動作的形式表示。菜單和工具欄可以使用代碼或者擴展進行添加。我們的樣例使用代碼註冊菜單動作。在動作定義類里,使用 setText() 方法在構造函數里對動作標籤進行定義。文本將以菜單標籤的形式顯示。如您所見,現在文本只針對英語進行硬編碼。修改過的代碼在 setText() 方法中使用資源包替代 “Say Hello”


清單 4. 在 HelloAction.java 中為菜單和工具欄設置動作文本
				  public HelloAction(IWorkbenchWindow iworkbenchwindow) {  	this.window = iworkbenchwindow;  	this.setText("Say Hello");  	this.setImageDescriptor(WorkbenchImages.  	getImageDescriptor(IWorkbenchGraphicConstants.IMG_VIEW_DEFAULTVIEW_MISC));  	// Must setId,otherwise can not leverage Register method  	setId("helloworld.actions.HelloAction");  	window.getSelectionService().addSelectionListener(this);  	}  	  	/**  	Modified Code  	**/  	public HelloAction(IWorkbenchWindow iworkbenchwindow) {  	....  		this.setText(CustomString.getString("MENU_FILE_SAY_HELLO"));  	....  	}  			

對話框可以用不同代碼在 UI 上顯示文本,但是,全球化方法是相同的。您可以使用同樣的方法把由 Java 代碼生成的其他 UI 進行全球化 — 這並不局限於菜單、工具欄和對話框。


清單 5. 設置對話框標題和消息
				  		MessageDialog.openInformation(PlatformUI.getWorkbench()  				.getActiveWorkbenchWindow().getShell(),  				"Hello",  				"Hello! This is a sample!");  		  		/**  		Modified Code  		**/  		MessageDialog.openInformation(PlatformUI.getWorkbench()  				.getActiveWorkbenchWindow().getShell(),  				CustomString.getString("DIALOG_TITLE"),  				CustomString.getString("DIALOG_MESSAGE"));  			

目前為止,UI 的全球化和典型的 Java 應用程序基本相似。下一小節將介紹 RCP 應用程序的特徵。



閃屏

閃屏是應用程序載入時出現的一個圖片。它通知用戶應用程序正在載入,並且提供產品名和版權等應用程序信息。通常,在 RCP 應用程序中,閃屏被命名為 splash.bmp,並放在插件項目的根文件夾下。然而,放在根文件夾下的 splash.bmp 僅適用於英語。要想在一個多語言的應用程序中根據不同的語言提供不同的閃屏,需要遵循閃屏的路徑規則。圖 3 給出了一個示例。

把插件項目的根文件夾命名為 <plugin-root>。必須把 splash.bmp 放在 <plugin-root>/nl/<Language Code>/<CountryCode> 下。例如,需要把用於簡體中文的閃屏文件放在 <plugin-root>/nl/zh/CN。


圖 3、閃屏路徑規則


[火星人 ] 全球化 Eclipse RCP 應用程序已經有567次圍觀

http://coctec.com/docs/linux/show-post-68804.html