一種程序界面文字換膚方法

一種程序界面文字換膚方法
Aiguille.LIU
2008-11-23

  對於GUI程序,界面上會呈現許多圖片和文字信息。圖片一般都是運行時從外部載入的,更換比較容易。然而,文字信息大多情況下都是直接寫在程序代碼中的。這種情況下,如果想更換文字,就需要重新編譯程序,非常不方便。這裏介紹一種程序界面文字換膚方法,可以無須重新編譯程序而實現方便的文字換膚功能,可用於OEM或多語言情形。

1、字典庫
  所有界面中呈現的文字都存儲在該典庫中,它是一個獨立於程序的文件。文件可以是純文本的、加密文本的、動態鏈接庫或其他任何形式。程序運行時,從字典庫中讀取所需的文字信息。因此,當需要修改相關界面文字時,只需要修改字典庫,然後發佈即可,應用程序不需要修改和重新編譯。例如app.dic:

[app]
APP_NAME=程序名
APP_CAPTION=程序標題
APP_VERSION=程序版本
APP_COPYRIGHT=程序版權

2、字典庫訪問接口API
  這裏的API主要只有一個,即從字典庫中提取文字信息。函數原型可以如下:

char *get_dictionary(char *dictionary, char *section, char *key);

    其中,dictionary是字典文件名;section是分節名,如上面的[app];key爲指定的文字信息標識;返回值爲字典庫中對應的文字信息。至於具體實現,可以根據實際情況而定。其實,很多開發工具都提供了類似的API,我們只要在其基礎上作簡單封裝即可。
  

3、程序中調用
  程序中需要使用文字信息時,直接調用get_dictionary()即可得到所需的文字。然而,某些情況下需要使用常量形式的文字信息,比如初始化結構或類時。這時,使用API就不可以了。但我們可以使用宏定義來達到此類目的,宏的定義與如下形式相似:

#define GET_DICTIONARY(key) get_dictionary("app.dic", "app", key)

  這樣,不管是常量還是變量字符串,我們都可以使用GET_DICTIONARY來給賦值。

4、一個簡單的例子
  1. /*
  2.  *  demo.dic
  3.  */
  4. [demo]
  5. DEMO_ZH=這是一個演示
  6. DEMO_US=this is a demo
  7. /*
  8.  *  dict.h
  9.  */
  10. #ifndef _DICT_H
  11. #define _DICT_H
  12. inline char *get_dictionary(char *dictionary, char *section, char *key)
  13. {
  14.     //根據具體情況實現
  15. }
  16. #endif
  17. /*
  18.  *  demo.c
  19.  */
  20. #include "dict.h"
  21. #define GET_DICTIONARY(key) get_dictionary("demo.dic", "demo", key)
  22. int main(int argc, char *argv[])
  23. {
  24.     printf("%s/n", GET_DICTIONARY("DEMO_ZH"));
  25.     printf("%s/n", GET_DICTIONARY("DEMO_US"));
  26.     return 0;
  27. }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章