close
近來所開發的系統都需要面對來自五湖四海的用戶,所以系統都需要提供多語言的界面,讓用戶選擇他想要的。這裏我就簡單說個思路,讓大家考一下。
思路如下:
- 系統內所有文字都用英文,因為英文在各語言版本的 Windows、各種數據庫內的編碼都相對統一,不容易出現亂碼。
- 建一個作為字典數據表。
- 定義一個全局變量作為「目標語言」,讓用戶在登戶時選擇,或存到用戶設定表中。
- 以「目標語言」為主鍵,到字典表中找出對應的翻譯
- 替換控件上的文字
-- 數據表基本架構
create table dictonary (
language_id varchar(10), -- e.g. 01:英文, 02:中文, 03:日文
source_text varchar(255), -- e.g. Sales Order、Create User
target_text varchar(255) -- e.g. 銷售單、創建人
)
-- 數據例子
language_id | source_text | target_text |
---|---|---|
01 | Sales Order | Sales Order |
02 | Sales Order | 銷售單 |
03 | Sales Order | 販売注文 |
程序步驟:
- 以 for loop 讀取 This.Control[] 的每一個控件
- 以「control.text」 取得控件﹝e.g. 按鈕﹞上的文字
- 以文字到數據表裏找出對應的翻譯,如果用戶選了「02:中文」,就以按鈕上的「Sales Order」去找「 language_id = 02 and source_text = Sales Order 」
- 以上表為例,結果會找到「銷售單」,要是找不到就反饋原來的 「Sales Order」,進階一點還可以自動把這行插到字典表中,你偶而檢查一下就可以知道哪些翻譯沒做好,需要補充了。
- 把按鈕上的文字替換成「銷售單」,如此類推,把畫面上所有的控件都做一遍。
這方法其中一個好處就是翻譯部份可以交給別人去做,程序員專心寫代碼就好了,字典表可以交給文職人員去做,做好導入到數據庫中就可以直接使用了。當然,直接給用戶做個維護界面,以後你就可以放手不管了
另外,PowerBuilder 有繼承的概念,這些代碼你寫到「祖先」就好了,往後每個繼承出來的子窗體都可以直接引用,不必再寫一遍。
文章標籤
全站熱搜