Tải bản đầy đủ (.pdf) (15 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (380.06 KB, 15 trang )

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
Wei Wang, Kỹ sư phần mềm, IBM
Yuan Yao Deng, Kỹ sư phần mềm, IBM
Tóm tắt: 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.
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

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á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ú ý



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

Đ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.name và about.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.


Mục lục

 Giới thiệu
 Ứng dụng mẫu
 Bó tài nguyên chung

 Thanh công cụ, thực đơn và hộp thoại
 Màn hình gây chú ý
 Trang chào
 Trình cắm thêm và sản phẩm
 Các phần tử giao diện người dùng Eclipse chuẩn
 Tóm tắt

×