aboutsummaryrefslogtreecommitdiff
path: root/chinese
diff options
context:
space:
mode:
authorVanilla I. Shu <vanilla@FreeBSD.org>1998-02-02 14:34:45 +0000
committerVanilla I. Shu <vanilla@FreeBSD.org>1998-02-02 14:34:45 +0000
commit235753a06f8e94291a033e41cb5fe094eb0ab124 (patch)
treeb1b131b89f6806ba7d1e089222d827dc545d2768 /chinese
parent73af0ce231281496b7465af938f6a4864ae3d7a1 (diff)
downloadports-235753a06f8e94291a033e41cb5fe094eb0ab124.tar.gz
ports-235753a06f8e94291a033e41cb5fe094eb0ab124.zip
Notes
Diffstat (limited to 'chinese')
-rw-r--r--chinese/pine4/files/patch-an40
-rw-r--r--chinese/pine4/files/patch-ao47
-rw-r--r--chinese/pine4/files/patch-ap20
-rw-r--r--chinese/pine4/files/patch-aq57
-rw-r--r--chinese/pine4/files/patch-ar8
-rw-r--r--chinese/pine4/files/patch-as84
-rw-r--r--chinese/pine4/files/patch-au48
-rw-r--r--chinese/pine4/files/patch-av120
-rw-r--r--chinese/pine4/files/patch-aw24
-rw-r--r--chinese/pine4/files/patch-ax16
-rw-r--r--chinese/pine4/files/patch-ay878
-rw-r--r--chinese/pine4/files/patch-az151
-rw-r--r--chinese/pine4/files/patch-ba173
-rw-r--r--chinese/pine4/files/patch-bb128
-rw-r--r--chinese/pine4/files/patch-bc71
-rw-r--r--chinese/pine4/files/patch-bd180
-rw-r--r--chinese/pine4/files/patch-be395
-rw-r--r--chinese/pine4/files/patch-bf142
-rw-r--r--chinese/pine4/files/patch-bg11
-rw-r--r--chinese/pine4/files/patch-bh20
-rw-r--r--chinese/pine4/files/patch-bi31
-rw-r--r--chinese/pine4/files/patch-bj13
-rw-r--r--chinese/pine4/pkg-plist1
23 files changed, 2623 insertions, 35 deletions
diff --git a/chinese/pine4/files/patch-an b/chinese/pine4/files/patch-an
index b3babb7c1407..c0b69d687620 100644
--- a/chinese/pine4/files/patch-an
+++ b/chinese/pine4/files/patch-an
@@ -1,8 +1,32 @@
---- pico/estruct.h.orig Sat Dec 28 02:40:35 1996
-+++ pico/estruct.h Sat Dec 28 02:41:45 1996
-@@ -114,6 +114,6 @@
- #define LOBIT_CHAR(C) ((C) > 0x1f && (C) < 0x7f)
- #define HIBIT_CHAR(C) ((C) > 0x7f && (C) <= 0xff)
- #define HIBIT_OK(C) (!(gmode & MDHBTIGN))
--#define VALID_KEY(C) (LOBIT_CHAR(C) || (HIBIT_OK(C) && HIBIT_CHAR(C)))
-+#define VALID_KEY(ch) (((ch) & 0x80) ? 1 : LOBIT_CHAR(ch))
+*** pico/os_unix.h.orig Thu Jun 13 00:47:23 1996
+--- pico/os_unix.h Thu Jan 29 21:29:51 1998
+***************
+*** 122,133 ****
+ /*
+ * Place where mail gets delivered (for pico's new mail checking)
+ */
+ #if defined(sv3) || defined(ct) || defined(isc) || defined(AUX) || defined(sgi)
+ #define MAILDIR "/usr/mail"
+ #else
+ #define MAILDIR "/usr/spool/mail"
+ #endif
+!
+
+ /*
+ * What and where the tool that checks spelling is located. If this is
+--- 122,136 ----
+ /*
+ * Place where mail gets delivered (for pico's new mail checking)
+ */
++ #ifdef __FreeBSD__
++ #define MAILDIR "/var/mail"
++ #else
+ #if defined(sv3) || defined(ct) || defined(isc) || defined(AUX) || defined(sgi)
+ #define MAILDIR "/usr/mail"
+ #else
+ #define MAILDIR "/usr/spool/mail"
+ #endif
+! #endif
+
+ /*
+ * What and where the tool that checks spelling is located. If this is
diff --git a/chinese/pine4/files/patch-ao b/chinese/pine4/files/patch-ao
index 1f4060e2be98..ae0d6d6574cb 100644
--- a/chinese/pine4/files/patch-ao
+++ b/chinese/pine4/files/patch-ao
@@ -1,27 +1,20 @@
---- pine/send.c.orig Tue Jul 9 02:10:50 1996
-+++ pine/send.c Sat Dec 28 02:36:30 1996
-@@ -49,6 +49,11 @@
- #include "headers.h"
- #include "../c-client/smtp.h"
- #include "../c-client/nntp.h"
-+/*
-+woju
-+disable bitstrip, keep 8-bit clean
-+*/
-+#define bitstrip(x) (x)
-
-
- #ifndef TCPSTREAM
-@@ -5427,6 +5432,12 @@
-
- if(body->encoding == ENCOTHER)
- body->encoding = new_encoding;
-+/*
-+woju
-+disable qp-encode
-+*/
-+ if (body->encoding == ENC8BIT)
-+ body->encoding = 0;
-
- #ifndef DOS
- fs_give((void **)&buf);
+*** pico/tcap.c.bak Fri Mar 15 10:42:31 1996
+--- pico/tcap.c Thu Jan 29 22:04:28 1998
+***************
+*** 322,328 ****
+ KPPU = tgetstr("kP", &p);
+ KPPD = tgetstr("kN", &p);
+ KPHOME = tgetstr("kh", &p);
+! KPEND = tgetstr("kE", &p);
+ KPDEL = tgetstr("kD", &p);
+ KU = tgetstr("ku", &p);
+ KD = tgetstr("kd", &p);
+--- 322,329 ----
+ KPPU = tgetstr("kP", &p);
+ KPPD = tgetstr("kN", &p);
+ KPHOME = tgetstr("kh", &p);
+! if((KPEND = tgetstr("@7", &p)) == NULL)
+! KPEND = tgetstr("kE", &p);
+ KPDEL = tgetstr("kD", &p);
+ KU = tgetstr("ku", &p);
+ KD = tgetstr("kd", &p);
diff --git a/chinese/pine4/files/patch-ap b/chinese/pine4/files/patch-ap
new file mode 100644
index 000000000000..4a7155a3732d
--- /dev/null
+++ b/chinese/pine4/files/patch-ap
@@ -0,0 +1,20 @@
+*** pine/ttyout.c.bak Thu Jul 11 05:45:56 1996
+--- pine/ttyout.c Thu Jan 29 22:17:48 1998
+***************
+*** 289,295 ****
+ _kppu = tgetstr("kP", &ptr);
+ _kppd = tgetstr("kN", &ptr);
+ _kphome = tgetstr("kh", &ptr);
+! _kpend = tgetstr("kE", &ptr);
+ _kpdel = tgetstr("kD", &ptr);
+ _kf1 = tgetstr("k1", &ptr);
+ _kf2 = tgetstr("k2", &ptr);
+--- 289,296 ----
+ _kppu = tgetstr("kP", &ptr);
+ _kppd = tgetstr("kN", &ptr);
+ _kphome = tgetstr("kh", &ptr);
+! if((_kpend = tgetstr("@7", &ptr)) == NULL)
+! _kpend = tgetstr("kE", &ptr);
+ _kpdel = tgetstr("kD", &ptr);
+ _kf1 = tgetstr("k1", &ptr);
+ _kf2 = tgetstr("k2", &ptr);
diff --git a/chinese/pine4/files/patch-aq b/chinese/pine4/files/patch-aq
new file mode 100644
index 000000000000..d90d3d3f065c
--- /dev/null
+++ b/chinese/pine4/files/patch-aq
@@ -0,0 +1,57 @@
+*** pico/display.c.bak Wed Jul 10 20:59:09 1996
+--- pico/display.c Thu Jan 29 23:06:07 1998
+***************
+*** 82,88 ****
+ {"^X", "Exit", KS_EXIT}, {"^J", "Justify", KS_JUSTIFY},
+ {"^W", "Where is", KS_WHEREIS}, {"^V", "Next Pg", KS_NEXTPAGE},
+ {"^U", NULL, KS_NONE},
+! #ifdef SPELLER
+ {"^T", "To Spell", KS_SPELLCHK}
+ #else
+ {"^D", "Del Char", KS_NONE}
+--- 82,88 ----
+ {"^X", "Exit", KS_EXIT}, {"^J", "Justify", KS_JUSTIFY},
+ {"^W", "Where is", KS_WHEREIS}, {"^V", "Next Pg", KS_NEXTPAGE},
+ {"^U", NULL, KS_NONE},
+! #if defined(SPELLER) && !defined(__FreeBSD__)
+ {"^T", "To Spell", KS_SPELLCHK}
+ #else
+ {"^D", "Del Char", KS_NONE}
+*** pico/ebind.h.bak Fri Mar 15 10:41:58 1996
+--- pico/ebind.h Thu Jan 29 23:04:30 1998
+***************
+*** 145,151 ****
+ {CTRL|'O', filewrite},
+ {CTRL|'P', backline},
+ {CTRL|'R', insfile},
+! #ifdef SPELLER
+ {CTRL|'T', spell},
+ #endif /* SPELLER */
+ {CTRL|'U', yank},
+--- 145,151 ----
+ {CTRL|'O', filewrite},
+ {CTRL|'P', backline},
+ {CTRL|'R', insfile},
+! #if defined(SPELLER) && !defined(__FreeBSD__)
+ {CTRL|'T', spell},
+ #endif /* SPELLER */
+ {CTRL|'U', yank},
+*** pico/main.c.bak Wed May 29 04:05:27 1996
+--- pico/main.c Thu Jan 29 23:04:30 1998
+***************
+*** 72,78 ****
+ { F9, (CTRL|'K')},
+ { F10, (CTRL|'U')},
+ { F11, (CTRL|'C')},
+! #ifdef SPELLER
+ { F12, (CTRL|'T')}
+ #else
+ { F12, (CTRL|'D')}
+--- 72,78 ----
+ { F9, (CTRL|'K')},
+ { F10, (CTRL|'U')},
+ { F11, (CTRL|'C')},
+! #if defined(SPELLER) && !defined(__FreeBSD__)
+ { F12, (CTRL|'T')}
+ #else
+ { F12, (CTRL|'D')}
diff --git a/chinese/pine4/files/patch-ar b/chinese/pine4/files/patch-ar
new file mode 100644
index 000000000000..b3babb7c1407
--- /dev/null
+++ b/chinese/pine4/files/patch-ar
@@ -0,0 +1,8 @@
+--- pico/estruct.h.orig Sat Dec 28 02:40:35 1996
++++ pico/estruct.h Sat Dec 28 02:41:45 1996
+@@ -114,6 +114,6 @@
+ #define LOBIT_CHAR(C) ((C) > 0x1f && (C) < 0x7f)
+ #define HIBIT_CHAR(C) ((C) > 0x7f && (C) <= 0xff)
+ #define HIBIT_OK(C) (!(gmode & MDHBTIGN))
+-#define VALID_KEY(C) (LOBIT_CHAR(C) || (HIBIT_OK(C) && HIBIT_CHAR(C)))
++#define VALID_KEY(ch) (((ch) & 0x80) ? 1 : LOBIT_CHAR(ch))
diff --git a/chinese/pine4/files/patch-as b/chinese/pine4/files/patch-as
new file mode 100644
index 000000000000..854046b5d8d6
--- /dev/null
+++ b/chinese/pine4/files/patch-as
@@ -0,0 +1,84 @@
+--- pine/send.c.orig Sat Jan 17 19:54:07 1998
++++ pine/send.c Sat Jan 17 21:22:38 1998
+@@ -50,6 +50,7 @@
+ #include "../c-client/smtp.h"
+ #include "../c-client/nntp.h"
+
++#define bitstrip(x) (x)
+
+ #ifndef TCPSTREAM
+ #define TCPSTREAM void
+@@ -1076,31 +1077,31 @@
+ */
+ static struct headerentry he_template[]={
+ {"From : ", "From", h_composer_from, 10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_TOADDRBOOK},
+ {"Reply-To: ", "Reply To", h_composer_reply_to, 10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_TOADDRBOOK},
+ {"To : ", "To", h_composer_to, 10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 0, 0, 1, 0, 0, 0, KS_TOADDRBOOK},
+ {"Cc : ", "Cc", h_composer_cc, 10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 0, 0, 1, 0, 0, 0, KS_TOADDRBOOK},
+ {"Bcc : ", "Bcc", h_composer_bcc, 10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_TOADDRBOOK},
+ {"Newsgrps: ", "Newsgroups", h_composer_news, 10, 0, NULL,
+- news_build, NULL, NULL, news_group_selector, "To NwsGrps",
++ news_build, NULL, NULL, news_group_selector, "新聞組群列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_NONE},
+ {"Fcc : ", "Fcc", h_composer_fcc, 10, 0, NULL,
+- NULL, NULL, NULL, folders_for_fcc, "To Fldrs",
++ NULL, NULL, NULL, folders_for_fcc, "信夾列表",
+ 0, 0, 0, 1, 1, 1, 0, 0, 0, KS_NONE},
+ {"Lcc : ", "Lcc", h_composer_lcc, 10, 0, NULL,
+- build_addr_lcc, NULL, NULL, addr_book_compose_lcc,"To AddrBk",
++ build_addr_lcc, NULL, NULL, addr_book_compose_lcc,"地址列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_NONE},
+ {"Attchmnt: ", "Attchmnt", h_composer_attachment, 10, 0, NULL,
+- NULL, NULL, NULL, NULL, "To Files",
++ NULL, NULL, NULL, NULL, "檔案列表",
+ 0, 1, 1, 0, 0, 1, 0, 0, 0, KS_NONE},
+ {"Subject : ", "Subject", h_composer_subject, 10, 0, NULL,
+ valid_subject, NULL, NULL, NULL, NULL,
+@@ -1132,7 +1133,7 @@
+
+ static struct headerentry he_custom_addr_templ={
+ NULL, NULL, h_composer_custom_addr,10, 0, NULL,
+- build_address, NULL, NULL, addr_book_compose, "To AddrBk",
++ build_address, NULL, NULL, addr_book_compose, "地址列表",
+ 0, 1, 0, 1, 0, 1, 0, 0, 0, KS_TOADDRBOOK};
+ static struct headerentry he_custom_free_templ={
+ NULL, NULL, h_composer_custom_free,10, 0, NULL,
+@@ -1407,7 +1408,7 @@
+ ekey[0].ch = ctrl('T');
+ ekey[0].rval = 2;
+ ekey[0].name = "^T";
+- ekey[0].label = "To AddrBk";
++ ekey[0].label = "地址列表";
+ ekey[1].ch = -1;
+
+ /*----------------------------------------------------------------------
+@@ -3419,12 +3420,12 @@
+ opts[i].ch = 'y';
+ opts[i].rval = 'y';
+ opts[i].name = "Y";
+- opts[i++].label = "Yes";
++ opts[i++].label = "是";
+
+ opts[i].ch = 'n';
+ opts[i].rval = 'n';
+ opts[i].name = "N";
+- opts[i++].label = "No";
++ opts[i++].label = "否";
+
+ if(filters){
+ /* set global_filter_pointer to desired filter or NULL if none */
diff --git a/chinese/pine4/files/patch-au b/chinese/pine4/files/patch-au
new file mode 100644
index 000000000000..e94ec47a26be
--- /dev/null
+++ b/chinese/pine4/files/patch-au
@@ -0,0 +1,48 @@
+--- pico/composer.c.orig Sat Jan 17 20:06:00 1998
++++ pico/composer.c Sat Jan 17 20:09:52 1998
+@@ -164,12 +164,12 @@
+
+
+ static KEYMENU menu_header[] = {
+- {"^G", "Get Help", KS_SCREENHELP}, {"^X", "Send", KS_SEND},
+- {"^R", "Rich Hdr", KS_RICHHDR}, {"^Y", "PrvPg/Top", KS_PREVPAGE},
+- {"^K", "Cut Line", KS_CURPOSITION}, {"^O", "Postpone", KS_POSTPONE},
+- {"^C", "Cancel", KS_CANCEL}, {"^D", "Del Char", KS_NONE},
+- {"^J", "Attach", KS_ATTACH}, {"^V", "NxtPg/End", KS_NEXTPAGE},
+- {"^U", "UnDel Line", KS_NONE}, {NULL, NULL}
++ {"^G", "輔助說明", KS_SCREENHELP}, {"^X", "送出", KS_SEND},
++ {"^R", "完整標頭", KS_RICHHDR}, {"^Y", "上一頁", KS_PREVPAGE},
++ {"^K", "剪下一行", KS_CURPOSITION}, {"^O", "暫緩寫信", KS_POSTPONE},
++ {"^C", "取消", KS_CANCEL}, {"^D", "刪除字元", KS_NONE},
++ {"^J", "夾附件", KS_ATTACH}, {"^V", "下一頁", KS_NEXTPAGE},
++ {"^U", "恢復刪除", KS_NONE}, {NULL, NULL}
+ };
+ #define SEND_KEY 1
+ #define RICH_KEY 2
+@@ -3110,22 +3110,22 @@
+ menu_header[DEL_KEY].name = NULL;
+ menu_header[UDEL_KEY].name = NULL;
+ menu_header[SEND_KEY].label = (gmode & MDHDRONLY)
+- ? "eXit/Save" : "eXit";
++ ? "離開/儲存" : "離開";
+ }
+ else{
+ menu_header[CUT_KEY].name = "^K";
+ menu_header[DEL_KEY].name = "^D";
+ menu_header[UDEL_KEY].name = "^U";
+- menu_header[SEND_KEY].label = "Send";
++ menu_header[SEND_KEY].label = "送出";
+ }
+
+ if(gmode & MDHDRONLY){
+- menu_header[RICH_KEY].label = "RichView";
++ menu_header[RICH_KEY].label = "完整標頭";
+ menu_header[PONE_KEY].name = NULL;
+ menu_header[ATT_KEY].name = NULL;
+ }
+ else{
+- menu_header[RICH_KEY].label = "Rich Hdr";
++ menu_header[RICH_KEY].label = "完整標頭";
+ menu_header[PONE_KEY].name = "^O";
+ menu_header[ATT_KEY].name = "^J";
+ }
diff --git a/chinese/pine4/files/patch-av b/chinese/pine4/files/patch-av
new file mode 100644
index 000000000000..4cf184942472
--- /dev/null
+++ b/chinese/pine4/files/patch-av
@@ -0,0 +1,120 @@
+--- pico/display.c.orig Sat Jan 31 15:57:10 1998
++++ pico/display.c Sat Jan 31 16:07:16 1998
+@@ -76,32 +76,32 @@
+ * Standard pico keymenus...
+ */
+ static KEYMENU menu_pico[] = {
+- {"^G", "Get Help", KS_SCREENHELP}, {"^O", "WriteOut", KS_SAVEFILE},
+- {"^R", "Read File", KS_READFILE}, {"^Y", "Prev Pg", KS_PREVPAGE},
+- {"^K", "Cut Text", KS_NONE}, {"^C", "Cur Pos", KS_CURPOSITION},
+- {"^X", "Exit", KS_EXIT}, {"^J", "Justify", KS_JUSTIFY},
+- {"^W", "Where is", KS_WHEREIS}, {"^V", "Next Pg", KS_NEXTPAGE},
++ {"^G", "輔助說明", KS_SCREENHELP}, {"^O", "暫停工作", KS_SAVEFILE},
++ {"^R", "讀取檔案", KS_READFILE}, {"^Y", "上一頁", KS_PREVPAGE},
++ {"^K", "剪下一行", KS_NONE}, {"^C", "目前位置", KS_CURPOSITION},
++ {"^X", "離開", KS_EXIT}, {"^J", "重整段落", KS_JUSTIFY},
++ {"^W", "搜尋", KS_WHEREIS}, {"^V", "下一頁", KS_NEXTPAGE},
+ {"^U", NULL, KS_NONE},
+ #if defined(SPELLER) && !defined(__FreeBSD__)
+- {"^T", "To Spell", KS_SPELLCHK}
++ {"^T", "拼字檢查", KS_SPELLCHK}
+ #else
+- {"^D", "Del Char", KS_NONE}
++ {"^D", "刪除字元", KS_NONE}
+ #endif
+ };
+ #define UNCUT_KEY 10
+
+
+ static KEYMENU menu_compose[] = {
+- {"^G", "Get Help", KS_SCREENHELP}, {"^X", NULL, KS_SEND},
+- {"^R", "Read File", KS_READFILE}, {"^Y", "Prev Pg", KS_PREVPAGE},
+- {"^K", "Cut Text", KS_NONE}, {"^O", "Postpone", KS_POSTPONE},
+- {"^C", "Cancel", KS_CANCEL}, {"^J", "Justify", KS_JUSTIFY},
+- {NULL, NULL, KS_NONE}, {"^V", "Next Pg", KS_NEXTPAGE},
++ {"^G", "輔助說明", KS_SCREENHELP}, {"^X", NULL, KS_SEND},
++ {"^R", "讀取檔案", KS_READFILE}, {"^Y", "上一頁", KS_PREVPAGE},
++ {"^K", "剪下一行", KS_NONE}, {"^O", "暫緩寫信", KS_POSTPONE},
++ {"^C", "取消", KS_CANCEL}, {"^J", "重整段落", KS_JUSTIFY},
++ {NULL, NULL, KS_NONE}, {"^V", "下一頁", KS_NEXTPAGE},
+ {"^U", NULL, KS_NONE},
+ #ifdef SPELLER
+- {"^T", "To Spell", KS_SPELLCHK}
++ {"^T", "拼字檢查", KS_SPELLCHK}
+ #else
+- {"^D", "Del Char", KS_NONE}
++ {"^D", "刪除字元", KS_NONE}
+ #endif
+ };
+ #define EXIT_KEY 1
+@@ -737,12 +737,12 @@
+ }
+
+ if(lastflag&CFFILL){
+- menu_pico[UNCUT_KEY].label = "UnJustify";
++ menu_pico[UNCUT_KEY].label = "取消重整";
+ emlwrite("Can now UnJustify!", NULL);
+ mpresf = HUGE; /* remove this after next keystroke! */
+ }
+ else
+- menu_pico[UNCUT_KEY].label = "UnCut Text";
++ menu_pico[UNCUT_KEY].label = "復原刪字";
+
+ wkeyhelp(menu_pico);
+ sgarbk = FALSE;
+@@ -932,18 +932,18 @@
+ ShowPrompt();
+ else{
+ menu_compose[EXIT_KEY].label = (Pmaster->headents)
+- ? "Send" :"Exit";
++ ? "送出" :"離開";
+ menu_compose[PSTPN_KEY].name = (Pmaster->headents)
+ ? "^O" : NULL;
+ menu_compose[PSTPN_KEY].label = (Pmaster->headents)
+- ? "Postpone" : NULL;
++ ? "暫緩寫信" : NULL;
+ menu_compose[WHERE_KEY].name = (Pmaster->alt_ed) ? "^_" : "^W";
+ menu_compose[WHERE_KEY].label = (Pmaster->alt_ed) ? "Alt Edit"
+- : "Where is";
++ : "搜尋";
+ KS_OSDATASET(&menu_compose[WHERE_KEY],
+ (Pmaster->alt_ed) ? KS_ALTEDITOR : KS_WHEREIS);
+- menu_compose[UNCUT_KEY].label = (thisflag&CFFILL) ? "UnJustify"
+- : "UnCut Text";
++ menu_compose[UNCUT_KEY].label = (thisflag&CFFILL) ? "取消重整"
++ : "復原刪字";
+ wkeyhelp(menu_compose);
+ #ifdef _WINDOWS
+ /* When alt editor is available "Where is" is not on the menu
+@@ -1134,11 +1134,11 @@
+ }
+
+ menu_yesno[1].name = "Y";
+- menu_yesno[1].label = (dflt == TRUE) ? "[Yes]" : "Yes";
++ menu_yesno[1].label = (dflt == TRUE) ? "[是]" : "是";
+ menu_yesno[6].name = "^C";
+ menu_yesno[6].label = "Cancel";
+ menu_yesno[7].name = "N";
+- menu_yesno[7].label = (dflt == FALSE) ? "[No]" : "No";
++ menu_yesno[7].label = (dflt == FALSE) ? "[否]" : "否";
+ wkeyhelp(menu_yesno); /* paint generic menu */
+ sgarbk = TRUE; /* mark menu dirty */
+ if(Pmaster && curwp)
+@@ -1304,7 +1304,7 @@
+ #endif
+
+ menu_mlreply[0].name = "^G";
+- menu_mlreply[0].label = "Get Help";
++ menu_mlreply[0].label = "輔助說明";
+ KS_OSDATASET(&menu_mlreply[0], KS_SCREENHELP);
+ for(j = 0, i = 1; i < 6; i++){ /* insert odd extras */
+ menu_mlreply[i].name = NULL;
+@@ -1324,7 +1324,7 @@
+ }
+
+ menu_mlreply[6].name = "^C";
+- menu_mlreply[6].label = "Cancel";
++ menu_mlreply[6].label = "取消";
+ KS_OSDATASET(&menu_mlreply[6], KS_NONE);
+ for(j = 0, i = 7; i < 12; i++){ /* insert even extras */
+ menu_mlreply[i].name = NULL;
diff --git a/chinese/pine4/files/patch-aw b/chinese/pine4/files/patch-aw
new file mode 100644
index 000000000000..6b6fae07015d
--- /dev/null
+++ b/chinese/pine4/files/patch-aw
@@ -0,0 +1,24 @@
+--- pico/pico.c.orig Sat Jan 17 20:21:35 1998
++++ pico/pico.c Sat Jan 17 20:23:21 1998
+@@ -585,17 +585,17 @@
+ }
+ }
+ else switch(mlyesno(Pmaster->headents
+- ? "Cancel message (answering \"Yes\" will abandon your mail message)"
++ ? "\"取消\"這個動作將會放棄你目前的信件. 取消嗎 ?"
+ : (anycb() == FALSE)
+- ? "Cancel Edit (and abandon changes)"
+- : "Cancel Edit",
++ ? "取消編輯(並放棄所有的改變)"
++ : "取消編輯",
+ FALSE)){
+ case TRUE:
+ pico_all_done = COMP_CANCEL;
+ return(TRUE);
+
+ case ABORT:
+- emlwrite("\007Cancel Cancelled", NULL);
++ emlwrite("\007取消", NULL);
+ break;
+
+ default:
diff --git a/chinese/pine4/files/patch-ax b/chinese/pine4/files/patch-ax
new file mode 100644
index 000000000000..ef3ffa3e750c
--- /dev/null
+++ b/chinese/pine4/files/patch-ax
@@ -0,0 +1,16 @@
+--- pico/search.c.orig Sat Jan 17 20:23:39 1998
++++ pico/search.c Sat Jan 17 20:24:28 1998
+@@ -222,11 +222,11 @@
+ EXTRAKEYS menu_pat[3];
+
+ menu_pat[0].name = "^Y";
+- menu_pat[0].label = "FirstLine";
++ menu_pat[0].label = "第一行";
+ menu_pat[0].key = (CTRL|'Y');
+ KS_OSDATASET(&menu_pat[0], KS_NONE);
+ menu_pat[1].name = "^V";
+- menu_pat[1].label = "LastLine";
++ menu_pat[1].label = "最後一行";
+ menu_pat[1].key = (CTRL|'V');
+ KS_OSDATASET(&menu_pat[1], KS_NONE);
+ menu_pat[2].name = NULL;
diff --git a/chinese/pine4/files/patch-ay b/chinese/pine4/files/patch-ay
new file mode 100644
index 000000000000..0386a9814fc9
--- /dev/null
+++ b/chinese/pine4/files/patch-ay
@@ -0,0 +1,878 @@
+--- pine/addrbook.c.orig Sat Jan 17 20:28:24 1998
++++ pine/addrbook.c Sat Jan 17 21:01:08 1998
+@@ -514,9 +514,9 @@
+
+ #define CLICKHERE "[ Select Here to See Expanded List ]"
+ #define NO_PERMISSION "[ Permission Denied ]"
+-#define EMPTY "[ Empty ]"
+-#define READONLY "(ReadOnly)"
+-#define NOACCESS "(Un-readable)"
++#define EMPTY "[ 沒有任何項目 ]"
++#define READONLY "(唯讀)"
++#define NOACCESS "(無法讀取)"
+ #define DISTLIST "DISTRIBUTION LIST:"
+
+ #define MAX_FCC MAX_ADDRESS
+@@ -760,7 +760,7 @@
+ readonly_warning(NO_DING, NULL);
+ else if(pab->access == NoAccess)
+ q_status_message(SM_ORDER, 0, 4,
+- "AddressBook not accessible, permission denied");
++ "禁止存取地址簿");
+ }
+
+ /*
+@@ -921,7 +921,7 @@
+
+ dprint(2, (debugfile, "parse_format: ignoring unrecognized word \"%s\" in address-book-formats\n", p));
+ q_status_message1(SM_ORDER, warnings++==0 ? 1 : 0, 4,
+- "Ignoring unrecognized word \"%s\" in address-book-formats", p);
++ "在地址簿格式中忽略無法辨識的字 \"%s\"", p);
+ /* put back space */
+ if(r)
+ *r = SPACE;
+@@ -991,7 +991,7 @@
+
+ if(column == 0){
+ q_status_message(SM_ORDER, 0, 4,
+- "address-book-formats has no recognizable words, using default format");
++ "由於在地址簿格式中找不到足以辨識的字, 因此使用預設模式");
+ goto assign_default;
+ }
+
+@@ -1526,7 +1526,7 @@
+ if(want_status == Open){
+ new_status = HalfOpen; /* best we can do */
+ q_status_message1(SM_ORDER | SM_DING, *warning?1:3, 4,
+- "Error opening/creating address book %s",
++ "於開啟/建立在地址簿 %s 時發生錯誤",
+ pab->nickname);
+ if(*warning)
+ q_status_message2(SM_ORDER, 3, 4, "%s: %s",
+@@ -1603,7 +1603,7 @@
+ if(want_status == Open){
+ new_status = HalfOpen; /* best we can do */
+ q_status_message1(SM_ORDER | SM_DING, 3, 4,
+- "Insufficient permissions for opening address book %s",
++ "沒有足夠的權限開啟地址簿 %s",
+ pab->nickname);
+ }
+ else
+@@ -3929,7 +3929,7 @@
+ mailcap_free(); /* free resources we won't be using for a while */
+
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "重設地址簿...");
+ dprint(1, (debugfile, "RESETTING address book... addr_book_screen!\n"));
+ addrbook_reset();
+ }
+@@ -3959,7 +3959,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book... addr_book_compose!\n"));
+ addrbook_reset();
+@@ -4000,7 +4000,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book... addr_book_compose_lcc!\n"));
+ addrbook_reset();
+@@ -4034,7 +4034,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book... addr_book_change_list!\n"));
+ addrbook_reset();
+@@ -4081,7 +4081,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book...addr_book_takeaddr!\n"));
+ addrbook_reset();
+@@ -4112,7 +4112,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book...addr_book_nick_for_edit!\n"));
+ addrbook_reset();
+@@ -4143,7 +4143,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book...addr_book_selnick!\n"));
+ addrbook_reset();
+@@ -4174,7 +4174,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book...addr_book_seladdr!\n"));
+ addrbook_reset();
+@@ -4206,7 +4206,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile,"RESETTING address book...addr_book_seladdr_nofull!\n"));
+ addrbook_reset();
+@@ -4237,7 +4237,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1,
+ (debugfile, "RESETTING address book...addr_book_manynicks!\n"));
+ addrbook_reset();
+@@ -4249,18 +4249,18 @@
+
+
+ static struct key ab_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"P","PrevEntry",KS_NONE}, {"N","NextEntry",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"D","Delete",KS_DELETE}, {"A","AddNew",KS_NONE},
+- {"C","ComposeTo",KS_COMPOSER}, {"W","WhereIs",KS_WHEREIS},
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT}, {NULL,NULL,KS_NONE},
+- {"L","ListFldrs",KS_FLDRLIST}, {"G","GotoFldr",KS_GOTOFLDR},
+- {"I","Index",KS_FLDRINDEX}, {NULL,NULL,KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"T","TakeAddr",KS_TAKEADDR},
+- {"X","eXport",KS_EXPORT}, {"F","Forward",KS_NONE}};
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"D","刪除",KS_DELETE}, {"A","加入",KS_NONE},
++ {"C","寫信",KS_COMPOSER}, {"W","搜尋",KS_WHEREIS},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT}, {NULL,NULL,KS_NONE},
++ {"L","列出信件夾",KS_FLDRLIST}, {"G","進入信件夾",KS_GOTOFLDR},
++ {"I","索引",KS_FLDRINDEX}, {NULL,NULL,KS_NONE},
++ {"Y","列印",KS_PRINT}, {"T","取得地址",KS_TAKEADDR},
++ {"X","匯出",KS_EXPORT}, {"F","轉寄",KS_NONE}};
+ INST_KEY_MENU(ab_keymenu, ab_keys);
+ #define OTHER_KEY 1
+ #define MAIN_KEY 2
+@@ -4376,7 +4376,7 @@
+ what = FirstMenu;
+
+ if(!init_addrbooks(HalfOpen, 1, 1, !are_selecting)){
+- q_status_message(SM_ORDER | SM_DING,3,4,"No Address Book Configured");
++ q_status_message(SM_ORDER | SM_DING,3,4,"無法找到已設定的地址簿");
+ if(!are_selecting)
+ ps_global->next_screen = ps_global->prev_screen;
+
+@@ -4473,7 +4473,7 @@
+ as.cur = cur_addr_book();
+ pab = &as.adrbks[as.cur];
+ if(as.cur != old_cur)
+- q_status_message1(SM_ORDER, 0, 2, "Now in addressbook %s",
++ q_status_message1(SM_ORDER, 0, 2, "現在正在地址簿 %s 中",
+ pab->nickname);
+ #ifdef _WINDOWS
+ {
+@@ -4506,7 +4506,7 @@
+ as.cur = cur_addr_book();
+ pab = &as.adrbks[as.cur];
+ if(as.cur != old_cur)
+- q_status_message1(SM_ORDER, 0, 2, "Now in addressbook %s",
++ q_status_message1(SM_ORDER, 0, 2, "現在正在地址簿 %s 中",
+ pab->nickname);
+ }
+
+@@ -4531,10 +4531,10 @@
+ if(are_selecting){
+ km->how_many = 1;
+ ab_keys[MAIN_KEY].name = "E";
+- ab_keys[MAIN_KEY].label = "ExitSelect";
++ ab_keys[MAIN_KEY].label = "離開";
+ KS_OSDATASET(&ab_keys[MAIN_KEY], KS_EXITMODE);
+ ab_keys[SELECT_KEY].name = "S";
+- ab_keys[SELECT_KEY].label = "[Select]";
++ ab_keys[SELECT_KEY].label = "[選擇]";
+ def_cmd = F_ON(F_USE_FK,ps_global) ? PF4 : 's';
+ KS_OSDATASET(&ab_keys[SELECT_KEY], KS_NONE);
+ clrbitn(OTHER_KEY, bitmap);
+@@ -4545,18 +4545,18 @@
+ KS_OSDATASET(&ab_keys[DELETE_KEY], KS_NONE);
+ if(as.checkboxes){
+ ab_keys[DELETE_KEY].name = "X";
+- ab_keys[DELETE_KEY].label = "[Set/Unset]";
+- ab_keys[SELECT_KEY].label = "Select";
++ ab_keys[DELETE_KEY].label = "[設定/取消設定]";
++ ab_keys[SELECT_KEY].label = "選擇";
+ def_cmd = F_ON(F_USE_FK,ps_global) ? PF9 : 'x';
+ if(entry_is_clickable(as.top_ent+as.cur_row)){
+ def_cmd = F_ON(F_USE_FK,ps_global) ? PF4 : 's';
+- ab_keys[DELETE_KEY].label = "Set/Unset";
+- ab_keys[SELECT_KEY].label = "[Select]";
++ ab_keys[DELETE_KEY].label = "設定/取消設定";
++ ab_keys[SELECT_KEY].label = "[選擇]";
+ }
+ }
+ else if(listmode_ok){
+ ab_keys[DELETE_KEY].name = "L";
+- ab_keys[DELETE_KEY].label = "ListMode";
++ ab_keys[DELETE_KEY].label = "列表模式";
+ }
+ else
+ clrbitn(DELETE_KEY, bitmap);
+@@ -4564,23 +4564,23 @@
+ else{
+ km->how_many = 2;
+ ab_keys[MAIN_KEY].name = "M";
+- ab_keys[MAIN_KEY].label = "Main Menu";
++ ab_keys[MAIN_KEY].label = "主選單";
+ KS_OSDATASET(&ab_keys[MAIN_KEY], KS_MAINMENU);
+ if(entry_is_clickable(as.top_ent+as.cur_row)){
+ ab_keys[SELECT_KEY].name = "S";
+- ab_keys[SELECT_KEY].label = "[Select]";
++ ab_keys[SELECT_KEY].label = "[選擇]";
+ def_cmd = F_ON(F_USE_FK,ps_global) ? PF4 : 's';
+ KS_OSDATASET(&ab_keys[SELECT_KEY], KS_NONE);
+ }
+ else{
+ ab_keys[SELECT_KEY].name = "V";
+- ab_keys[SELECT_KEY].label = "[View/Edit]";
++ ab_keys[SELECT_KEY].label = "[檢視/編輯]";
+ def_cmd = F_ON(F_USE_FK,ps_global) ? PF4 : 'v';
+ KS_OSDATASET(&ab_keys[SELECT_KEY], KS_NONE);
+ }
+
+ ab_keys[DELETE_KEY].name = "D";
+- ab_keys[DELETE_KEY].label = "Delete";
++ ab_keys[DELETE_KEY].label = "刪除";
+ KS_OSDATASET(&ab_keys[DELETE_KEY], KS_DELETE);
+ if(was_clickable_last_time) /* it's still *this* time now */
+ clrbitn(SENDTO_KEY, bitmap);
+@@ -4648,7 +4648,7 @@
+ #endif
+ orig_c = c;
+
+- if(c == ctrl('M') || c == ctrl('J')) /* set up default */
++ if(c == ctrl('M') || c == ctrl('J') || c == KEY_RIGHT) /* set up default */
+ c = def_cmd;
+
+ if(c < 'z' && isupper((unsigned char)c))
+@@ -4749,13 +4749,14 @@
+
+
+ /*------------- Back to main menu or exit to caller -------*/
++ case KEY_LEFT:
+ case PF3:
+ case 'm':
+ case 'e':
+ if(!are_selecting && c == 'e'){
+ /* backwards compatibility message */
+ q_status_message(SM_ORDER | SM_DING, 0, 2,
+- "Command \"E\" not defined. Use \"View/Edit\" to edit an entry");
++ "\"E\" 這個命令尚未被定義. 請使用 \"View/Edit\" 編輯選項");
+ break;
+ }
+
+@@ -4766,7 +4767,7 @@
+ ps_global->next_screen = main_menu_screen;
+
+ if(!(are_selecting && as.checkboxes && checkedn > 0)
+- || want_to("Really abandon your selections ",
++ || want_to("確定放棄你的選擇 ",
+ 'y', 'x', NO_HELP, 0, 0) == 'y')
+ quit = 1;
+
+@@ -4780,7 +4781,7 @@
+ if(c == 's'
+ && !(are_selecting || entry_is_clickable(as.top_ent+as.cur_row))){
+ q_status_message(SM_ORDER | SM_DING, 0, 2,
+- "Command \"S\" not defined. Use \"AddNew\" to create a list");
++ "\"S\" 這個命令尚未被定義. 請使用 \"AddNew\" 建立列表");
+ break;
+ }
+
+@@ -4843,7 +4844,7 @@
+ /* Select an entry to mail to or a nickname to add to */
+ if(!any_addrs_avail(as.top_ent+as.cur_row)){
+ q_status_message(SM_ORDER | SM_DING, 0, 4,
+- "No entries in address book. Use ExitSelect to leave address book");
++ "地址簿中找不到任何項目. 請以 離開選擇(E) 離開");
+ break;
+ }
+
+@@ -4874,7 +4875,7 @@
+ }
+ else if(as.checkboxes && checkedn <= 0){
+ q_status_message(SM_ORDER, 0, 1,
+- "Use \"X\" to mark addresses or lists");
++ "使用 \"X\" 標記地址或列表");
+ break;
+ }
+ else if(as.checkboxes){
+@@ -4978,7 +4979,7 @@
+ if(selecting_mult_nicks){
+ if(dl->type != ListHead && style == SelectAddrLccCom){
+ q_status_message(SM_ORDER, 0, 4,
+- "You may only select lists for lcc, use bcc for other addresses");
++ "僅能選擇 lcc 列表, 其他的地址請用 bcc");
+ break;
+ }
+ else{
+@@ -5004,7 +5005,7 @@
+ }
+ else if(dl->type == ListHead && no_fullname){
+ q_status_message(SM_ORDER, 0, 4,
+- "You may not select a list, select a single address instead");
++ "無法選擇一個列表, 改以選擇單一地址取代之");
+ break;
+ }
+ else{
+@@ -5074,8 +5075,8 @@
+ return(addr); /* Caller frees this */
+ }
+ else{
+- q_status_message1(SM_ORDER, 3, 4, "No %s selected",
+- selecting_nick ? "nickname" : "address");
++ q_status_message1(SM_ORDER, 3, 4, "尚未選取%s",
++ selecting_nick ? "暱稱" : "地址");
+ break;
+ }
+ }
+@@ -5092,7 +5093,7 @@
+ edit:
+ if((c == 'v' || c == PF4 || c == KEY_MOUSE)
+ && !any_addrs_avail(as.top_ent+as.cur_row)){
+- q_status_message(SM_ORDER, 0, 4, "No entries to view");
++ q_status_message(SM_ORDER, 0, 4, "沒有可供檢視的項目");
+ break;
+ }
+
+@@ -5161,7 +5162,7 @@
+ }
+ else{
+ q_status_message(SM_ORDER, 0, 3,
+- "Current line is not editable");
++ "無法編輯本行");
+ break;
+ }
+ }
+@@ -5212,7 +5213,7 @@
+
+ r = prev_selectable_line(as.cur_row+as.top_ent, &new_line);
+ if(r == 0){
+- q_status_message(SM_INFO, 0, 1, "Already on first line.");
++ q_status_message(SM_INFO, 0, 1, "已經到第一行了.");
+ break;
+ }
+
+@@ -5254,7 +5255,7 @@
+
+ r = next_selectable_line(as.cur_row+as.top_ent, &new_line);
+ if(r == 0){
+- q_status_message(SM_INFO, 0, 1, "Already on last line.");
++ q_status_message(SM_INFO, 0, 1, "已經到最後一行了.");
+ break;
+ }
+
+@@ -5341,7 +5342,7 @@
+ break;
+
+ if(as.top_ent == new_top_ent && as.cur_row == (fl-as.top_ent)){
+- q_status_message(SM_INFO, 0, 1, "Already on first page.");
++ q_status_message(SM_INFO, 0, 1, "已經到第一頁了.");
+ break;
+ }
+
+@@ -5365,7 +5366,7 @@
+ else{
+ new_top_ent = as.top_ent;
+ if(as.cur_row == (fl - as.top_ent)){ /* no change */
+- q_status_message(SM_INFO,0,1,"Already on last page.");
++ q_status_message(SM_INFO,0,1,"已經到最後一頁了.");
+ break;
+ }
+ }
+@@ -5398,7 +5399,7 @@
+ goto bleep;
+
+ if(!any_addrs_avail(as.top_ent+as.cur_row)){
+- q_status_message(SM_ORDER, 0, 4, "No entries to delete");
++ q_status_message(SM_ORDER, 0, 4, "沒有可供刪除的項目");
+ break;
+ }
+
+@@ -5467,7 +5468,7 @@
+ goto bleep;
+
+ if(!any_addrs_avail(as.top_ent+as.cur_row)){
+- q_status_message(SM_ORDER, 0, 4, "No entries to select");
++ q_status_message(SM_ORDER, 0, 4, "沒有可供選擇的項目");
+ break;
+ }
+
+@@ -5486,7 +5487,7 @@
+
+ if(style == SelectAddrLccCom && dl->type != ListHead)
+ q_status_message(SM_ORDER, 0, 4,
+- "You may only select lists for lcc, use bcc for personal entries");
++ "僅能選擇 lcc 列表, 個人項目請用 bcc");
+ else if(dl->type == ListHead || dl->type == Simple){
+ current_changed_flag++;
+ if(entry_is_checked(pab->address_book->checks,
+@@ -6803,7 +6804,7 @@
+ if(full_to && *full_to)
+ fs_give((void **)full_to);
+
+- q_status_message(SM_ORDER, 3, 5, "Resetting address book...");
++ q_status_message(SM_ORDER, 3, 5, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... verify_addr(%s)!\n", to));
+ addrbook_reset();
+@@ -6849,12 +6850,12 @@
+ ps_global->redrawer = NULL;
+ fix_windsize(ps_global);
+
+- switch(want_to("Exit and save changes ", 'y', 0, NO_HELP, 0, 0)){
++ switch(want_to("離開並儲存改變 ", 'y', 0, NO_HELP, 0, 0)){
+ case 'y':
+ break;
+
+ case 'n':
+- rstr = "Use ^C to abandon changes you've made";
++ rstr = "以 ^C 放棄已經做過的改變";
+ break;
+
+ #ifdef OLDWAY
+@@ -6884,8 +6885,8 @@
+ char *rstr = NULL;
+ void (*redraw)() = ps_global->redrawer;
+
+- strcat(strcat(strcpy(prompt, "Cancel "), word),
+- " (answering \"Yes\" will abandon any changes made) ");
++ strcat(strcat(strcpy(prompt, "取消 "), word),
++ " (回答 \"Yes\" 將放棄所有曾做過的改變) ");
+ ps_global->redrawer = NULL;
+ fix_windsize(ps_global);
+
+@@ -7020,7 +7021,7 @@
+ abe = ae(cur_line);
+
+ if(dl->type == ListHead && listmem_count_from_abe(abe) == 0){
+- error = "List is empty, nothing to export!";
++ error = "列表是空的, 無法匯出任河東西!";
+ good_addr = 0;
+ }
+ else if(dl->type == ListEnt){
+@@ -7073,7 +7074,7 @@
+
+ if(addr && *addr){
+ static ESCKEY_S export_opts[] = {
+- {ctrl('T'), 10, "^T", "To Files"},
++ {ctrl('T'), 10, "^T", "信夾列表"},
+ {-1, 0, NULL, NULL}};
+ HelpType help;
+ char filename[MAXPATH+1], full_filename[MAXPATH+1];
+@@ -8115,7 +8116,7 @@
+ ? (char *)rfc1522_decode((unsigned char *)tmp_20k_buf,
+ abe->fullname, NULL)
+ : abe->nickname ? abe->nickname : "";
+- cmd = "Really delete \"%.50s\"";
++ cmd = "確定刪除 \"%.50s\"";
+ break;
+
+ case ListHead:
+@@ -8123,13 +8124,13 @@
+ ? (char *)rfc1522_decode((unsigned char *)tmp_20k_buf,
+ abe->fullname, NULL)
+ : abe->nickname ? abe->nickname : "";
+- cmd = "Really delete ENTIRE list \"%.50s\"";
++ cmd = "確定刪除 \"整個\" 列表 \"%.50s\"";
+ break;
+
+ case ListEnt:
+ dname = (char *)rfc1522_decode((unsigned char *)tmp_20k_buf,
+ listmem_from_dl(abook, dl), NULL);
+- cmd = "Really delete \"%.100s\" from list";
++ cmd = "確定自列表中刪除 \"%.100s\"";
+ break;
+ }
+
+@@ -8198,7 +8199,7 @@
+
+ if(rc == 0){
+ q_status_message(SM_ORDER, 0, 3,
+- "Entry deleted, address book updated");
++ "已刪除該項目並更新地址簿");
+ dprint(2, (debugfile, "abook: Entry %s\n",
+ (dl->type == Simple || dl->type == ListHead) ? "deleted"
+ : "modified"));
+@@ -8215,7 +8216,7 @@
+
+ if(rc != -5)
+ q_status_message1(SM_ORDER | SM_DING, 3, 5,
+- "Error updating address book: %s",
++ "更新地址簿時發生錯誤: %s",
+ error_description(errno));
+ pab = &as.adrbks[as.cur];
+ dprint(1, (debugfile, "Error deleting entry from %s (%s): %s\n",
+@@ -8225,7 +8226,7 @@
+ return 0;
+ }
+ else{
+- q_status_message(SM_INFO, 0, 2, "Entry not deleted");
++ q_status_message(SM_INFO, 0, 2, "該項目並未被刪除");
+ return 0;
+ }
+ }
+@@ -8275,7 +8276,7 @@
+ ekey[0].ch = ctrl('T');
+ ekey[0].rval = 2;
+ ekey[0].name = "^T";
+- ekey[0].label = "To AddrBk";
++ ekey[0].label = "地址列表";
+
+ ekey[1].ch = -1;
+
+@@ -8305,7 +8306,7 @@
+ }
+
+ q_status_message1(SM_ORDER, 0, 4,
+- "Already an entry with nickname \"%s\"", edit_buf);
++ "已經有一個暱稱為 \"%s\" 的項目", edit_buf);
+ }
+
+ if(rc == 3)
+@@ -8429,12 +8430,12 @@
+ ekey[1].ch = ctrl('Y');
+ ekey[1].rval = 10;
+ ekey[1].name = "^Y";
+- ekey[1].label = "First Adr";
++ ekey[1].label = "第一個地址";
+
+ ekey[2].ch = ctrl('V');
+ ekey[2].rval = 11;
+ ekey[2].name = "^V";
+- ekey[2].label = "Last Adr";
++ ekey[2].label = "最後的地址";
+
+ ekey[3].ch = -1;
+
+@@ -8450,11 +8451,11 @@
+ warp_to_beginning(); /* go to top of addrbooks */
+ if((nl=first_selectable_line(0L)) != NO_LINE){
+ *new_line = nl;
+- q_status_message(SM_INFO, 0, 2, "Searched to first entry");
++ q_status_message(SM_INFO, 0, 2, "搜尋至第一個項目");
+ return 0;
+ }
+ else{
+- q_status_message(SM_INFO, 0, 2, "No entries");
++ q_status_message(SM_INFO, 0, 2, "沒有任何項目");
+ return -1;
+ }
+ }
+@@ -8463,11 +8464,11 @@
+ warp_to_end(); /* go to bottom */
+ if((nl=first_selectable_line(0L)) != NO_LINE){
+ *new_line = nl;
+- q_status_message(SM_INFO, 0, 2, "Searched to last entry");
++ q_status_message(SM_INFO, 0, 2, "搜尋至最終項");
+ return 0;
+ }
+ else{
+- q_status_message(SM_INFO, 0, 2, "No entries");
++ q_status_message(SM_INFO, 0, 2, "沒有任何項目");
+ return -1;
+ }
+ }
+@@ -9016,7 +9017,7 @@
+
+ memcpy(save_jmp_buf, addrbook_changed_unexpectedly, sizeof(jmp_buf));
+ if(setjmp(addrbook_changed_unexpectedly)){
+- q_status_message(SM_ORDER, 5, 10, "Resetting address book...");
++ q_status_message(SM_ORDER, 5, 10, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... take_to_addrbooks_frontend!\n"));
+ addrbook_reset();
+@@ -9095,7 +9096,7 @@
+ abe = adrbk_lookup_by_nick(abook, new_nickname, &entry_num);
+ if(!abe){ /* this shouldn't happen */
+ q_status_message1(SM_ORDER, 0, 4,
+- "Already an entry %s in address book!",
++ "已經在地址簿中發現 %s 這個項目!",
+ new_nickname);
+ goto take_to_addrbooks_cancel;
+ }
+@@ -9103,7 +9104,7 @@
+ old_tag = abe->tag;
+
+ sprintf(prompt,
+- "%s %s (%s) exists, replace or add addresses to it ? ",
++ "%s %s (%s) 已存在, 取代或加入新的地址於其中 ? ",
+ abe->tag == List ? "List" : "Entry",
+ new_nickname,
+ (abe->fullname && abe->fullname[0])
+@@ -9129,7 +9130,7 @@
+ if((long)abook->count > MAX_ADRBK_SIZE ||
+ (old_tag == NotSet && (long)abook->count >= MAX_ADRBK_SIZE)){
+ q_status_message(SM_ORDER, 3, 5,
+- "Address book is at maximum size. TakeAddr cancelled.");
++ "地址簿容量已達上限. 取消 TakeAddr.");
+ dprint(2, (debugfile, "Addrbook at Max size, TakeAddr cancelled\n"));
+ goto take_to_addrbooks_cancel;
+ }
+@@ -9225,7 +9226,7 @@
+ save_state(state);
+
+ if(as.n_addrbk == 0){
+- q_status_message(SM_ORDER, 3, 4, "Can't open address book!");
++ q_status_message(SM_ORDER, 3, 4, "無法開啟地址簿!");
+ return NULL;
+ }
+ else
+@@ -9238,7 +9239,7 @@
+ init_abook(pab, Open);
+
+ if(pab->ostatus != Open){
+- q_status_message(SM_ORDER, 3, 4, "Can't open address book!");
++ q_status_message(SM_ORDER, 3, 4, "無法開啟地址簿!");
+ return NULL;
+ }
+
+@@ -9247,7 +9248,7 @@
+ readonly_warning(NO_DING, NULL);
+ else if(pab->access == NoAccess)
+ q_status_message(SM_ORDER, 3, 4,
+- "AddressBook not accessible, permission denied");
++ "禁址存取地址簿");
+
+ return NULL;
+ }
+@@ -9469,7 +9470,7 @@
+ if(full_lcc && *full_lcc)
+ fs_give((void **)full_lcc);
+
+- q_status_message(SM_ORDER, 3, 5, "Resetting address book...");
++ q_status_message(SM_ORDER, 3, 5, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... build_address(%s)!\n", lcc));
+ addrbook_reset();
+@@ -9723,7 +9724,7 @@
+ if(full_to && *full_to)
+ fs_give((void **)full_to);
+
+- q_status_message(SM_ORDER, 3, 5, "Resetting address book...");
++ q_status_message(SM_ORDER, 3, 5, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... build_address(%s)!\n", to));
+ addrbook_reset();
+@@ -10617,7 +10618,7 @@
+ if(state.dlc_to_warp_to)
+ fs_give((void **)&(state.dlc_to_warp_to));
+
+- q_status_message(SM_ORDER, 3, 5, "Resetting address book...");
++ q_status_message(SM_ORDER, 3, 5, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... get_nickname_from_addr()!\n"));
+ addrbook_reset();
+@@ -10668,7 +10669,7 @@
+ if(state.dlc_to_warp_to)
+ fs_give((void **)&(state.dlc_to_warp_to));
+
+- q_status_message(SM_ORDER, 3, 5, "Resetting address book...");
++ q_status_message(SM_ORDER, 3, 5, "正在重設地址簿...");
+ dprint(1, (debugfile,
+ "RESETTING address book... get_fcc_from_addr()!\n"));
+ addrbook_reset();
+@@ -11484,21 +11485,21 @@
+
+
+ static struct key takeaddr_keys_listmode[] =
+- {{"?","Help",KS_SCREENHELP}, {"W","WhereIs",KS_WHEREIS},
+- {"E","ExitTake",KS_EXITMODE}, {"T","Take",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next", KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"X","[Set/Unset]",KS_NONE}, {"A","SetAll",KS_NONE},
+- {"U","UnSetAll",KS_NONE}, {"S","SinglMode",KS_NONE}};
++ {{"?","輔助說明",KS_SCREENHELP}, {"W","搜尋",KS_WHEREIS},
++ {"E","離開",KS_EXITMODE}, {"T","取得",KS_NONE},
++ {"P","上一個",KS_NONE}, {"N","下一個", KS_NONE},
++ {"-","前一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"X","[設定/取消設定]",KS_NONE}, {"A","設定全部",KS_NONE},
++ {"U","取消設定全部",KS_NONE}, {"S","單一模式",KS_NONE}};
+ INST_KEY_MENU(takeaddr_keymenu_listmode, takeaddr_keys_listmode);
+
+ static struct key takeaddr_keys_singlemode[] =
+- {{"?","Help",KS_SCREENHELP}, {"W","WhereIs",KS_WHEREIS},
+- {"E","ExitTake",KS_EXITMODE}, {"T","[Take]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next", KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {NULL,NULL,KS_NONE}, {"L","ListMode",KS_NONE}};
++ {{"?","輔助說明",KS_SCREENHELP}, {"W","搜尋",KS_WHEREIS},
++ {"E","離開",KS_EXITMODE}, {"T","[取得]",KS_NONE},
++ {"P","上一個",KS_NONE}, {"N","下一個", KS_NONE},
++ {"-","前一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
++ {NULL,NULL,KS_NONE}, {"L","列表模式",KS_NONE}};
+ INST_KEY_MENU(takeaddr_keymenu_singlemode, takeaddr_keys_singlemode);
+
+
+@@ -11692,6 +11693,7 @@
+ break;
+
+ case 'e': /* exit takeaddr screen */
++ case KEY_LEFT:
+ case PF3:
+ case ctrl('C'):
+ cancel_warning(NO_DING, "addition");
+@@ -11699,10 +11701,11 @@
+ break;
+
+ case 't': /* take */
++ case KEY_RIGHT:
+ case PF4:
+ case ctrl('M'):
+ case ctrl('J'):
+- if((ch == ctrl('M') || ch == ctrl('J'))
++ if((ch == ctrl('M') || ch == ctrl('J') || ch == KEY_RIGHT)
+ && screen.mode == ListMode)
+ goto SelectCase; /* default is different in this case */
+
+@@ -11727,7 +11730,7 @@
+ if(ctmp = next_sel_taline(current))
+ current = ctmp;
+ else
+- q_status_message(SM_INFO, 0, 1, "Already on last line.");
++ q_status_message(SM_INFO, 0, 1, "已經到最後一行了.");
+
+ break;
+
+@@ -11739,7 +11742,7 @@
+ if(ctmp = pre_sel_taline(current))
+ current = ctmp;
+ else
+- q_status_message(SM_INFO, 0, 1, "Already on first line.");
++ q_status_message(SM_INFO, 0, 1, "已經到第一行了.");
+
+ break;
+
+@@ -11759,7 +11762,7 @@
+ }
+
+ if(give_warn_message)
+- q_status_message(SM_INFO, 0, 1, "Already on last page.");
++ q_status_message(SM_INFO, 0, 1, "已經在最後一頁了.");
+
+ break;
+
+@@ -11789,7 +11792,7 @@
+ }
+
+ if(give_warn_message)
+- q_status_message(SM_INFO, 0, 1, "Already on first page.");
++ q_status_message(SM_INFO, 0, 1, "已經在第一頁了.");
+
+ break;
+
+@@ -11873,25 +11876,25 @@
+ case PF12:
+ if(screen.mode == ListMode && ch == 'l'){
+ q_status_message(SM_INFO, 0, 1,
+- "Already in ListMode. Press \"S\" for Single entry mode.");
++ "已經在列表模式. 以 \"S\" 進入單一選項模式.");
+ break;
+ }
+
+ if(screen.mode == SingleMode && ch == 's'){
+ q_status_message(SM_INFO, 0, 1,
+- "Already in SingleMode. Press \"L\" for List entry mode.");
++ "已經在單一選項模式. 以 \"L\" 進入列表模式.");
+ break;
+ }
+
+ if(screen.mode == ListMode){
+ screen.mode = SingleMode;
+ q_status_message(SM_INFO, 0, 1,
+- "Single mode: Use \"P\" or \"N\" to select desired address");
++ "單一選項模式: 以 \"P\" 或 \"N\" 選擇需要的地址");
+ }
+ else{
+ screen.mode = ListMode;
+ q_status_message(SM_INFO, 0, 1,
+- "List mode: Use \"X\" to mark addresses to be included in list");
++ "列表模式: 以 \"X\" 標註欲加入列表中的地址");
+
+ if(how_many_selected <= 1){
+ how_many_selected =
+@@ -12083,24 +12086,24 @@
+ }
+ else if(rc == 10){
+ current = first_sel_taline(current);
+- result = "Searched to top";
++ result = "向前搜尋";
+ }
+ else if(rc == 11){
+ current = last_sel_taline(current);
+- result = "Searched to bottom";
++ result = "向後搜尋";
+ }
+ else{
+ current = NULL;
+- result = "WhereIs cancelled";
++ result = "取消搜尋";
+ }
+
+ if(found){
+ current = p;
+- result = wrapped ? "Search wrapped to beginning" : "Word found";
++ result = wrapped ? "從頭搜尋" : "找不到該字";
+ strcpy(last, buf);
+ }
+
+- q_status_message(SM_ORDER,0,3,result ? result : "Word not found");
++ q_status_message(SM_ORDER,0,3,result ? result : "找不到該字");
+ return(current);
+ }
+
+@@ -12770,7 +12773,7 @@
+ &body);
+ if(!env){
+ q_status_message(SM_ORDER | SM_DING, 3, 4,
+- "Can't take address into address book. Error accessing folder");
++ "無法將地址存入地址簿中. 檔案夾存取錯誤");
+ goto bomb;
+ }
+
+@@ -12809,7 +12812,7 @@
+ body_h);
+ if(!env){
+ q_status_message(SM_ORDER | SM_DING, 3, 4,
+- "Can't take address into address book. Error accessing folder");
++ "無法將地址存入地址簿中. 檔案夾存取錯誤");
+ goto bomb;
+ }
+
diff --git a/chinese/pine4/files/patch-az b/chinese/pine4/files/patch-az
new file mode 100644
index 000000000000..7da31ace19ea
--- /dev/null
+++ b/chinese/pine4/files/patch-az
@@ -0,0 +1,151 @@
+--- pine/folder.c.orig Wed May 15 09:25:19 1996
++++ pine/folder.c Sat Jan 17 21:04:13 1998
+@@ -159,18 +159,18 @@
+
+
+ static struct key folder_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"P","PrevFldr",KS_NONE}, {"N","NextFldr",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"D","Delete",KS_NONE}, {"A","Add",KS_NONE},
+- {"R","Rename",KS_NONE}, {"W","WhereIs",KS_NONE},
+-
+- {"?","Help",KS_NONE}, {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT}, {"C","Compose",KS_COMPOSER},
+- {NULL,NULL,KS_NONE}, {"G","GotoFldr",KS_GOTOFLDR},
+- {"I","CurIndex",KS_FLDRINDEX}, {"W","WhereIs",KS_WHEREIS},
+- {"Y","prYnt",KS_PRINT}, {NULL,NULL,KS_NONE},
++ {"P","前一信夾",KS_NONE}, {"N","後一信夾",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"D","刪除",KS_NONE}, {"A","加入",KS_NONE},
++ {"R","更名",KS_NONE}, {"W","搜尋",KS_NONE},
++
++ {"?","輔助說明",KS_NONE}, {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT}, {"C","寫信",KS_COMPOSER},
++ {NULL,NULL,KS_NONE}, {"G","進入信件夾",KS_GOTOFLDR},
++ {"I","目前索引",KS_FLDRINDEX}, {"W","搜尋",KS_WHEREIS},
++ {"Y","列印",KS_PRINT}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE}};
+ INST_KEY_MENU(folder_keymenu, folder_keys);
+ #define MAIN_KEY 2 /* Sometimes Main, sometimes Exit */
+@@ -438,24 +438,24 @@
+ folder_keys[DELETE_KEY].name = "D";
+ folder_keys[ADD_KEY].name = "A";
+ folder_keys[RENAME_KEY].name = "R";
+- folder_keys[RENAME_KEY].label = "Rename";
++ folder_keys[RENAME_KEY].label = "更名";
+ if(fs->context->type & FTYPE_BBOARD) {
+- folder_keys[ADD_KEY].label = "Subscribe";
+- folder_keys[DELETE_KEY].label = "UnSbscrbe";
++ folder_keys[ADD_KEY].label = "訂閱\";
++ folder_keys[DELETE_KEY].label = "不訂閱\";
+ KS_OSDATASET(&folder_keys[DELETE_KEY], KS_NONE);
+ } else {
+- folder_keys[ADD_KEY].label = "Add";
+- folder_keys[DELETE_KEY].label = "Delete";
++ folder_keys[ADD_KEY].label = "增加";
++ folder_keys[DELETE_KEY].label = "刪除";
+ KS_OSDATASET(&folder_keys[DELETE_KEY], KS_NONE);
+ }
+ if(do_what == FolderMaint){
+ km->how_many = 2;
+ folder_keys[MAIN_KEY].name = "M";
+- folder_keys[MAIN_KEY].label = "Main Menu";
++ folder_keys[MAIN_KEY].label = "主選單";
+ KS_OSDATASET(&folder_keys[MAIN_KEY], KS_MAINMENU);
+ folder_keys[SELECT_KEY].name = "V";
+ folder_keys[SELECT_KEY].label =
+- (fs->context->use & CNTXT_PSEUDO) ? "[Select]":"[ViewFldr]";
++ (fs->context->use & CNTXT_PSEUDO) ? "[選擇]":"[檢視信件夾]";
+ KS_OSDATASET(&folder_keys[SELECT_KEY], KS_NONE);
+ clrbitn(WHEREIS_KEY, bitmap); /* the one in the 1st menu */
+ }
+@@ -463,23 +463,23 @@
+ km->how_many = 1;
+ folder_keys[MAIN_KEY].name = "E";
+ folder_keys[MAIN_KEY].label = do_what != Subscribe ?
+- "ExitSelect" : "ExitSubscb";
++ "離開選擇" : "ExitSubsc";
+
+ folder_keys[SELECT_KEY].name = "S";
+ folder_keys[SELECT_KEY].label = do_what != Subscribe ?
+- "[Select]" : "[Subscribe]";
++ "[選擇]" : "[訂閱\]";
+ KS_OSDATASET(&folder_keys[SELECT_KEY], KS_NONE);
+ clrbitn(OTHER_KEY, bitmap);
+ clrbitn(RENAME_KEY, bitmap);
+ if(do_what == Subscribe){
+ if(doing_listmode){
+ folder_keys[DELETE_KEY].name = "X";
+- folder_keys[DELETE_KEY].label = "[Set/Unset]";
+- folder_keys[SELECT_KEY].label = "Subscribe";
++ folder_keys[DELETE_KEY].label = "[設定/取消設定]";
++ folder_keys[SELECT_KEY].label = "訂閱\";
+ }
+ else{
+ folder_keys[DELETE_KEY].name = "L";
+- folder_keys[DELETE_KEY].label = "ListMode";
++ folder_keys[DELETE_KEY].label = "列表模式";
+ }
+ }
+ else
+@@ -610,8 +610,8 @@
+
+
+ /*---------------------- Key left --------------*/
++ case KEY_LEFT:
+ case ctrl('B'):
+- case KEY_LEFT:
+ case PF5:
+ case 'p':
+ if(fs->folder_index > 0 && ALL_FOUND(fs->context)){
+@@ -628,7 +628,18 @@
+ fs->folder_index = 0;
+ }
+ else
+- q_status_message(SM_ORDER,0,1,"Already on first folder.");
++ {
++ /* GaryLee :3
++ q_status_message(0,0,1,"\007已經在第一個信件夾了.");
++ */
++ if((do_what != FolderMaint && ch == 'm')
++ || (do_what == FolderMaint && ch == 'e'))
++ goto bleep;
++ ps_global->redrawer = (void (*)())NULL;
++ for(tc = fs->context_list; tc ; tc = tc->next)
++ free_folders_in_context(tc);
++ return(0);
++ }
+
+ break;
+
+@@ -996,8 +1007,7 @@
+ /*-- save message, subscribe or post --- */
+ if((do_what == GetFcc || do_what == SaveMessage)
+ && (fs->context->type & FTYPE_BBOARD)) {
+- q_status_message(SM_ORDER | SM_DING, 3, 4,
+- "Can't save messages to bulletin boards or news groups!");
++ q_status_message(SM_ORDER | SM_DING, 3, 4, "無法將訊息存至電子佈告欄或新聞組群上!");
+ break;
+ }
+
+@@ -2407,7 +2417,7 @@
+ folder = new_f->name;
+ ren_cur = strcmp(folder, ps_global->cur_folder) == 0;
+
+- prompt = "Rename folder to : ";
++ prompt = "將信件匣更名為: ";
+ help = NO_HELP;
+ strcpy(new_foldername, folder);
+ while(1) {
+@@ -2608,7 +2618,7 @@
+ && strcmp(folder, ps_global->cur_folder) == 0)
+ close_opened++;
+
+- sprintf(ques_buf, "Really delete \"%s\"%s", folder,
++ sprintf(ques_buf, "確定刪除 \"%s\"%s", folder,
+ close_opened ? " (the currently open folder)" : "");
+
+ if((ret=want_to(ques_buf, 'n', 'x', NO_HELP, 0, 0)) != 'y'){
diff --git a/chinese/pine4/files/patch-ba b/chinese/pine4/files/patch-ba
new file mode 100644
index 000000000000..f99dacebd798
--- /dev/null
+++ b/chinese/pine4/files/patch-ba
@@ -0,0 +1,173 @@
+--- pine/mailcmd.c.orig Tue Feb 25 05:57:22 1997
++++ pine/mailcmd.c Sat Jan 17 21:05:19 1998
+@@ -128,14 +128,14 @@
+
+ static char *sel_pmt3 = "APPLY command : ";
+ static ESCKEY_S sel_opts3[] = {
+- {'d', 'd', "D", "Del"},
+- {'u', 'u', "U", "Undel"},
+- {'r', 'r', "R", "Reply"},
+- {'f', 'f', "F", "Forward"},
+- {'y', 'y', "Y", "prYnt"},
++ {'d', 'd', "D", "刪除"},
++ {'u', 'u', "U", "救回刪除"},
++ {'r', 'r', "R", "回信"},
++ {'f', 'f', "F", "轉寄"},
++ {'y', 'y', "Y", "列印"},
+ {'t', 't', "T", "TakeAddr"},
+- {'s', 's', "S", "Save"},
+- {'e', 'e', "E", "Export"},
++ {'s', 's', "S", "存檔"},
++ {'e', 'e', "E", "匯出"},
+ { -1, 0, NULL, NULL},
+ { -1, 0, NULL, NULL},
+ { -1, 0, NULL, NULL},
+@@ -203,6 +203,9 @@
+ int command, in_index, orig_command;
+ int *force_mailchk;
+ {
++/* GaryLee :3 */
++ static char WhereFrom = 0 ;
++ static char current_cmd_status ;
+ int question_line, a_changed, is_unread, we_cancel;
+ long new_msgno, del_count, old_msgno, cur_msgno, i,
+ hide_count, exld_count, select_count, old_max_msgno;
+@@ -225,6 +228,12 @@
+ a_changed = 0;
+ *force_mailchk = 0;
+
++/* GaryLee:3 */
++ if(state->prev_screen == main_menu_screen )
++ WhereFrom = 'm' ;
++ else if( state->prev_screen == folder_screen )
++ WhereFrom = 'l' ;
++
+ switch (command)
+ {
+ /*------------- Help --------*/
+@@ -253,6 +262,16 @@
+
+
+ /*--------- Return to main menu ------------*/
++ case KEY_LEFT:
++ if(current_cmd_status)
++ goto do_index ;
++ /* GaryLee :3 */
++ if (WhereFrom == 'l')
++ {
++ state->next_screen = folder_screen;
++ break;
++ }
++
+ case PF3:
+ case 'm':
+ if(state->nr_mode && command == 'm')
+@@ -269,6 +288,7 @@
+
+ /*------- View mail or attachment --------*/
+ case ctrl('M'):
++ case KEY_RIGHT:
+ case ctrl('J'):
+ if(!in_index){
+ q_status_message(SM_ORDER | SM_DING, 0, 3,
+@@ -278,6 +298,7 @@
+
+ case PF4:
+ case 'v':
++ current_cmd_status = 1 ;
+ if(in_index) {
+ if(any_messages(msgmap, NULL, "to View")){
+ state->next_screen = mail_view_screen;
+@@ -489,6 +510,7 @@
+ case OPF7:
+ case 'i':
+ do_index:
++ current_cmd_status = 0 ;
+ if(!in_index) {
+ #if defined(DOS) && !defined(WIN32)
+ flush_index_cache(); /* save room on PC */
+@@ -1871,7 +1893,7 @@
+ ekey[rc].ch = ctrl('T');
+ ekey[rc].rval = 2;
+ ekey[rc].name = "^T";
+- ekey[rc++].label = "To Fldrs";
++ ekey[rc++].label = "信夾列表";
+
+ if(saveable_count > 1){
+ ekey[rc].ch = ctrl('P');
+@@ -1889,7 +1911,7 @@
+ ekey[rc].ch = TAB;
+ ekey[rc].rval = 12;
+ ekey[rc].name = "TAB";
+- ekey[rc++].label = "Complete";
++ ekey[rc++].label = "完成";
+ }
+
+ if(saveable_count > 1){
+@@ -2753,7 +2775,7 @@
+ STORE_S *store;
+ struct variable *vars = ps_global->vars;
+ static ESCKEY_S export_opts[] = {
+- {ctrl('T'), 10, "^T", "To Files"},
++ {ctrl('T'), 10, "^T", "檔案列表"},
+ {-1, 0, NULL, NULL},
+ {-1, 0, NULL, NULL},
+ {-1, 0, NULL, NULL}};
+@@ -2774,7 +2796,7 @@
+ export_opts[++i].ch = ctrl('V');
+ export_opts[i].rval = 12;
+ export_opts[i].name = "^V";
+- export_opts[i].label = "Downld Msg";
++ export_opts[i].label = "下載";
+ }
+ #endif /* !(DOS || MAC) */
+
+@@ -2782,7 +2804,7 @@
+ export_opts[++i].ch = ctrl('I');
+ export_opts[i].rval = 11;
+ export_opts[i].name = "TAB";
+- export_opts[i].label = "Complete";
++ export_opts[i].label = "完成";
+ }
+
+ export_opts[++i].ch = -1;
+@@ -2888,7 +2910,7 @@
+ || !format_message(mn_m2raw(msgmap, mn_get_cur(msgmap)),
+ env, b, FM_NEW_MESS|FM_DO_PRINT, pc)){
+ q_status_message(SM_ORDER | SM_DING, 3, 3,
+- errstr = "Error writing tempfile for download");
++ errstr = "寫入下載暫存檔時發生錯誤");
+ break;
+ }
+
+@@ -2900,18 +2922,18 @@
+ (void) close_system_pipe(&syspipe);
+ else
+ q_status_message(SM_ORDER | SM_DING, 3, 3,
+- errstr = "Error running download command");
++ errstr = "執行下載命令時發生錯誤");
+ }
+
+ unlink(tfp);
+ }
+ else
+ q_status_message(SM_ORDER | SM_DING, 3, 3,
+- errstr = "Error building temp file for download");
++ errstr = "無法建立下載用的暫存檔");
+
+ fs_give((void **)&tfp);
+ if(!errstr)
+- q_status_message(SM_ORDER, 0, 3, "Download Command Completed");
++ q_status_message(SM_ORDER, 0, 3, "下載命令完成");
+
+ goto fini;
+ }
+@@ -3354,7 +3376,7 @@
+ ekey[rc].ch = TAB;
+ ekey[rc].rval = 12;
+ ekey[rc].name = "TAB";
+- ekey[rc++].label = "Complete";
++ ekey[rc++].label = "完成";
+ }
+
+ if(ps_global->context_list->next){
diff --git a/chinese/pine4/files/patch-bb b/chinese/pine4/files/patch-bb
new file mode 100644
index 000000000000..c1e1b758bc93
--- /dev/null
+++ b/chinese/pine4/files/patch-bb
@@ -0,0 +1,128 @@
+--- pine/mailindx.c.orig Fri Jul 12 06:48:37 1996
++++ pine/mailindx.c Sat Jan 17 21:06:20 1998
+@@ -53,28 +53,28 @@
+
+
+ static struct key index_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"M","Main Menu",KS_MAINMENU}, {"V","[ViewMsg]",KS_VIEW},
+- {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"D","Delete",KS_DELETE}, {"U","Undelete",KS_UNDELETE},
+- {"R","Reply",KS_REPLY}, {"F","Forward",KS_FORWARD},
+-
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT}, {"C","Compose",KS_COMPOSER},
+- {"L","ListFldrs",KS_FLDRLIST}, {"G","GotoFldr",KS_GOTOFLDR},
+- {"Tab","NextNew",KS_NONE}, {"W","WhereIs",KS_WHEREIS},
+- {"Y","prYnt",KS_PRINT}, {"T","TakeAddr",KS_TAKEADDR},
+- {"S","Save",KS_SAVE}, {"E","Export",KS_EXPORT},
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"M","回到主選單",KS_MAINMENU}, {"V","[看信]",KS_VIEW},
++ {"P","前一個",KS_PREVMSG}, {"N","後一個",KS_NEXTMSG},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"D","刪除",KS_DELETE}, {"U","救回刪除",KS_UNDELETE},
++ {"R","回信",KS_REPLY}, {"F","轉寄",KS_FORWARD},
++
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT}, {"C","寫信",KS_COMPOSER},
++ {"L","列出信件夾",KS_FLDRLIST}, {"G","進入信件夾",KS_GOTOFLDR},
++ {"Tab","下一個",KS_NONE}, {"W","搜尋",KS_WHEREIS},
++ {"Y","列印",KS_PRINT}, {"T","取得地址",KS_TAKEADDR},
++ {"S","儲存",KS_SAVE}, {"E","匯出",KS_EXPORT},
+
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {"X",NULL,KS_NONE}, {"&","unXclude",KS_NONE},
+- {";","Select",KS_SELECT}, {"A","Apply",KS_APPLY},
+- {"$","SortIndex",KS_SORT}, {"J","Jump",KS_JUMPTOMSG},
+- {"H","HdrMode",KS_HDRMODE}, {"B","Bounce",KS_BOUNCE},
+- {"*","Flag",KS_FLAG}, {"|","Pipe",KS_NONE},
++ {";","選擇",KS_SELECT}, {"A","Apply",KS_APPLY},
++ {"$","索引排序",KS_SORT}, {"J","跳至",KS_JUMPTOMSG},
++ {"H","標頭模式",KS_HDRMODE}, {"B","Bounce",KS_BOUNCE},
++ {"*","旗標",KS_FLAG}, {"|","Pipe",KS_NONE},
+
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {":","SelectCur",KS_SELECTCUR}, {"Z","ZoomMode",KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+@@ -94,32 +94,32 @@
+ #define ZOOM_KEY 39
+
+ static struct key nr_anon_index_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"W","WhereIs",KS_WHEREIS},
+- {"Q","Quit",KS_EXIT}, {"V","[ViewMsg]",KS_VIEW},
+- {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"F","Fwd Email",KS_FORWARD}, {"J","Jump",KS_JUMPTOMSG},
+- {"$","SortIndex",KS_SORT}, {NULL,NULL,KS_NONE}};
++ {{"?","輔助說明",KS_SCREENHELP}, {"W","搜尋",KS_WHEREIS},
++ {"Q","離開",KS_EXIT}, {"V","[ViewMsg]",KS_VIEW},
++ {"P","前一個",KS_PREVMSG}, {"N","後一個",KS_NEXTMSG},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"F","轉寄",KS_FORWARD}, {"J","跳至",KS_JUMPTOMSG},
++ {"$","重新排序",KS_SORT}, {NULL,NULL,KS_NONE}};
+ INST_KEY_MENU(nr_anon_index_keymenu, nr_anon_index_keys);
+
+ static struct key nr_index_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {"Q","Quit",KS_EXIT}, {"V","[ViewMsg]",KS_VIEW},
+ {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+ {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+ {"F","Fwd Email",KS_FORWARD}, {"J","Jump",KS_JUMPTOMSG},
+- {"Y","prYnt",KS_PRINT}, {"S","Save",KS_SAVE},
++ {"Y","列印",KS_PRINT}, {"S","Save",KS_SAVE},
+
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {"E","Export",KS_EXPORT}, {"C","Compose",KS_COMPOSER},
+ {"$","SortIndex",KS_SORT}, {NULL,NULL,KS_NONE},
+- {NULL,NULL,KS_NONE}, {"W","WhereIs",KS_WHEREIS},
++ {NULL,NULL,KS_NONE}, {"W","搜尋",KS_WHEREIS},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE}};
+ INST_KEY_MENU(nr_index_keymenu, nr_index_keys);
+
+ static struct key simple_index_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+ {"E","ExitSelect",KS_EXITMODE}, {"S","[Select]",KS_SELECT},
+ {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+ {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+@@ -630,7 +630,7 @@
+ if(i <= 1L){
+ if(mn_get_cur(msgmap) == 1L)
+ q_status_message(SM_ORDER, 0, 1,
+- "Already at start of Index");
++ "已經在索引的起頭了");
+
+ break;
+ }
+@@ -664,7 +664,7 @@
+
+ if(i >= mn_get_total(msgmap)){
+ if(mn_get_cur(msgmap) == k)
+- q_status_message(SM_ORDER,0,1,"Already at end of Index");
++ q_status_message(SM_ORDER,0,1,"已經在索引的結尾了");
+
+ break;
+ }
+@@ -884,6 +884,7 @@
+
+ break;
+
++ case KEY_LEFT:
+ case 'e': /* exit */
+ case 'E':
+ case PF3:
+@@ -897,6 +898,7 @@
+
+ case 's': /* select */
+ case ctrl('M'):
++ case KEY_RIGHT:
+ case ctrl('J'):
+ case PF4:
+ ps_global->redrawer = NULL;
diff --git a/chinese/pine4/files/patch-bc b/chinese/pine4/files/patch-bc
new file mode 100644
index 000000000000..f3c338f13e31
--- /dev/null
+++ b/chinese/pine4/files/patch-bc
@@ -0,0 +1,71 @@
+--- pine/mailpart.c.orig Thu May 30 05:47:17 1996
++++ pine/mailpart.c Sat Jan 17 21:06:54 1998
+@@ -74,12 +74,12 @@
+
+
+ static struct key att_index_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Index",KS_EXITMODE}, {"V","[View]",KS_VIEW},
+- {"P","PrevAttch",KS_NONE}, {"N","NextAttch",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"A","AboutAttch",KS_NONE}, {"S","Save",KS_SAVE},
+- {"|","Pipe",KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","離開索引",KS_EXITMODE}, {"V","[檢視]",KS_VIEW},
++ {"P","前一附件",KS_NONE}, {"N","後一附件",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"A","附件資料",KS_NONE}, {"S","儲存",KS_SAVE},
++ {"|","Pipe",KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(att_index_keymenu, att_index_keys);
+ #define ATT_PIPE_KEY 10
+
+@@ -354,6 +354,7 @@
+ ps->mangled_screen = 1;
+ break;
+
++ case KEY_LEFT :
+ case 'e' : /* exit attachment screen */
+ case PF3 :
+ done++;
+@@ -362,7 +363,6 @@
+ case 'n' : /* next list element */
+ case '\t' :
+ case ctrl('F') :
+- case KEY_RIGHT :
+ case ctrl('N'): /* down arrow */
+ case KEY_DOWN :
+ case PF6 :
+@@ -377,7 +377,6 @@
+
+ case 'p' : /* previous list element */
+ case ctrl('B') :
+- case KEY_LEFT :
+ case ctrl('P') : /* up arrow */
+ case KEY_UP :
+ case PF5 :
+@@ -506,7 +505,7 @@
+ }
+ }
+ else
+- result = "WhereIs cancelled";
++ result = "搜尋指令已取消";
+
+ if(found && ctmp){
+ strcpy(last, buf);
+@@ -530,6 +529,7 @@
+ ps->mangled_screen = 1;
+ break;
+
++ case KEY_RIGHT:
+ case 'v': /* View command */
+ case ctrl('M'):
+ case PF4 :
+@@ -855,7 +855,7 @@
+ char *err;
+ struct variable *vars = ps_global->vars;
+ static ESCKEY_S att_save_opts[] = {
+- {ctrl('T'), 10, "^T", "To Files"},
++ {ctrl('T'), 10, "^T", "信夾列表"},
+ {-1, 0, NULL, NULL},
+ {-1, 0, NULL, NULL},
+ {-1, 0, NULL, NULL}};
diff --git a/chinese/pine4/files/patch-bd b/chinese/pine4/files/patch-bd
new file mode 100644
index 000000000000..d4bb4bd2f804
--- /dev/null
+++ b/chinese/pine4/files/patch-bd
@@ -0,0 +1,180 @@
+--- pine/mailview.c.orig Fri Jul 12 06:49:32 1996
++++ pine/mailview.c Sat Jan 17 21:07:22 1998
+@@ -1955,12 +1955,12 @@
+ * is stored with each entry and it could be different for each.
+ */
+ static struct key help_keys[] =
+- {{"M","Main Menu",KS_MAINMENU}, {NULL,NULL,KS_NONE},
+- {"E","Exit Help",KS_EXITMODE}, {NULL,NULL,KS_NONE},
++ {{"M","主選單",KS_MAINMENU}, {NULL,NULL,KS_NONE},
++ {"E","離開",KS_EXITMODE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"Y","prYnt",KS_PRINT}, {"Z","Print All",KS_NONE},
+- {"B","Report Bug",KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"Y","列印",KS_PRINT}, {"Z","Print All",KS_NONE},
++ {"B","錯誤回報",KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(help_keymenu, help_keys);
+ #define HLP_MAIN_KEY 0
+ #define HLP_ALL_KEY 9
+@@ -1968,34 +1968,34 @@
+
+ static struct key review_keys[] =
+ {{NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"E","Exit",KS_EXITMODE}, {NULL,NULL,KS_NONE},
++ {"E","離開",KS_EXITMODE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"Y","prYnt",KS_PRINT}, {NULL,NULL,KS_NONE},
+- {NULL,NULL,KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"Y","列印",KS_PRINT}, {NULL,NULL,KS_NONE},
++ {NULL,NULL,KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(review_keymenu, review_keys);
+
+ static struct key view_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"M","Main Menu",KS_MAINMENU}, {"V","ViewAttch",KS_VIEW},
+- {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"D","Delete",KS_DELETE}, {"U","Undelete",KS_UNDELETE},
+- {"R","Reply",KS_REPLY}, {"F","Forward",KS_FORWARD},
+-
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT}, {"C","Compose",KS_COMPOSER},
+- {"L","ListFldrs",KS_FLDRLIST}, {"G","GotoFldr",KS_GOTOFLDR},
+- {"I","Index",KS_FLDRINDEX}, {"W","WhereIs",KS_WHEREIS},
+- {"Y","prYnt",KS_PRINT}, {"T","TakeAddr",KS_TAKEADDR},
+- {"S","Save",KS_SAVE}, {"E","Export",KS_EXPORT},
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"M","主選單",KS_MAINMENU}, {"V","檢視附件",KS_VIEW},
++ {"P","前一個",KS_PREVMSG}, {"N","後一個",KS_NEXTMSG},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"D","刪除",KS_DELETE}, {"U","救回刪除",KS_UNDELETE},
++ {"R","回信",KS_REPLY}, {"F","轉寄",KS_FORWARD},
++
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT}, {"C","編輯",KS_COMPOSER},
++ {"L","列出信件夾",KS_FLDRLIST}, {"G","進入信件夾",KS_GOTOFLDR},
++ {"I","索引",KS_FLDRINDEX}, {"W","搜尋",KS_WHEREIS},
++ {"Y","列印",KS_PRINT}, {"T","取得地址",KS_TAKEADDR},
++ {"S","儲存",KS_SAVE}, {"E","匯出",KS_EXPORT},
+
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"J","Jump",KS_JUMPTOMSG}, {"TAB","NextNew",KS_NONE},
+- {"H","HdrMode",KS_HDRMODE}, {"B","Bounce",KS_BOUNCE},
+- {"*","Flag",KS_FLAG}, {"|","Pipe",KS_NONE}};
++ {"J","跳至",KS_JUMPTOMSG}, {"TAB","下一個",KS_NONE},
++ {"H","標頭模式",KS_HDRMODE}, {"B","Bounce",KS_BOUNCE},
++ {"*","旗標",KS_FLAG}, {"|","Pipe",KS_NONE}};
+ INST_KEY_MENU(view_keymenu, view_keys);
+ #define VIEW_FULL_HEADERS_KEY 32
+ #define BOUNCE_KEY 33
+@@ -2003,49 +2003,49 @@
+ #define VIEW_PIPE_KEY 35
+
+ static struct key nr_anon_view_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"W","WhereIs",KS_WHEREIS},
+- {"Q", "Quit",KS_EXIT}, {NULL,NULL,KS_NONE},
+- {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"F","Fwd Email",KS_FORWARD}, {"J","Jump",KS_JUMPTOMSG},
+- {"I", "Index",KS_FLDRINDEX}, {NULL, NULL,KS_NONE}};
++ {{"?","輔助說明",KS_SCREENHELP}, {"W","搜尋",KS_WHEREIS},
++ {"Q", "離開",KS_EXIT}, {NULL,NULL,KS_NONE},
++ {"P","前一個",KS_PREVMSG}, {"N","後一個",KS_NEXTMSG},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"F","轉寄",KS_FORWARD}, {"J","跳至",KS_JUMPTOMSG},
++ {"I", "索引",KS_FLDRINDEX}, {NULL, NULL,KS_NONE}};
+ INST_KEY_MENU(nr_anon_view_keymenu, nr_anon_view_keys);
+
+ static struct key nr_view_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT}, {NULL,NULL,KS_NONE},
+- {"P","PrevMsg",KS_PREVMSG}, {"N","NextMsg",KS_NEXTMSG},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"F","Fwd Email",KS_FORWARD}, {"J","Jump",KS_JUMPTOMSG},
+- {"Y","prYnt",KS_PRINT}, {"S","Save",KS_SAVE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT}, {NULL,NULL,KS_NONE},
++ {"P","前一個",KS_PREVMSG}, {"N","後一個",KS_NEXTMSG},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"F","轉寄",KS_FORWARD}, {"J","跳至",KS_JUMPTOMSG},
++ {"Y","列印",KS_PRINT}, {"S","儲存",KS_SAVE},
+
+- {"?","Help",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
+- {"E","Export",KS_EXPORT}, {"C","Compose",KS_COMPOSER},
++ {"?","輔助說明",KS_SCREENHELP}, {"O","OTHER CMDS",KS_NONE},
++ {"E","匯出",KS_EXPORT}, {"C","編輯",KS_COMPOSER},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"I","Index",KS_FLDRINDEX}, {"W","WhereIs",KS_WHEREIS},
++ {"I","索引",KS_FLDRINDEX}, {"W","搜尋",KS_WHEREIS},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE}};
+ INST_KEY_MENU(nr_view_keymenu, nr_view_keys);
+
+ static struct key text_att_view_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Viewer",KS_EXITMODE}, {NULL,NULL,KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","離開",KS_EXITMODE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"Y","prYnt",KS_PRINT}, {"S","Save",KS_SAVE},
+- {"|","Pipe",KS_NONE}, {"W", "WhereIs",KS_WHEREIS}};
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"Y","列印",KS_PRINT}, {"S","儲存",KS_SAVE},
++ {"|","Pipe",KS_NONE}, {"W", "搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(text_att_view_keymenu, text_att_view_keys);
+ #define ATT_SAVE_KEY 9
+ #define ATT_PIPE_KEY 10
+
+
+ static struct key simple_view_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"Q","Quit Viewer",KS_NONE}, {NULL,NULL,KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"Q","離開",KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"F","Fwd Email",KS_FORWARD}, {"S","Save",KS_SAVE},
+- {NULL,NULL,KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"F","轉寄",KS_FORWARD}, {"S","儲存",KS_SAVE},
++ {NULL,NULL,KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(simple_view_keymenu, simple_view_keys);
+ #define SAVE_KEY 9
+
+@@ -2342,7 +2342,7 @@
+ }
+ if(style == HelpText || style == MainHelpText
+ || style == ComposerHelpText) {
+- q_status_message(SM_ORDER, 0, 5, "Already in Help");
++ q_status_message(SM_ORDER, 0, 5, "已經在輔助選單中");
+ break;
+ }
+
+@@ -2722,7 +2722,7 @@
+ }
+ else if((ch == 'z' || ch == PF10) && style == MainHelpText){
+ print_all_help();
+- }else if(!ps_global->nr_mode && (ch == PF3 || ch == 'e')) {
++ }else if(!ps_global->nr_mode && (ch == PF3 || ch == 'e' || ch == KEY_LEFT)) {
+ /*----------- Done -----------*/
+ done = 1;
+ }else if((ch == 'y' && !ps_global->anonymous) ||
+@@ -2843,8 +2843,8 @@
+ int rc;
+ static char search_string[MAX_SEARCH+1] = { '\0' };
+ static ESCKEY_S word_search_key[] = { { 0, 0, "", "" },
+- {ctrl('Y'), 10, "^Y", "First Line"},
+- {ctrl('V'), 11, "^V", "Last Line"},
++ {ctrl('Y'), 10, "^Y", "第一行"},
++ {ctrl('V'), 11, "^V", "最後一行"},
+ {-1, 0, NULL, NULL}
+ };
+
diff --git a/chinese/pine4/files/patch-be b/chinese/pine4/files/patch-be
new file mode 100644
index 000000000000..e15dc1315223
--- /dev/null
+++ b/chinese/pine4/files/patch-be
@@ -0,0 +1,395 @@
+--- pine/other.c.orig Thu Jul 11 07:05:59 1996
++++ pine/other.c Sat Jan 17 21:08:31 1998
+@@ -248,8 +248,8 @@
+ char prompt[50];
+
+ sprintf(prompt,
+- "%s password to LOCK keyboard %s: ",
+- i ? "Retype" : "Enter",
++ "%s鎖定鍵盤的密碼 %s: ",
++ i ? "重新輸入" : "輸入",
+ i > 1 ? "(Yes, again) " : "");
+
+ rc = optionally_enter(pw, -FOOTER_ROWS(ps), 0, 30, 0, 1,
+@@ -506,8 +506,8 @@
+ char *rstr = NULL;
+ void (*redraw)() = ps_global->redrawer;
+ static ESCKEY_S opts[] = {
+- {'y', 'y', "Y", "Yes"},
+- {'n', 'n', "N", "No"},
++ {'y', 'y', "Y", "是"},
++ {'n', 'n', "N", "否"},
+ {-1, 0, NULL, NULL}
+ };
+
+@@ -515,18 +515,18 @@
+ fix_windsize(ps_global);
+
+ while(1){
+- rv = radio_buttons("Exit editor and apply changes? ",
++ rv = radio_buttons("結束編輯並套用改變? ",
+ -FOOTER_ROWS(ps_global), opts,
+ 'y', 'x', NO_HELP, RB_NORM);
+ if(rv == 'y'){ /* user ACCEPTS! */
+ break;
+ }
+ else if(rv == 'n'){ /* Declined! */
+- rstr = "No Changes Saved";
++ rstr = "改變並未存檔";
+ break;
+ }
+ else if(rv == 'x'){ /* Cancelled! */
+- rstr = "Exit Cancelled";
++ rstr = "取消";
+ break;
+ }
+ }
+@@ -542,39 +542,39 @@
+ */
+
+ static struct key config_text_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Config",KS_EXITMODE},{"C","[Change Val]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
+- {"A","Add Value",KS_NONE}, {"D","Delete Val",KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"W","WhereIs",KS_WHEREIS}};
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","停止設定",KS_EXITMODE},{"C","[修改設定值]",KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
++ {"A","加入設定值",KS_NONE}, {"D","刪除設定值",KS_NONE},
++ {"Y","列印",KS_PRINT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(config_text_keymenu, config_text_keys);
+
+ static struct key config_checkbox_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Config",KS_EXITMODE},{"X","[Set/Unset]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","停止設定",KS_EXITMODE},{"X","[設定/取消設定]",KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"W","WhereIs",KS_WHEREIS}};
++ {"Y","列印",KS_PRINT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(config_checkbox_keymenu, config_checkbox_keys);
+
+ static struct key config_radiobutton_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Config",KS_EXITMODE},{"*","[Select]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","停止設定",KS_EXITMODE},{"*","[選擇]",KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"W","WhereIs",KS_WHEREIS}};
++ {"Y","列印",KS_PRINT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(config_radiobutton_keymenu, config_radiobutton_keys);
+
+ static struct key config_yesno_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+- {"E","Exit Config",KS_EXITMODE},{"C","[Change]",KS_NONE},
+- {"P","Prev", KS_NONE}, {"N","Next", KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {"E","停止設定",KS_EXITMODE},{"C","[修改]",KS_NONE},
++ {"P","前一個", KS_NONE}, {"N","後一個", KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"W","WhereIs",KS_WHEREIS}};
++ {"Y","列印",KS_PRINT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(config_yesno_keymenu, config_yesno_keys);
+
+ /*
+@@ -1137,21 +1137,21 @@
+
+ #ifndef DOS
+ static struct key printer_edit_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"Y","prYnt",KS_PRINT},
+- {"E","Exit Config",KS_EXITMODE},{"S","[Select]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"Y","列印",KS_PRINT},
++ {"E","停止設定",KS_EXITMODE},{"S","[Select]",KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {"A","Add Printer",KS_NONE}, {"D","DeletePrint",KS_NONE},
+- {"C","Change",KS_SELECT}, {"W","WhereIs",KS_WHEREIS}};
++ {"C","Change",KS_SELECT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(printer_edit_keymenu, printer_edit_keys);
+
+ static struct key printer_select_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"Y","prYnt",KS_PRINT},
+- {"E","Exit Config",KS_EXITMODE},{"S","[Select]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"Y","列印",KS_PRINT},
++ {"E","停止設定",KS_EXITMODE},{"S","[Select]",KS_NONE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {NULL,NULL,KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {NULL,NULL,KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(printer_select_keymenu, printer_select_keys);
+
+ /*
+@@ -1604,12 +1604,12 @@
+
+
+ static struct key flag_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {NULL,NULL,KS_NONE},
+ {"E","Exit Flags",KS_EXITMODE}, {"X","[Set/Unset]",KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {"Y","prYnt",KS_PRINT}, {"W","WhereIs",KS_WHEREIS}};
++ {"Y","列印",KS_PRINT}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(flag_keymenu, flag_keys);
+
+ /*----------------------------------------------------------------------
+@@ -2139,7 +2139,7 @@
+ "%s can't change options or settings",
+ ps_global->restricted ? "Pine demo"
+ : "Config file not editable,");
+- if(ch == 'e' || ch == PF3){
++ if(ch == 'e' || ch == PF3 || ch == KEY_LEFT){
+ retval = 0;
+ done++;
+ }
+@@ -2717,7 +2717,7 @@
+ }
+
+ sprintf(prompt,
+- "Enter text to insert before \"%.*s\": ",k,tmpval);
++ "鍵入要插在 \"%.*s\" 之前的文字: ",k,tmpval);
+ }
+ else if((*cl)->var->is_list
+ && !(*cl)->var->user_val.l
+@@ -2726,13 +2726,13 @@
+ ekey[0].ch = 'r';
+ ekey[0].rval = 'r';
+ ekey[0].name = "R";
+- ekey[0].label = "Replace";
++ ekey[0].label = "取代";
+ ekey[1].ch = 'a';
+ ekey[1].rval = 'a';
+ ekey[1].name = "A";
+- ekey[1].label = "Add To";
++ ekey[1].label = "加至";
+ ekey[2].ch = -1;
+- strcpy(prompt, "Replace or Add To default value ? ");
++ strcpy(prompt, "取代(R)或加至(A)預設值 ? ");
+ switch(radio_buttons(prompt, -FOOTER_ROWS(ps), ekey, 'a', 'x',
+ h_config_replace_add, RB_NORM)){
+ case 'a':
+@@ -2746,14 +2746,14 @@
+ }
+
+ add_text:
+- sprintf(prompt, "Enter the %stext to be added : ",
+- flags&CF_NUMBER ? "numeric " : "");
++ sprintf(prompt, "輸入想加入的%s字 : ",
++ flags&CF_NUMBER ? "數" : "文");
+ break;
+
+ case 'r':
+ replace_text:
+- sprintf(prompt, "Enter the %sreplacement text : ",
+- flags&CF_NUMBER ? "numeric " : "");
++ sprintf(prompt, "輸入想取代的%s字 : ",
++ flags&CF_NUMBER ? "數" : "文");
+ break;
+
+ case 'x':
+@@ -2763,8 +2763,8 @@
+ }
+ }
+ else
+- sprintf(prompt, "Enter the %stext to be added : ",
+- flags&CF_NUMBER ? "numeric " : "");
++ sprintf(prompt, "輸入想加入的%s字 : ",
++ flags&CF_NUMBER ? "數" : "文");
+
+ ps->mangled_footer = 1;
+ help = NO_HELP;
+@@ -2880,8 +2880,8 @@
+ }
+
+ sprintf(prompt,
+- "Enter text to insert %s \"%.*s\": ",
+- after ? "after" : "before", k, tmpval);
++ "輸入想要插在 \"%.*s\" %s的文字: ",
++ k, tmpval, after ? "之後" : "之前");
+ continue;
+ }
+ else if(i == ctrl('P')){
+@@ -2995,7 +2995,8 @@
+ : "<NULL VALUE>",
+ (*cl)->var->name);
+ else
+- sprintf(prompt, "Really delete %s%.20s from %.30s ",
++ sprintf(prompt, "確定 自 %.30s 刪除 %s%.20s",
++ (*cl)->var->name,
+ (*cl)->var->is_list ? "item " : "",
+ (*cl)->var->is_list
+ ? int2string((*cl)->varmem + 1)
+@@ -3003,8 +3004,7 @@
+ ? (!*(*cl)->var->user_val.p)
+ ? empty_val2
+ : (*cl)->var->user_val.p
+- : "<NULL VALUE>",
+- (*cl)->var->name);
++ : "<NULL VALUE>");
+
+ ps->mangled_footer = 1;
+ if(want_to(prompt, 'n', 'n', NO_HELP, 0, 1) == 'y'){
+@@ -3213,6 +3213,7 @@
+
+ break;
+
++ /* case KEY_LEFT:*/
+ case 'e' : /* exit */
+ case PF3 :
+ rv = config_exit_cmd(flags);
+@@ -3498,6 +3499,7 @@
+
+ break;
+
++ case KEY_LEFT:
+ case 'e' : /* exit */
+ case PF3 :
+ rv = config_exit_cmd(flags);
+@@ -3542,6 +3544,7 @@
+ rv = 1;
+ break;
+
++ case KEY_LEFT:
+ case 'e' : /* exit */
+ case PF3 :
+ rv = flag_exit_cmd(flags);
+@@ -3678,6 +3681,7 @@
+
+ break;
+
++ case KEY_LEFT:
+ case 'e' : /* exit */
+ case PF3 :
+ rv = config_exit_cmd(flags);
+@@ -3749,6 +3753,7 @@
+
+ break;
+
++ case KEY_LEFT:
+ case 'e' : /* exit */
+ case PF3 :
+ rv = config_exit_cmd(flags);
+@@ -3775,6 +3780,7 @@
+ struct variable *vtmp;
+
+ switch(cmd){
++ case KEY_LEFT:
+ case 'e':
+ case PF3:
+ retval = config_exit_cmd(flags);
+@@ -3914,20 +3920,20 @@
+ int maxwidth = min(80,ps->ttyo->screen_cols) - 15;
+
+ if((*cl)->var->user_val.l && (*cl)->value){
+- strcpy(prompt, "Enter printer name : ");
++ strcpy(prompt, "輸入印表機名稱 : ");
+ }
+ else if(!(*cl)->var->user_val.l && (*cl)->var->current_val.l){
+ /* Add to list which doesn't exist, but default does exist */
+ ekey[0].ch = 'r';
+ ekey[0].rval = 'r';
+ ekey[0].name = "R";
+- ekey[0].label = "Replace";
++ ekey[0].label = "取代";
+ ekey[1].ch = 'a';
+ ekey[1].rval = 'a';
+ ekey[1].name = "A";
+- ekey[1].label = "Add To";
++ ekey[1].label = "加至";
+ ekey[2].ch = -1;
+- strcpy(prompt, "Replace or Add To default value ? ");
++ strcpy(prompt, "取代(R)或加至(A)預設值 ? ");
+ switch(i = radio_buttons(prompt, -FOOTER_ROWS(ps), ekey, 'a',
+ 'x', h_config_replace_add, RB_NORM)){
+ case 'a':
+@@ -3951,7 +3957,7 @@
+ break;
+
+ case 'x':
+- q_status_message(SM_ORDER,0,3,"Add cancelled");
++ q_status_message(SM_ORDER,0,3,"取消加入的動作");
+ break;
+ }
+
+@@ -3985,7 +3991,7 @@
+ removing_trailing_white_space(name);
+ }
+ else if(i == 1){
+- q_status_message(SM_ORDER,0,3,"Add cancelled");
++ q_status_message(SM_ORDER,0,3,"取消加入的動作");
+ }
+ else if(i == 3){
+ help = (help == NO_HELP) ? h_config_insert_after : NO_HELP;
+@@ -4051,7 +4057,7 @@
+ "Can't add %s to list", empty_val);
+ }
+ else if(i == 1){
+- q_status_message(SM_ORDER,0,3,"Add cancelled");
++ q_status_message(SM_ORDER,0,3,"取消加入的動作");
+ }
+ else if(i == 3){
+ help = help == NO_HELP ? h_config_print_cmd : NO_HELP;
+@@ -4076,7 +4082,7 @@
+ if(!(*cl)->var->user_val.l && (*cl)->var->current_val.l){
+ char pmt[40];
+
+- sprintf(pmt, "Override default with %s", empty_val2);
++ sprintf(pmt, "將預設值以 %s 蓋\過", empty_val2);
+ if(want_to(pmt, 'n', 'n', NO_HELP, 0, 1) == 'y'){
+ char **ltmp;
+
+@@ -4102,7 +4108,7 @@
+ fs_give((void **)&p);
+ }
+ else
+- sprintf(prompt, "Really delete item %.20s from printer list ",
++ sprintf(prompt, "確定自列印列表中刪除 %.20s ",
+ int2string((*cl)->varmem + 1));
+
+ ps->mangled_footer = 1;
+@@ -4371,6 +4377,7 @@
+
+ break;
+
++ case KEY_LEFT:
+ case 'e': /* exit */
+ case PF3:
+ rv = config_exit_cmd(flags);
+@@ -5776,12 +5783,12 @@
+
+
+ static struct key gripe_keys[] =
+- {{"?","Help",KS_SCREENHELP}, {"^C","Cancel",KS_NONE},
++ {{"?","輔助說明",KS_SCREENHELP}, {"^C","取消",KS_NONE},
+ {NULL,NULL,KS_NONE}, {"S",NULL,KS_NONE},
+- {"P","Prev",KS_NONE}, {"N","Next",KS_NONE},
+- {"-","PrevPage",KS_PREVPAGE}, {"Spc","NextPage",KS_NEXTPAGE},
++ {"P","前一個",KS_NONE}, {"N","後一個",KS_NONE},
++ {"-","上一頁",KS_PREVPAGE}, {"Spc","下一頁",KS_NEXTPAGE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+- {NULL,NULL,KS_NONE}, {"W","WhereIs",KS_WHEREIS}};
++ {NULL,NULL,KS_NONE}, {"W","搜尋",KS_WHEREIS}};
+ INST_KEY_MENU(gripe_keymenu, gripe_keys);
+ #define SELECT_KEY 3
+
diff --git a/chinese/pine4/files/patch-bf b/chinese/pine4/files/patch-bf
new file mode 100644
index 000000000000..7cefb4ba2bd3
--- /dev/null
+++ b/chinese/pine4/files/patch-bf
@@ -0,0 +1,142 @@
+--- pine/pine.c.orig Thu Feb 27 06:50:46 1997
++++ pine/pine.c Sat Jan 17 21:09:06 1998
+@@ -190,30 +190,30 @@
+
+
+ static struct key main_keys[] =
+- {{"?","Help",KS_SCREENHELP},
+- {"O","OTHER CMDS",KS_NONE},
++ {{"?","說明",KS_SCREENHELP},
++ {"O","其它命令",KS_NONE},
+ {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE},
+- {"P","PrevCmd",KS_NONE},
+- {"N","NextCmd",KS_NONE},
++ {"P","前一個命令",KS_NONE},
++ {"N","後一個命令",KS_NONE},
+ {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE},
+- {"R","RelNotes",KS_NONE},
+- {"K","KBLock",KS_NONE},
++ {"R","版權說明",KS_NONE},
++ {"K","鍵盤鎖定",KS_NONE},
+ {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE},
+
+- {"?","Help",KS_SCREENHELP},
+- {"O","OTHER CMDS",KS_NONE},
+- {"Q","Quit",KS_EXIT},
+- {"C","Compose",KS_COMPOSER},
+- {"L","ListFldrs",KS_FLDRLIST},
+- {"G","GotoFldr",KS_GOTOFLDR},
+- {"I","Index",KS_FLDRINDEX},
++ {"?","說明",KS_SCREENHELP},
++ {"O","其它命令",KS_NONE},
++ {"Q","離開",KS_EXIT},
++ {"C","寫信",KS_COMPOSER},
++ {"L","列出信件",KS_FLDRLIST},
++ {"G","進入信件夾",KS_GOTOFLDR},
++ {"I","索引",KS_FLDRINDEX},
+ {"J","Journal",KS_REVIEW},
+- {"S","Setup",KS_NONE},
+- {"A","AddrBook",KS_ADDRBOOK},
+- {"B","Report Bug",KS_NONE},
++ {"S","設定",KS_NONE},
++ {"A","地址簿",KS_ADDRBOOK},
++ {"B","錯誤回報",KS_NONE},
+ {NULL,NULL,KS_NONE}};
+ INST_KEY_MENU(main_keymenu, main_keys);
+ #define MAIN_HELP_KEY 0
+@@ -916,25 +916,25 @@
+ unsigned int key; /* alpha key that invokes this action */
+ unsigned int keymenu_number; /* index into keymenu array for this cmd */
+ } mkeys[] = {
+- {" %s HELP - Get help using Pine",
++ {" %s 使用說明 - PINE 的使用說明",
+ NULL, PF1, '?', MAIN_HELP_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s COMPOSE MESSAGE - Compose and send%s a message",
++ {" %s 寫信 - 寫信或是發表文章",
+ "/post", OPF4, 'C', MAIN_COMPOSE_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s FOLDER INDEX - View messages in current folder",
++ {" %s 查看信件夾 - 查看目前信件夾內的信件",
+ NULL, OPF7, 'I', MAIN_INDEX_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s FOLDER LIST - Select a folder%s to view",
++ {" %s 信件夾列表 - 列出信件夾或是 NEWS GROUP 以供選擇",
+ " OR news group", OPF5, 'L', MAIN_FOLDER_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s ADDRESS BOOK - Update address book",
++ {" %s 地址簿 - 更新或修改地址簿的內容",
+ NULL, OPF10, 'A', MAIN_ADDRESS_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s SETUP - Configure or update Pine",
++ {" %s 設定 PINE - 設定 PINE 的架構或是內部參數",
+ NULL, OPF9, 'S', MAIN_SETUP_KEY},
+ {"", NULL, UNUSED, UNUSED, UNUSED},
+- {" %s QUIT - Exit the Pine program",
++ {" %s 離開 PINE - 結束 PINE 的使用",
+ NULL, OPF3, 'Q', MAIN_QUIT_KEY},
+ {NULL, NULL, UNUSED, UNUSED, UNUSED}
+ };
+@@ -1103,7 +1103,7 @@
+ ch = PF2OPF(ch);
+
+ /*----- Validate the command ----*/
+- if(ch == ctrl('M') || ch == ctrl('J') || ch == PF4){
++ if(ch == ctrl('M') || ch == ctrl('J') || ch == PF4 || ch == KEY_RIGHT){
+ ch = F_ON(F_USE_FK,pine_state)
+ ? mkeys[current_default_menu_item].f_key
+ : mkeys[current_default_menu_item].key;
+@@ -1302,6 +1302,7 @@
+ #endif /* !NO_KEYBOARD_LOCK */
+
+ /*---------- Quit pine ----------*/
++ case KEY_LEFT:
+ case OPF3:
+ case 'q':
+ quit_case :
+@@ -1683,11 +1684,11 @@
+ {
+ char prompt[80];
+ char letters[20];
+- char *printer = "Printer";
+- char *passwd = "Newpassword";
+- char *config = "Config";
+- char *update = "Update";
+- char *sigedit = "Signature";
++ char *printer = "*印表機";
++ char *passwd = "設定新密碼";
++ char *config = "環境設定";
++ char *update = "更新環境";
++ char *sigedit = "簽名檔";
+ HelpType help = h_mini_setup;
+ int deefault = 'p';
+ int s, ekey_num;
+@@ -1758,13 +1759,13 @@
+ }
+
+ sprintf(prompt,
+- "Choose a setup task from %s : ",
+- F_ON(F_BLANK_KEYMENU,ps_global) ? letters : "the menu below");
++ "請從%s選擇你所要設定的工作 :",
++ F_ON(F_BLANK_KEYMENU,ps_global) ? letters : "下列表單中");
+
+ s = radio_buttons(prompt, ql, setup_names, deefault, 'x', help, RB_NORM);
+ /* ^C */
+ if(s == 'x') {
+- q_status_message(SM_ORDER,0,3,"Setup command cancelled");
++ q_status_message(SM_ORDER,0,3,"設定指令已取消");
+ s = 'e';
+ }
+
+@@ -2104,7 +2105,7 @@
+ dprint(1, (debugfile, "\n\n ---- QUIT SCREEN ----\n"));
+
+ if(!pine_state->nr_mode && F_OFF(F_QUIT_WO_CONFIRM,pine_state)
+- && want_to("Really quit pine", 'y', 0, NO_HELP, 0, 0) != 'y') {
++ && want_to("真的要離開本程式嗎?", 'y', 0, NO_HELP, 0, 0) != 'y') {
+ pine_state->next_screen = pine_state->prev_screen;
+ return;
+ }
diff --git a/chinese/pine4/files/patch-bg b/chinese/pine4/files/patch-bg
new file mode 100644
index 000000000000..b76ec9708c5f
--- /dev/null
+++ b/chinese/pine4/files/patch-bg
@@ -0,0 +1,11 @@
+--- pine/screen.c.orig Wed May 8 09:05:40 1996
++++ pine/screen.c Sat Jan 17 21:09:32 1998
+@@ -380,7 +380,7 @@
+
+
+ static struct key cancel_keys[] =
+- {{NULL,NULL,KS_NONE}, {"^C","Cancel",KS_NONE},
++ {{NULL,NULL,KS_NONE}, {"^C","取消",KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
diff --git a/chinese/pine4/files/patch-bh b/chinese/pine4/files/patch-bh
new file mode 100644
index 000000000000..6f0e2b76d698
--- /dev/null
+++ b/chinese/pine4/files/patch-bh
@@ -0,0 +1,20 @@
+--- pine/signals.c.orig Wed Jun 5 12:47:21 1996
++++ pine/signals.c Sat Jan 17 21:23:52 1998
+@@ -493,7 +493,7 @@
+ int retval = 1;
+
+ dprint(9,(debugfile, "busy_alarm(%d, %s, %p, %d)\n",
+- seconds, msg ? msg : "Busy", pc_func, init_msg));
++ seconds, msg ? msg : "請稍後", pc_func, init_msg));
+
+ /*
+ * If we're already busy'ing, and we don't have something special,
+@@ -517,7 +517,7 @@
+ final_message = 1;
+ }
+ else{
+- strcpy(busy_message, "Busy");
++ strcpy(busy_message, "請稍後");
+ final_message = 0;
+ }
+
diff --git a/chinese/pine4/files/patch-bi b/chinese/pine4/files/patch-bi
new file mode 100644
index 000000000000..47bef19c93bd
--- /dev/null
+++ b/chinese/pine4/files/patch-bi
@@ -0,0 +1,31 @@
+--- pine/status.c.orig Tue Feb 25 05:57:40 1997
++++ pine/status.c Sat Jan 17 21:24:26 1998
+@@ -829,8 +829,8 @@
+ * want_to's array passed to radio_buttions...
+ */
+ static ESCKEY_S yorn[] = {
+- {'y', 'y', "Y", "Yes"},
+- {'n', 'n', "N", "No"},
++ {'y', 'y', "Y", "是"},
++ {'n', 'n', "N", "否"},
+ {-1, 0, NULL, NULL}
+ };
+
+@@ -1021,7 +1021,7 @@
+ memset(fkey_table, NO_OP_COMMAND, 12 * sizeof(int));
+ if(help_text != NO_HELP){ /* if shown, always at position 0 */
+ rb_keymenu.keys[0].name = "?";
+- rb_keymenu.keys[0].label = "Help";
++ rb_keymenu.keys[0].label = "輔助說明";
+ setbitn(0, bitmap);
+ fkey_table[0] = ctrl('G');
+ start++;
+@@ -1029,7 +1029,7 @@
+
+ if(on_ctrl_C){ /* if shown, always at position 1 */
+ rb_keymenu.keys[1].name = "^C";
+- rb_keymenu.keys[1].label = "Cancel";
++ rb_keymenu.keys[1].label = "取消";
+ setbitn(1, bitmap);
+ fkey_table[1] = ctrl('C');
+ start++;
diff --git a/chinese/pine4/files/patch-bj b/chinese/pine4/files/patch-bj
new file mode 100644
index 000000000000..ca71372d9b9f
--- /dev/null
+++ b/chinese/pine4/files/patch-bj
@@ -0,0 +1,13 @@
+--- pine/ttyin.c.orig Tue Feb 25 05:57:44 1997
++++ pine/ttyin.c Sat Jan 17 21:25:02 1998
+@@ -1645,8 +1645,8 @@
+
+
+ static struct key oe_keys[] =
+- {{"^G","Help",KS_SCREENHELP}, {"^C","Cancel",KS_NONE},
+- {"^T","xxx",KS_NONE}, {"Ret","Accept",KS_NONE},
++ {{"^G","輔助說明",KS_SCREENHELP}, {"^C","取消",KS_NONE},
++ {"^T","xxx",KS_NONE}, {"Ret","同意",KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
+ {NULL,NULL,KS_NONE}, {NULL,NULL,KS_NONE},
diff --git a/chinese/pine4/pkg-plist b/chinese/pine4/pkg-plist
index 8d37f239c399..beb5eca57bae 100644
--- a/chinese/pine4/pkg-plist
+++ b/chinese/pine4/pkg-plist
@@ -7,6 +7,7 @@ bin/pgpencrypt
bin/pgpdecode
bin/pgpsign
etc/dot.pinerc.pgp.sample
+etc/pine.conf.fixed
man/man1/pico.1.gz
man/man1/pilot.1.gz
man/man1/pine.1.gz