Toàn cầu hoá ứng dụng RCP Eclipse của bạn

Giao diện người dùng (UI) của bạn có thể dễ dàng hỗ trợ nhiều ngôn ngữ ra sao

Rich Client Platform (RCP) của Eclipse đang được sự chấp nhận rộng rãi trong phát triển phần mềm. Đối với các doanh nghiệp đa quốc gia, việc phân phối phần mềm hỗ trợ đa ngôn ngữ đang ngày càng trở nên quan trọng đối với các khách hàng toàn thế giới. Trong bài này, bạn hãy học cách toàn cầu hoá các phần tử giao diện người dùng (UI) trong một ứng dụng RCP, bao gồm cửa sổ, thực đơn, thanh công cụ, hộp thoại, trang chào, màn hình gây chú ý và các phần tử giao diện người dùng của Eclipse chuẩn. Ứng dụng thí dụ Hello World cùng bạn trong suốt bài này.

Wei Wang, Kỹ sư phần mềm, IBM  

Wang Wei gia nhập IBM tháng 9, 2004. Hiện ông là nhà phát triển các Widgets ECM của IBM. Trước đây ông là nhà phát triển BPF của FileNet.



Yuan Yao Deng, Kỹ sư phần mềm, IBM  

Yuan Yao DengYao Yuan Deng là nhà phát triển Widgets ECM. Ông có hơn năm năm kinh nghiệm về phát triển Eclipse.



30 09 2010

Giới thiệu

Rich Client Platform (RCP) của Eclipse có rất nhiều lợi thế, chẳng hạn phát triển nhanh, nhìn và cảm nhận tự nhiên, có khả năng mở rộng và hỗ trợ nhiều nền tảng. Nhiều doanh nghiệp đã áp dụng RCP để phát triển phần mềm của họ. Đối với doanh nghiệp đa quốc gia, phân phối phần mềm hỗ trợ nhiều ngôn ngữ đang ngày càng trở nên quan trọng đối với việc bán hàng cho khách hàng toàn thế giới. Toàn cầu hóa là một phần cấp thiết trong phát triển phần mềm của RCP. Hãy tìm hiểu cách để toàn cầu hoá giao diện đối với ứng dụng RCP bằng cách sử dụng ví dụ Hello World.


Ứng dụng mẫu

Ví dụ trong bài này sẽ toàn cầu hoá ứng dụng Hello World với một số chức năng đơn giản. Hình 1 là hình giao diện chính của ứng dụng Hello World của ta.

Hình 1. Ứng dụng RCP Hello World
Ứng dụng RCP Hello World

Khi bạn nhấn mục Say Hello trong thực đơn File, sẽ thấy hộp thoại với "Xin chào! Đây là một ví dụ!". Khi bạn khởi động ứng dụng hoặc nhấn Welcome trong thực đơn Help, trang chào sẽ xuất hiện trong giao diện chính, cung cấp vài thông tin giới thiệu. Nhấn About Hello World từ thực đơn Help cung cấp thông tin về ứng dụng và phiên bản. Đó là về các chức năng — rất đơn giản.

Ứng dụng Hello World được tạo với Eclipse phiên bản 3.4.1, dựa trên khuôn mẫu "hướng dẫn ứng dụng RCP” sau hướng dẫn từng bước của dự án trình cắm thêm. Một số mã bổ sung là cần sau khi kết thúc hướng dẫn từng bước này. Hãy tham khảo nguồn của ví dụ này, mà bạn có thể tải về. Trọng tâm của bài này là toàn cầu hóa, do đó sẽ không thảo luận về mã đối với chức năng khác.

Sau khi bạn hoàn thành mã hóa Hello World, chỉ có thể hỗ trợ tiếng Anh theo mặc định. Bạn đang bổ sung hỗ trợ đa ngôn ngữ cho ứng dụng này. Các phần tử giao diện người dùng cần toàn cầu hóa bao gồm các thực đơn, thanh công cụ, hộp thoại, màn hình gây chú ý, trang chào, trình cắm thêm và thông tin sản phẩm và các phần tử giao diện người dùng Eclipse chuẩn.


Bó tài nguyên chung

Như với các ứng dụng Java™ khác, bạn cần phải tạo một bó tài nguyên cho các ứng dụng RCP. Trong ví dụ này, bó tài nguyên được đặt trong gói helloworld.resource và có tên là "custom". Tên tệp của bó tài nguyên phải tuân theo các bó tài nguyên của Java đặt tên theo các quy ước: <resource_name>_<Language Code>_<Country Code>.properties. Ví dụ custom_fr.properties là bó tài nguyên cho tiếng Pháp và custom_zh_CN.properties là cho chữ Trung Quốc giản thể. Xem phần Tài nguyên để có thêm thông tin về mã ngôn ngữ và mã quốc gia. Hình 2 là hình các bó tài nguyên đối với Hello World.

Hình 2. Cấu trúc bó tài nguyên
Cấu trúc bó tài nguyên

Các tệp bó tài nguyên chứa các cặp khóa/giá trị. Các khóa xác định duy nhất đối tượng ngôn ngữ cụ thể trong bó này. Bạn cần phải tạo một cặp khoá/giá trị cho mỗi phần tử giao diện người dùng mà bạn muốn toàn cầu hoá. Liệt kê 1 là tệp thuộc tính cho tiếng Anh.

Liệt kê 1. Nội dung của tệp bó nguồn 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!

Tại điểm này, bạn cần một tiện ích để đọc các bó tài nguyên. Như thấy trong liệt kê 2, bó CustomString cung cấp hai chức năng:

  • setBundle khởi tạo một bó tài nguyên đối tượng theo phương ngữ.
  • getString trả về một giá trị cho một khóa đã cho trong ngôn ngữ cụ thể.
Liệt kê 2. Tiện ích để đọc bó tài nguyên (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; } 
  } 
}

Sau khi bó tài nguyên và tiện ích đã sẵn sàng, bạn thông báo cho ứng dụng về ngôn ngữ nào nên được sử dụng khi nó khởi chạy. Application.java là lối vào của một ứng dụng RCP. Khuyên bạn khởi tạo các bó tài nguyên trong phương thức start(). Locale.getDefault() trả về ngôn ngữ hệ thống mặc định và phương ngữ này được chuyển tới CustomString.setLocale(), như hình dưới đây. Ứng dụng sẽ khởi tạo bó tài nguyên bằng cách sử dụng phương ngữ hệ thống.

Liệt kê 3. Thiết lập phương ngữ trong Application.java
public Object start(IApplicationContext context) {
    CustomString.setLocale(Locale.getDefault()); ... 
}

Bây giờ bó tài nguyên chung đã sẵn sàng sử dụng cho toàn bộ ứng dụng. Phần tiếp sẽ giải thích cách gọi các bó tài nguyên trong giao diện người dùng.


Thanh công cụ, thực đơn và hộp thoại

Trong ứng dụng RCP, các lối vào thực đơn và thanh công cụ được đại diện bằng hành động. Có thể bổ sung thực đơn và thanh công cụ nhờ mã hoặc mở rộng. Ví dụ của chúng ta đăng ký các hành động của thực đơn theo mã. Trong lớp định nghĩa hành động, nhãn hành động được xác định trong trình kiến thiết theo phương thức setText(). Văn bản sẽ hiển thị như nhãn thực đơn. Như có thể thấy, văn bản bây giờ được mã hóa cứng chỉ cho tiếng Anh. Mã được thay đổi thay thế dòng chữ "Say Hello" bằng cách sử dụng bó tài nguyên trong phương thức setText() .

Liệt kê 4. Thiết lập văn bản hành động trong HelloAction.java đối với thực đơn và thanh công cụ
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")); 
  .... 
}

Các hộp thoại có các mã khác nhau để hiển thị văn bản trên giao diện người dùng, nhưng phương thức toàn cầu hóa là như nhau. Bạn có thể sử dụng cùng cách tiếp cận để toàn cầu hoá các giao diện người dùng khác do mã Java tạo ra — nó không chỉ giới hạn ở thực đơn, thanh công cụ và hộp thoại.

Liệt kê 5. Thiết đặt tiêu đề hộp thoại và thông báo
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"));

Như vậy đến đây, việc toàn cầu hóa giao diện người dùng là tương tự như ứng dụng Java thông thường. Phần tiếp giới thiệu các đặc tính của ứng dụng RCP.


Màn hình gây chú ý

Màn hình gây chú ý là một hình ảnh xuất hiện trong khi ứng dụng đang được nạp. Nó thông báo cho người sử dụng là chương trình này đang được nạp và cung cấp các thông tin về ứng dụng, chẳng hạn như tên của sản phẩm và bản quyền. Thông thường màn hình gây chú ý đối với ứng dụng RCP được đặt tên là splash.bmp và ở dưới thư mục gốc của dự án trình cắm thêm. Tuy nhiên, tệp splash.bmp ở dưới thư mục gốc chỉ cho tiếng Anh. Để cung cấp các màn hình gây chú ý khác nhau theo các ngôn ngữ trong ứng dụng đa ngôn ngữ, bạn cần phải thực hiện theo các quy tắc đường dẫn của màn hình gây chú ý. Hình 3 là một ví dụ.

Đặt tên thư mục gốc của dự án trình cắm thêm là <plugin-root>. splash.bmp. Nó phải được đặt vào trong bó <plugin-root>/nl/<Language Code>/<Country Code>. Ví dụ bạn cần phải đặt tệp màn hình gây chú ý đối với chữ Trung Quốc giản thể vào bó <plugin-root>/nl/zh/CN.

Hình 3. Các quy tắc đường dẫn của màn hình gây chú ý
Các quy tắc đường dẫn của màn hình gây chú ý

Trang chào

Các tính năng trang chào được cung cấp bởi trình cắm thêm org.eclipse.ui.intro. Bạn có thể xác định các trang riêng giới thiệu sản phẩm cho các khách hàng mới. Các trang Chào được hiển thị lần đầu tiên khi một sản phẩm được bắt đầu và là cách để cho người dùng biết các chức năng sản phẩm. Các trang Chào RCP bao gồm một tệp giới thiệu nội dung và các tệp của trang (HTML, hình ảnh, CSS, …).

Do có thể có tập các tệp trang đối với mỗi ngôn ngữ, nên bạn cần sử dụng các introContent.xml khác nhau để trỏ đến các trang Chào khác nhau theo phương ngữ. Tệp nội dung giới thiệu được tệp plugin.xml tham chiếu. Bạn viết gọn tên tệp nội dung giới thiệu trong tệp plugin.xml bằng chuỗi ngoài. Các chuỗi ngoài được lưu trong tệp thuộc tính với quy ước đặt tên plugin_<Language_Code>_<Country_Code>.properties. Các mối quan hệ này giữa các tệp được thấy trong hình 4.

Hình 4. Mối quan hệ giữa các trang Chào được toàn cầu hóa
Mối quan hệ giữa các trang Chào được toàn cầu hóa

Đoạn mã trong liệt kê 6 là từ tệp plugin.xml. Biến %welcome.page được sử dụng trong thuộc tính nội dung thay vì tên tệp introContent.xml được mã hóa cứng. Tên tệp thực được đặt trong tệp thuộc tính để tệp plugin.xml có thể tìm thấy tệp nội dung tương ứng theo phương ngữ.

Liệt kê 6. Phần trang Chào của tệp plugin.xml
<extension point="org.eclipse.ui.intro.config"> 
  <config introId="helloworld.intro" content="%welcome.page" id="HelloWorld.configId">
    <presentation home-page-id="root"> 
      <implementation kind="html" os="win32,linux,macosx"> 
      </implementation> 
    </presentation>
  </config> 
</extension>

Chúng ta hãy sử dụng chữ Trung Quốc làm ví dụ. Khi người dùng khởi chạy ứng dụng Hello World trong môi trường chữ Trung Quốc, tệp plugin.xml sẽ tìm thấy tệp chuỗi ngoài chữ Trung Quốc plugin_zh_CN.properties và sẽ nhận được tên tệp theo tên khóa welcome.page trong tệp thuộc tính. Tệp nội dung introContent_zh_CN.xml của chữ Trung Quốc sẽ được sử dụng, như thấy trong liệt kê dưới đây.

Liệt kê 7. Tên tệp nội dung giới thiệu trong plugin_zh_CN.properties
#Properties file for HelloWorld 
  Bundle-Name = HelloWorld Plug-in 
  perspective.name = RCP Perspective 
  product.name = Hello World
  welcome.page=welcome/introContent_zh_CN.xml

Bạn có thể thấy cách tệp introContent_zh_CN.xml trỏ đến trang Chào bằng chữ Trung Quốc ở định dạng HTML. Tệp welcome_zh_CN.html là tệp HTML với thông tin giới thiệu sản phẩm bằng chữ Trung Quốc. Người sử dụng ứng dụng trong hệ điều hành chữ Trung Quốc sẽ thấy trang Chào bằng chữ Trung Quốc.

Liệt kê 8. Trang Chào được thiết lập bằng tệp introContent_zh_CN.xml
<?xml version="1.0" encoding="utf-8" ?>
<introContent> 
    <page id="root" content="welcome_zh_CN.html"/>
</introContent>

Trình cắm thêm và sản phẩm

Các thông tin trong các trình cắm thêm và sản phẩm, chẳng hạn tên sản phẩm, tiêu đề cửa sổ chính, các văn bản About cũng có thể được toàn cầu hóa. Thông tin này được lưu trong tệp plugin.xml. Bạn có thể sử dụng cùng cách tiếp cận toàn cầu hóa như với trang Chào. Chỉ có bó plugin.xml và plugin.properties là cần cho công việc này. Tất cả các thông tin trong tệp plugin.xml có thể được đưa ra ngoài, vào bó plugin.properties.

Liệt kê 9. Phần thông tin về sản phẩm của tệp plugin.xml
<extension id="product" point="org.eclipse.core.runtime.products"> 
 <product application="HelloWorld.application" name="%product.name"> 
   <property name="windowImages" value="icons/alt_window_16.gif,icons/alt_window_32.gif">
   </property>
   <property name="appName" value="%product.name">
   </property> 
   <property name="aboutText" value="%about.text">
   </property> 
 </product> 
</extension>

Bằng cách sử dụng tệp plugin.properties trước đây, bạn bổ sung hai thuộc tính: product.nameabout.text. Giá trị của thuộc tính product.name được thấy trên tiêu đề cửa sổ và thực đơn About. Giá trị của about.text được hiển thị khi bạn mở hộp thoại About.

Liệt kê 10. plugin.properties
#Properties file for HelloWorld 
Bundle-Name = HelloWorld Plug-in 
perspective.name = RCP
Perspective welcome.page=welcome/introContent.xml 
product.name = Hello World
#About text has multiple line. 
about.text=This is HelloWorld\n\ \n\ Version 1.0

Nếu tệp thuộc tính chứa ký tự không thuộc bảng ASCII, chẳng hạn tên sản phẩm hoặc văn bản About, bạn cần chuyển tệp từ bảng mã nguyên thủy sang mã ASCII với bộ mã Unicode escape. <JDK_HOME>\bin\native2ascii có thể được dùng để kết thúc việc chuyển đổi. Đối với các bó tài nguyên chữ Trung Quốc plugin_zh_CN.properties, bạn cần chuyển đổi. Sau khi chuyển đổi, plugin_zh_CN.properties trông giống như liệt kê 11.

Liệt kê 11. plugin_zh_CN.properties
#Properties file for HelloWorld 
Bundle-Name = HelloWorld 
Plug-in perspective.name = RCP
Perspective product.name = \u4f60\u597d 
welcome.page=welcome/introContent_zh_CN.xml
about.text=\u8fd9\u662f\u4e00\u4e2a\u4f8b\u5b50\n\ \n\ \u7248\u672c 1.0

Các phần tử giao diện người dùng Eclipse chuẩn

Eclipse có một số phần tử giao diện người dùng mà không là một phần ứng dụng của bạn, chẳng hạn như mẹo công cụ tối đa hóa và giảm thiểu các nút cửa sổ. Đối với ứng dụng giao diện người dùng của bạn, cũng cần phải toàn cầu hoá những thành phần giao diện người dùng này. May mắn là Eclipse sẽ giúp giải quyết vấn đề này. Hãy tải gói ngôn ngữ cho Eclipse và đặt chúng dưới thư mục của trình cắm thêm của ứng dụng RCP của bạn. Các phần tử giao diện người dùng sẽ được toàn cầu hóa một cách tự động khi bạn khởi chạy ứng dụng của mình.


Tóm tắt

Có nhiều loại phần tử giao diện người dùng trong ứng dụng RCP. Bạn cần sử dụng các tiếp cận khác nhau đối với toàn cầu hoá các phần tử khác nhau của giao diện người dùng. Bài này giới thiệu việc thực hiện toàn cầu hóa (G11N) của thanh công cụ, thực đơn, hộp thoại, màn hình gây chú ý, trang Chào, thông tin sản phẩm, và các phần tử giao diện người dùng Eclipse chuẩn.

Mặc dù ứng dụng thí dụ Hello World có chức năng rất hạn chế, nhưng nó đề cập hầu hết các phần tử giao diện người dùng. Bây giờ bạn có thể xây dựng một giao diện người dùng được trợ giúp toàn cầu hóa hoàn toàn cho ứng dụng RCP của mình.


Tải về

Mô tảTênKích thước
Hello Worldos-eclipse-globalrcp-HelloWorld.zip161KB

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

Thảo luận

  • Các nhóm tin của Nền tảng Eclipse là điểm dừng chân đầu tiên của bạn để thảo luận về các vấn đề liên quan đến Eclipse. (Lựa chọn này sẽ khởi chạy ứng dụng mặc định đọc tin tức Usenet của bạn và mở eclipse.platform.)
  • Các nhóm tin về Eclipse cung cấp nhiều tài nguyên cho những người quan tâm đến việc sử dụng và mở rộng Eclipse.
  • Hãy tham gia vào các blog của developerWorks và tham gia vào cộng đồng developerWorks.

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Nguồn mở, Công nghệ Java
ArticleID=525135
ArticleTitle=Toàn cầu hoá ứng dụng RCP Eclipse của bạn
publish-date=09302010