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。
當您單擊 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 的資源包。
資源包文件包含了鍵/值對。這些鍵能夠惟一地識別資源包中特定於位置的對象。需要對每個想要全球化的 UI 元素創建一個鍵/值。清單 1 顯示了用於英語的屬性文件。
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 類提供了兩個功能:
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() 中。應用程序將使用系統位置初始化資源包。
public Object start(IApplicationContext context) { CustomString.setLocale(Locale.getDefault()); ... } |
常用資源包現在可以用於整個應用程序。下面的小節將講解如何在 UI 里調用資源包。
工具欄、菜單和對話框
在一個 RCP 應用程序里,菜單和工具欄條目是以動作的形式表示。菜單和工具欄可以使用代碼或者擴展進行添加。我們的樣例使用代碼註冊菜單動作。在動作定義類里,使用 setText() 方法在構造函數里對動作標籤進行定義。文本將以菜單標籤的形式顯示。如您所見,現在文本只針對英語進行硬編碼。修改過的代碼在 setText() 方法中使用資源包替代 “Say Hello”
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 進行全球化 — 這並不局限於菜單、工具欄和對話框。
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")); |
閃屏
閃屏是應用程序載入時出現的一個圖片。它通知用戶應用程序正在載入,並且提供產品名和版權等應用程序信息。通常,在 RCP 應用程序中,閃屏被命名為 splash.bmp,並放在插件項目的根文件夾下。然而,放在根文件夾下的 splash.bmp 僅適用於英語。要想在一個多語言的應用程序中根據不同的語言提供不同的閃屏,需要遵循閃屏的路徑規則。圖 3 給出了一個示例。
把插件項目的根文件夾命名為 <plugin-root>。必須把 splash.bmp 放在 <plugin-root>/nl/<Language Code>/<CountryCode> 下。例如,需要把用於簡體中文的閃屏文件放在 <plugin-root>/nl/zh/CN。
[火星人 ] 全球化 Eclipse RCP 應用程序已經有568次圍觀