- /*
- * demo.dic
- */
- [demo]
- DEMO_ZH=這是一個演示
- DEMO_US=this is a demo
- /*
- * dict.h
- */
- #ifndef _DICT_H
- #define _DICT_H
- inline char *get_dictionary(char *dictionary, char *section, char *key)
- {
- //根據具體情況實現
- }
- #endif
- /*
- * demo.c
- */
- #include "dict.h"
- #define GET_DICTIONARY(key) get_dictionary("demo.dic", "demo", key)
- int main(int argc, char *argv[])
- {
- printf("%s/n", GET_DICTIONARY("DEMO_ZH"));
- printf("%s/n", GET_DICTIONARY("DEMO_US"));
- return 0;
- }
-
一種程序界面文字換膚方法
一種程序界面文字換膚方法
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、一個簡單的例子
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.