作者itoc (不太發展實驗室), 信區: plan
標題[功能] 多樣語系檔或使用者自定theme
時間Thu Sep 5 11:09:56 2002 Updated: 2005/04/30
※ 引述《LinuxBoy (-TMA-1-)》之銘言:
> 小弟站上使用者最近提出一個問題..
> 小弟想到的做法是將所有文字的部份通通另外寫進一個檔案裡面,然後
> 依照使用者個人的設定載入。
: global.h
- #undef VAR
- #undef INI
: theme.h
就把 #define xxx 改成 VAR char *xxx INI(),例如
- #define FEETER_CLASS COLOR1 " 看板選擇 " COLOR2 " (c)新文章 ..."
+ VAR char *FEETER_CLASS INI(COLOR1 " 看板選擇 " COLOR2 " (c)新文章 ...");
- #define FEETER_ULIST COLOR1 " 網友列表 " COLOR2 " (f)好友 ..."
+ VAR char *FEETER_ULIST INI(COLOR1 " 網友列表 " COLOR2 " (f)好友 ...");
所有的 NECKER_* FOOTER_* FEETER_* VMSG_NULL ICON_* TOKEN_* 都要改
: src/include/theme.1 新增此檔案
就是把剛才有改的,依序通通寫在這裡面,一個一行
在這檔案裡面寫的可以跟剛才改的文字是不一樣的 (也就是另外一個佈景主題)
"\033[1;37;44m 選擇看板 \033[0;30;47m c:新文章 vV:已讀未讀 ....\033[m"
"\033[1;37;44m 網友狀況 \033[0;30;47m f:好友 t:聊天 ....\033[m"
: src/include/theme.2 新增此檔案
和 src/include/theme.1 一樣的格式,可以造另外一套顏色、文字的佈景主題
: bbsd.c:load_theme() 新增此函式於 tn_login() 前面
#define MAX_MSG 500 /* 假設全部程式有 500 個 message */
#define LOAD_THEME(x, i) if (all_msg[i][0]) x = all_msg[i]
static void
load_theme() /* 載入語系檔 */
{
int i;
char *fpath, ans[3];
FILE *fp;
static char all_msg[MAX_MSG][80];
/* 選擇語系檔 */
switch (vget(b_lines, 0, "使用哪一套佈景主題(1-2)? ", ans, 3, DOECHO))
{
case '1':
fpath = "src/include/theme.1";
break;
case '2':
fpath = "src/include/theme.2";
break;
default:
return;
}
/* 載入語系檔 */
if (fp = fopen(fpath, "r"))
{
for (i = 0; i < MAX_MSG; i++)
{
if (!fgets(all_msg[i], sizeof(all_msg[i]), fp))
break;
}
fclose(fp);
}
// 把前面有改的全部依序寫在下來,
// 0就是讀語系檔的第一行,1就是讀語系檔的第二行,依此類推
/* 把所有的 msg 都指向 all_msg[][] */
LOAD_THEME(FEETER_CLASS, 0);
LOAD_THEME(FEETER_ULIST, 1);
...
...
}
: bbsd.c:tn_login()
multi = login_user(buf);
+ load_theme();
---
這樣的話,程式可以改很少,就只要改 theme.h 及 bbsd.c:load_theme()
和編修 theme.1 theme.2 theme.3 等語系檔
global.h 也可以比照辦理
--
□ 本文章由 itoc 從 140.113.128.124 發表