回精華區
作者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 也可以比照辦理

--
□ 本文章由 itoc140.113.128.124 發表
精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻