Archive for Tháng Năm, 2007

Tạo giao diện đa ngôn ngữ

Posted in Uncategorized on Tháng Năm 25, 2007 by Phạm Quang Hoà

Giới thiệu

Khi viết ứng dụng, chúng ta thường tạo giao diện theo một ngôn ngữ nào đó, ví dụ như tiếng Anh hay tiếng Việt. Các ứng dụng này khi muốn chuyển đổi sang ngôn ngữ khác, thì phải sửa lại toàn bộ giao diện và dịch lại chương trình. Để hỗ trợ khả năng chuyển đổi ngôn ngữ trong khi chạy, một trong những phương pháp thường được sử dụng là tạo một bảng ánh xạ các xâu ký tự theo các ngôn ngữ và chuyển đổi bằng cách viết mã. Tuy nhiên, cách này có một số hạn chế như kết quả hiển thị không đúng (do độ dài xâu ở các ngôn ngữ khác nhau), không tổng quát cho các điều khiển.

.NET hỗ trợ đa ngôn ngữ ngay từ nền tảng, các chương trình viết trên nền .NET có khả năng chuyển đổi ngôn ngữ trong khi chạy một cách dễ dàng. Đặc tính này của .NET được nhắc đến không nhiều trong các tài liệu, và chúng ta thường không để ý đến cho tới khi có nhu cầu.

Trước tiên, cần phải hiểu giao diện ở đây bao gồm:

  • Tiêu đề hiển thị trên các cửa sổ và các điều khiển trong cửa sổ.
  • Các thông báo của chương trình dùng MessageBox.

Giao diện không bao gồm nội dung dữ liệu hiển thị.

Một chương trình khi đã dự định hỗ trợ nhiều ngôn ngữ, cần phải lưu ý một số điểm sau:

  • KHÔNG BAO GIỜ viết trực tiếp một xâu ký tự trong mã nguồn chương trình. Các xâu ký tự trong mã nguồn sẽ không thể chuyển đổi được sang ngôn ngữ khác trong khi chạy. Các xâu ký tự cần được đặt trong các tài nguyên của chương trình.
  • Nên chọn một ngôn ngữ ngầm định (tiếng Anh) khi phát triển chương trình. Việc chuyển đổi ngôn ngữ được thực hiện cuối cùng, khi các chức năng của chương trình đã hoàn tất.

Mô hình mà Microsoft đưa ra, đó là với mỗi cửa sổ sẽ gồm các phần:

  • Tệp chứa mã do người dùng soạn thảo.
  • Tệp chứa mã sinh bởi trình thiết kế.
  • Các tệp tài nguyên cửa sổ, chứa hình ảnh, xâu ký tự… sử dụng trong cửa sổ.

Ứng với mỗi ngôn ngữ hiển thị, có một tệp tài nguyên tương ứng. Khi dịch, các tài nguyên này được đưa vào trong tệp đã dịch (exe, dll), dựa vào ngôn ngữ được lựa chọn mà tài nguyên tương ứng sẽ được sử dụng để hiển thị.

Bài này giới thiệu một chương trình hỗ trợ hai ngôn ngữ hiển thị là tiếng Anh và tiếng Việt, có chuyển đổi ngôn ngữ trong khi chạy. Chương trình mẫu có tên LocalizationDemo, viết bằng ngôn ngữ C#, trên nền Visual Studio 2005. Sau đây là một số kỹ thuật chính khi xây dựng chương trình.

Thêm giao diện tiếng việt cho một cửa sổ

Khi thiết kế cửa sổ, chúng ta sử dụng ngôn ngữ ngầm định là tiếng Anh.

Hình 1 – Giao diện cửa sổ với ngôn ngữ ngầm định.

Để thêm giao diện tiếng việt cho cửa sổ, đặt thuộc tính Language của cửa sổ là Vietnamese, LocalizableTrue.

Hình 2 – Đặt các thuộc tính Language và Localizable cho cửa sổ.

Sau khi đặt các thuộc tính trên, cửa sổ đang thiết kế trông không có gì thay đổi, nhưng thực ra là Form Designer đã tạo ra một giao diện mới dựa trên giao diện đã có.

Sửa đổi toàn bộ giao diện mới của cửa sổ sang tiếng Việt.

Hình 3: Giao diện cửa sổ với ngôn ngữ Tiếng Việt.

Thêm mục Setting cho ngôn ngữ

Để chuyển đổi được ngôn ngữ, chương trình cần phải khởi động lại nên chúng ta cần lưu lại ngôn ngữ được chọn ở lần chạy trước đó.

Thêm vào Settings một mục kiểu string, tên Language, giá trị ngầm định là en-US.

Hình 3 – Thêm mục Language trong Settings của chương trình

Thêm lệnh chuyển đổi ngôn ngữ hiển thị

Lệnh chuyển đổi ngôn ngữ phải được thực hiện trước khi cửa sổ chính được tạo ra. Mở tệp Program.cs và sửa lại phương thức Main như sau:

Xử lý sự kiện Click với hai mục English và Vietnamese trên trình đơn:

Đến đây, chương trình đã có thể chuyển đổi ngôn ngữ trong khi chạy. Để ngôn ngữ được lựa chọn có thể hiển thị được, cần phải khởi động lại chương trình sau khi chọn.

Chuyển đổi ngôn ngữ các thông báo dùng MessageBox

Để có thể chuyển đổi ngôn ngữ đối với các thông báo dùng MessageBox, các xâu ký tự cần phải được đặt trong các tệp tài nguyên.

  • Thêm vào dự án một Resources File và đặt tên là Resources.vi.resx.
  • Kéo tệp vừa thêm và thả vào mục Properties của dự án.

Hình 4 – Tệp Resources.vi.resx trong mục Properties

Tệp Resources.resx dùng để chứa các xâu ký tự trên ngôn ngữ ngầm định, tệp Resources.vi.resx dùng để chứa các xâu ký tự theo ngôn ngữ Tiếng Việt.

Thêm vào các tệp Resources các xâu ký tự, ở cả hai ngôn ngữ:

Hình 5 – Các xâu ký tự trên ngôn ngữ ngầm định

Hình 6 – Các xâu ký tự Tiếng Việt

Khi đưa ra thông báo, truy cập các xâu ký tự thông qua lớp Properties.Resources.

Ví dụ, để thông báo yêu cầu khởi động lại chương trình sau khi chuyển ngôn ngữ, sửa đổi các phương thức xử lý sự kiện như sau:

Download:

Mã nguồn chương trình (zip).