Compare commits

..

13 Commits

Author SHA1 Message Date
1887d42a78 Merge pull request #58 from cypherbits/new-encryption
New generation AES256-GCM encryption by libsodium. PHP >= 7.2 needed
2020-05-02 18:32:50 +02:00
95fd504249 Merge pull request #60 from cypherbits/header_security
Add more security headers
2020-05-02 18:28:44 +02:00
c728d6d447 Merge pull request #59 from cypherbits/link_privacy
Add chat link privacy with noreferrer and noopener
2020-05-02 18:27:57 +02:00
95c1faf1d9 Correctly calculate frameset hight for non-upload enabled users 2020-05-02 18:23:35 +02:00
c5e55e8bc0 add more security headers 2020-05-02 18:11:35 +02:00
1cdf6cbf55 add chat link privacy with noreferrer and noopener 2020-05-02 17:25:09 +02:00
7adf9732ef fix... 2020-05-02 13:53:17 +02:00
f0659466c1 openssl to libsodium 2020-05-02 13:30:29 +02:00
0963acafcf New generation AES256-GCM encryption by libsodium. PHP >= 7.3 needed. 2020-05-02 12:16:36 +02:00
d58fdeee8b Added example CSS that moves the chatters list to the right 2020-04-12 12:45:39 +02:00
e0d6fe5d91 Merge pull request #57 from infoabcd/master
Full Chinese translation
2020-04-11 11:21:38 +02:00
f605137313 Add files via upload 2020-04-11 08:09:12 +08:00
03f9a86515 Allow making file upload member-only and added required tag to captcha input 2020-02-29 14:26:48 +01:00
14 changed files with 292 additions and 291 deletions

View File

@ -1,3 +1,6 @@
Allow making file upload member-only
Added required tag to captcha input
Version 1.23.7 - Feb. 24, 2019
Support V3 hidden services
Fixed filtermodkick setting

2
README
View File

@ -42,7 +42,7 @@ Optionally, you can install:
- the json extension for save/restore
- a memcached server and the memcached extension and change the configuaration to use memcached. This will lessen the database load a bit.
- a MySQL or PostgreSQL server to use as an external database instead of SQLite
- the openssl extension for encryption of messages and notes in the database
- the libsodium extension for encryption of messages and notes in the database (bundled with PHP >= 7.2)
When you have everything installed and use MySQL or PostgreSQL, you'll have to create a database and a user for the chat.
Then edit the configuration at the bottom of the script to reflect the appropriate database settings and to modify the chat settings the way you like them.
Then copy the script to your web-server directory and call the script in your browser with a parameter like this:

View File

@ -45,7 +45,7 @@ Optionally, you can install:
- the json extension for save/restore
- a memcached server and the memcached extension and change the configuaration to use memcached. This will lessen the database load a bit.
- a MySQL or PostgreSQL server to use as an external database instead of SQLite
- the openssl extension for encryption of messages and notes in the database
- the libsodium extension (PHP >= 7.2) for encryption of messages and notes in the database
When you have everything installed and use MySQL or PostgreSQL, you'll have to create a database and a user for the chat.
Then edit the configuration at the bottom of the script to reflect the appropriate database settings and to modify the chat settings the way you like them.
Then copy the script to your web-server directory and call the script in your browser with a parameter like this:

View File

@ -222,10 +222,10 @@ function route_setup(){
if(!valid_admin()){
send_alogin();
}
$C['bool_settings']=['suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'sendmail', 'modfallback', 'disablepm', 'eninbox', 'enablegreeting', 'sortupdown', 'hidechatters', 'enfileupload', 'personalnotes', 'filtermodkick'];
$C['bool_settings']=['suguests', 'imgembed', 'timestamps', 'trackip', 'memkick', 'forceredirect', 'incognito', 'sendmail', 'modfallback', 'disablepm', 'eninbox', 'enablegreeting', 'sortupdown', 'hidechatters', 'personalnotes', 'filtermodkick'];
$C['colour_settings']=['colbg', 'coltxt'];
$C['msg_settings']=['msgenter', 'msgexit', 'msgmemreg', 'msgsureg', 'msgkick', 'msgmultikick', 'msgallkick', 'msgclean', 'msgsendall', 'msgsendmem', 'msgsendmod', 'msgsendadm', 'msgsendprv', 'msgattache'];
$C['number_settings']=['memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes', 'maxuploadsize'];
$C['number_settings']=['memberexpire', 'guestexpire', 'kickpenalty', 'entrywait', 'captchatime', 'messageexpire', 'messagelimit', 'maxmessage', 'maxname', 'minpass', 'defaultrefresh', 'numnotes', 'maxuploadsize', 'enfileupload'];
$C['textarea_settings']=['rulestxt', 'css', 'disabletext'];
$C['text_settings']=['dateformat', 'captchachars', 'redirect', 'chatname', 'mailsender', 'mailreceiver', 'nickregex', 'passregex', 'externalcss'];
$C['settings']=array_merge(['guestaccess', 'englobalpass', 'globalpass', 'captcha', 'dismemcaptcha', 'topic', 'guestreg', 'defaulttz'], $C['bool_settings'], $C['colour_settings'], $C['msg_settings'], $C['number_settings'], $C['textarea_settings'], $C['text_settings']); // All settings in the database
@ -499,7 +499,7 @@ function send_captcha(){
imagegif($im);
imagedestroy($im);
echo base64_encode(ob_get_clean()).'">';
echo '</td><td>'.hidden('challenge', $randid).'<input type="text" name="captcha" size="15" autocomplete="off"></td></tr>';
echo '</td><td>'.hidden('challenge', $randid).'<input type="text" name="captcha" size="15" autocomplete="off" required></td></tr>';
}
function send_setup($C){
@ -768,7 +768,7 @@ function restore_backup($C){
$note['type']=1;
}
if(MSGENCRYPTED){
$note['text']=openssl_encrypt($note['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$note['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($note['text'], '', AES_IV, ENCRYPTKEY));
}
$stmt->execute([$note['type'], $note['lastedited'], $note['editedby'], $note['text']]);
}
@ -804,7 +804,7 @@ function send_backup($C){
$result=$db->query('SELECT * FROM ' . PREFIX . "notes;");
while($note=$result->fetch(PDO::FETCH_ASSOC)){
if(MSGENCRYPTED){
$note['text']=openssl_decrypt($note['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$note['text']=sodium_crypto_aead_aes256gcm_decrypt(base64_decode($note['text']), null, AES_IV, ENCRYPTKEY);
}
$code['notes'][]=$note;
}
@ -1415,7 +1415,7 @@ function send_frameset(){
}else{
$bottom='';
}
if(($U['status']>=5 || ($U['status']>2 && get_count_mods()==0)) && get_setting('enfileupload')){
if(($U['status']>=5 || ($U['status']>2 && get_count_mods()==0)) && get_setting('enfileupload')>0 && get_setting('enfileupload')<=$U['status']){
$postheight=120;
}else{
$postheight=100;
@ -1539,7 +1539,7 @@ function send_notes($type){
}
if(isset($_REQUEST['text'])){
if(MSGENCRYPTED){
$_REQUEST['text']=openssl_encrypt($_REQUEST['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$_REQUEST['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($_REQUEST['text'], '', AES_IV, ENCRYPTKEY));
}
$time=time();
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'notes (type, lastedited, editedby, text) VALUES (?, ?, ?, ?);');
@ -1573,7 +1573,7 @@ function send_notes($type){
$note['text']='';
}
if(MSGENCRYPTED){
$note['text']=openssl_decrypt($note['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$note['text']=sodium_crypto_aead_aes256gcm_decrypt(base64_decode($note['text']), null, AES_IV, ENCRYPTKEY);
}
echo "</p>".form('notes');
echo "$hiddendo<textarea name=\"text\">".htmlspecialchars($note['text']).'</textarea><br>';
@ -1766,7 +1766,7 @@ function send_post($rejected=''){
}
}
echo '</select></td>';
if(get_setting('enfileupload')){
if(get_setting('enfileupload')>0 && get_setting('enfileupload')<=$U['status']){
if(!$disablepm && ($U['status']>=5 || ($U['status']>=3 && get_count_mods()==0 && get_setting('memkick')))){
echo '</tr></table><table><tr id="secondline">';
}
@ -2910,7 +2910,7 @@ function validate_input(){
$message=apply_filter($message, $poststatus, $U['nickname']);
$message=create_hotlinks($message);
$message=apply_linkfilter($message);
if(isset($_FILES['file']) && get_setting('enfileupload')){
if(isset($_FILES['file']) && get_setting('enfileupload')>0 && get_setting('enfileupload')<=$U['status']){
if($_FILES['file']['error']===UPLOAD_ERR_OK && $_FILES['file']['size']<=(1024*get_setting('maxuploadsize'))){
$hash=sha1_file($_FILES['file']['tmp_name']);
$name=htmlspecialchars($_FILES['file']['name']);
@ -2932,7 +2932,7 @@ function validate_input(){
'text' =>"<span class=\"usermsg\">$displaysend".style_this($message, $U['style']).'</span>'
];
if(MSGENCRYPTED){
$newmessage['text']=openssl_encrypt($newmessage['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$newmessage['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($newmessage['text'], '', AES_IV, ENCRYPTKEY));
}
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'inbox (postdate, postid, poster, recipient, text) VALUES(?, ?, ?, ?, ?)');
$stmt->execute([$newmessage['postdate'], $id[0], $newmessage['poster'], $newmessage['recipient'], $newmessage['text']]);
@ -3030,9 +3030,9 @@ function create_hotlinks($message){
$message=preg_replace_callback('/<<([^<>]+)>>/u',
function ($matches){
if(strpos($matches[1], '://')===false){
return "<a href=\"http://$matches[1]\" target=\"_blank\">$matches[1]</a>";
return "<a href=\"http://$matches[1]\" target=\"_blank\" rel=\"noreferrer noopener\">$matches[1]</a>";
}else{
return "<a href=\"$matches[1]\" target=\"_blank\">$matches[1]</a>";
return "<a href=\"$matches[1]\" target=\"_blank\" rel=\"noreferrer noopener\">$matches[1]</a>";
}
}
, $message);
@ -3120,7 +3120,7 @@ function add_system_message($mes){
function write_message($message){
global $db;
if(MSGENCRYPTED){
$message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($message['text'], '', AES_IV, ENCRYPTKEY));
}
$stmt=$db->prepare('INSERT INTO ' . PREFIX . 'messages (postdate, poststatus, poster, recipient, text, delstatus) VALUES (?, ?, ?, ?, ?, ?);');
$stmt->execute([$message['postdate'], $message['poststatus'], $message['poster'], $message['recipient'], $message['text'], $message['delstatus']]);
@ -3241,7 +3241,7 @@ function print_messages($delstatus=0){
function prepare_message_print(&$message, $removeEmbed){
if(MSGENCRYPTED){
$message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=sodium_crypto_aead_aes256gcm_decrypt(base64_decode($message['text']), null, AES_IV, ENCRYPTKEY);
}
if($removeEmbed){
$message['text']=preg_replace_callback('/<img src="([^"]+)"><\/a>/u',
@ -3261,6 +3261,9 @@ function send_headers(){
header('Expires: 0');
header('Referrer-Policy: no-referrer');
header('Content-Security-Policy: referrer never');
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: sameorigin');
header('X-XSS-Protection: 1; mode=block');
if($_SERVER['REQUEST_METHOD']==='HEAD'){
exit; // headers sent, no further processing needed
}
@ -3999,16 +4002,16 @@ function update_db(){
}
update_setting('dbversion', DBVERSION);
if($msgencrypted!==MSGENCRYPTED){
if(!extension_loaded('openssl')){
send_fatal_error($I['opensslextrequired']);
if(!extension_loaded('sodium')){
send_fatal_error($I['sodiumextrequired']);
}
$result=$db->query('SELECT id, text FROM ' . PREFIX . 'messages;');
$stmt=$db->prepare('UPDATE ' . PREFIX . 'messages SET text=? WHERE id=?;');
while($message=$result->fetch(PDO::FETCH_ASSOC)){
if(MSGENCRYPTED){
$message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($message['text'], '', AES_IV, ENCRYPTKEY));
}else{
$message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=sodium_crypto_aead_aes256gcm_decrypt(base64_decode($message['text']), null, AES_IV, ENCRYPTKEY);
}
$stmt->execute([$message['text'], $message['id']]);
}
@ -4016,9 +4019,9 @@ function update_db(){
$stmt=$db->prepare('UPDATE ' . PREFIX . 'notes SET text=? WHERE id=?;');
while($message=$result->fetch(PDO::FETCH_ASSOC)){
if(MSGENCRYPTED){
$message['text']=openssl_encrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=base64_encode(sodium_crypto_aead_aes256gcm_encrypt($message['text'], '', AES_IV, ENCRYPTKEY));
}else{
$message['text']=openssl_decrypt($message['text'], 'aes-256-cbc', ENCRYPTKEY, 0, '1234567890123456');
$message['text']=sodium_crypto_aead_aes256gcm_decrypt(base64_decode($message['text']), null, AES_IV, ENCRYPTKEY);
}
$stmt->execute([$message['text'], $message['id']]);
}
@ -4177,10 +4180,11 @@ function load_lang(){
function load_config(){
mb_internal_encoding('UTF-8');
define('VERSION', '1.23.7'); // Script version
define('VERSION', '1.24'); // Script version
define('DBVERSION', 42); // Database layout version
define('MSGENCRYPTED', false); // Store messages encrypted in the database to prevent other database users from reading them - true/false - visit the setup page after editing!
define('ENCRYPTKEY', 'MY_KEY'); // Encryption key for messages
define('ENCRYPTKEY_PASS', 'MY_SECRET_KEY'); // Encryption key for messages
define('AES_IV_PASS', '1234567890123456'); //AES Encryption IV
define('DBHOST', 'localhost'); // Database host
define('DBUSER', 'www-data'); // Database user
define('DBPASS', 'YOUR_DB_PASS'); // Database password
@ -4198,4 +4202,9 @@ function load_config(){
}
define('COOKIENAME', PREFIX . 'chat_session'); // Cookie name storing the session information
define('LANG', 'en'); // Default language
if (MSGENCRYPTED){
//Do not touch: Compute real keys needed by encryption functions
define('ENCRYPTKEY', substr(hash("sha512/256",ENCRYPTKEY_PASS),0, SODIUM_CRYPTO_AEAD_AES256GCM_KEYBYTES));
define('AES_IV', substr(hash("sha512/256",AES_IV_PASS), 0, SODIUM_CRYPTO_AEAD_AES256GCM_NPUBBYTES));
}
}

View File

@ -0,0 +1,8 @@
.msg {padding: 0.5em 0; border-bottom: 1px solid #363636}
input, select, textarea, button {padding: 0.2em; border: 1px solid #ffffff; border-radius: 0.5em}
#messages small {color: #989898}
#messages {display: block; width: 79%}
.messages #topic {display: block; width: 79%}
.messages #chatters {display: block; float:right; width: 20%; overflow-y: auto; position:fixed; right:0px; max-height:100%; bottom:2em; top:2em;}
.messages #chatters td, #chatters tr, #chatters th {display: table-row; width: 100%!important;}
.messages #chatters table a {display: table-row; line-height: 0;}

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Невалидна парола (поне %d символа), не променям ника',
'gdextrequired' => 'Добавката gd за PHP е необходима за тази функционалност. Моля, първо я инсталирайте.',
'memcachedextrequired' => 'Добавката memcached за PHP е необходима за кеш функционалностите. Моля, първо я инсталирайте или върнете настройките за memcached обратно на false.',
'opensslextrequired' => 'Добавката openssl за PHP е необходима the криптиращата функционалност. Моля, първо я инсталирайте или върнете настройките за криптиране обратно на false.',
'sodiumextrequired' => 'Добавката libsodium за PHP е необходима the криптиращата функционалност. Моля, първо я инсталирайте или върнете настройките за криптиране обратно на false.',
'pdo_mysqlextrequired' => 'Добавката pdo_mysql за PHP е необходима за избрания драйвер за базата данни. Моля, първо я инсталирайте.',
'pdo_pgsqlextrequired' => 'Добавката pdo_pgsql за PHP е необходима за избрания драйвер за базата данни. Моля, първо я инсталирайте.',
'pdo_sqliteextrequired' => 'Добавката pdo_sqlite за PHP е необходима за избрния драйвер за базата данни. Моля, първо я инсталирайте.',

View File

@ -310,7 +310,7 @@ $I=[
'nopass' => 'Chybné heslo (Nejméně %d znaků), přezdívka zůstala stejná',
'gdextrequired' => 'Rozšíření PHP gd je pro tuto funkci vyžadováno. Nejprve ho nainstalujte.',
'memcachedextrequired' => 'Pro funkci ukládání do mezipaměti je vyžadováno memcached rozšíření PHP. Nejprve ho nainstalujte, nebo nastavte parametr memcached na hodnotu false.',
'opensslextrequired' => 'Pro funkci šifrování je vyžadováno rozšíření PHP openssl. Nejprve ho nainstalujte nebo nastavte šifrované nastavení zpět na hodnotu false.',
'sodiumextrequired' => 'Pro funkci šifrování je vyžadováno rozšíření PHP libsodium. Nejprve ho nainstalujte nebo nastavte šifrované nastavení zpět na hodnotu false.',
'pdo_mysqlextrequired' => 'Rozšíření pdo_mysql PHP je vyžadováno pro zvolený ovladač databáze. Nejprve ho nainstalujte.',
'pdo_pgsqlextrequired' => 'Pro zvolený databázový ovladač je vyžadováno rozšíření PHP pdo_pgsql. Nejprve ho nainstalujte.',
'pdo_sqliteextrequired' => 'Rozšíření pdo_sqlite PHP je vyžadováno pro zvolený ovladač databáze. Nejprve ho nainstalujte.',

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Ungültiges Passwort (Mindestens %d Zeichen), Nickname nicht geändert',
'gdextrequired' => 'Für diese Funktion wird die gd Erweiterung von PHP benötigt. Bitte installieren Sie diese zuerst.',
'memcachedextrequired' => 'Die memcached Erweiterung von PHP wird benötigt, um die Cache-Funktion zu benutzen. Bitte installieren Sie diese zuerst oder setzen Sie die memcached Einstellung zurück auf false.',
'opensslextrequired' => 'Die openssl Erweiterung von PHP wird benötigt, um die Verschlüsselungs-Funktion zu benutzen. Bitte installieren Sie diese zuerst oder setzen Sie die encrypted Einstellung zurück auf false.',
'sodiumextrequired' => 'Die libsodium Erweiterung von PHP wird benötigt, um die Verschlüsselungs-Funktion zu benutzen. Bitte installieren Sie diese zuerst oder setzen Sie die encrypted Einstellung zurück auf false.',
'pdo_mysqlextrequired' => 'Die pdo_mysql Erweiterung von PHP wird für den ausgewählten Datenbanktreiber benötigt. Bitte installieren Sie diese zuerst.',
'pdo_pgsqlextrequired' => 'Die pdo_pgsql Erweiterung von PHP wird für den ausgewählten Datenbanktreiber benötigt. Bitte installieren Sie diese zuerst.',
'pdo_sqliteextrequired' => 'Die pdo_sqlite Erweiterung von PHP wird für den ausgewählten Datenbanktreiber benötigt. Bitte installieren Sie diese zuerst.',

View File

@ -310,7 +310,7 @@ $I=[
'nopass' => 'Invalid password (At least %d characters), not changing nickname',
'gdextrequired' => 'The gd extension of PHP is required for this feature. Please install it first.',
'memcachedextrequired' => 'The memcached extension of PHP is required for the caching feature. Please install it first or set the memcached setting back to false.',
'opensslextrequired' => 'The openssl extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'sodiumextrequired' => 'The libsodium extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'pdo_mysqlextrequired' => 'The pdo_mysql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_pgsqlextrequired' => 'The pdo_pgsql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_sqliteextrequired' => 'The pdo_sqlite extension of PHP is required for the selected database driver. Please install it first.',

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Constraseña incorrecta (al menos %d caracteres), no se cambia apodo',
'gdextrequired' => 'La extensión gd de PHP es requerida para esto. Instálela primero.',
'memcachedextrequired' => 'La extensión memcached de PHP es requerida para esto. Instalela primero o configure memcached en false.',
'opensslextrequired' => 'La extensión openssl de PHP es necesaria para la encriptación. Instálela o configure la encriptación en false.',
'sodiumextrequired' => 'La extensión libsodium de PHP es necesaria para la encriptación. Instálela o configure la encriptación en false.',
'pdo_mysqlextrequired' => 'La extensión pdo_mysql de PHP es necesaria para la database driver seleccionada. Instálelo primero.',
'pdo_pgsqlextrequired' => ' La extensión pdo_pgsql de PHP es necesaria para la database driver seleccionada. Instálelo primero.',
'pdo_sqliteextrequired' => ' La extensión pdo_sqlite de PHP es necesaria para la database driver seleccionada. Instálelo primero.',

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Password sbagliata (Almeno %d simboli), senza cambiare nome',
'gdextrequired' => 'The gd extension of PHP is required for this feature. Please install it first.',
'memcachedextrequired' => 'The memcached extension of PHP is required for the caching feature. Please install it first or set the memcached setting back to false.',
'opensslextrequired' => 'The openssl extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'sodiumextrequired' => 'The libsodium extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'pdo_mysqlextrequired' => 'The pdo_mysql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_pgsqlextrequired' => 'The pdo_pgsql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_sqliteextrequired' => 'The pdo_sqlite extension of PHP is required for the selected database driver. Please install it first.',

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Некорректный пароль (Хотя бы %d символов), не меняя имени',
'gdextrequired' => 'gd расширение для PHP требуетса для етой функции. Пожалуйста установите его сначала...',
'memcachedextrequired' => 'The memcached extension of PHP is required for the caching feature. Please install it first or set the memcached setting back to false.',
'opensslextrequired' => 'The openssl extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'sodiumextrequired' => 'The libsodium extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'pdo_mysqlextrequired' => 'Pdo_mysql расширение для PHP требуетса для драйверов базы данных. Пожалуйста установите его сначала..',
'pdo_pgsqlextrequired' => 'Pdo_pgsql расширение для PHP требуетса для драйверов базы данных. Пожалуйста установите его сначала..',
'pdo_sqliteextrequired' => 'Pdo_sqlite расширение для PHP требуетса для драйверов базы данных. Пожалуйста установите его сначала.',

View File

@ -310,7 +310,7 @@ $T=[
'nopass' => 'Негідний пароль (Хотя б %d символів), не міняя імя',
'gdextrequired' => 'The gd extension of PHP is required for this feature. Please install it first.',
'memcachedextrequired' => 'The memcached extension of PHP is required for the caching feature. Please install it first or set the memcached setting back to false.',
'opensslextrequired' => 'The openssl extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'sodiumextrequired' => 'The libsodium extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'pdo_mysqlextrequired' => 'The pdo_mysql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_pgsqlextrequired' => 'The pdo_pgsql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_sqliteextrequired' => 'The pdo_sqlite extension of PHP is required for the selected database driver. Please install it first.',

View File

@ -1,23 +1,4 @@
<?php
/*
* LE CHAT-PHP - a PHP Chat based on LE CHAT - Simplified Chinese translation
*
* Copyright (C) 2015-2018 Daniel Winzen <d@winzen4.de>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
//Native language name: 简体中文
$T=[
'nodb' => '没有连接到数据库!',
@ -29,8 +10,8 @@ $T=[
'invalpass' => '无效的密码 (至少包含%1$d个字符并且必须与正则表达式"%2$s"匹配)',
'noconfirm' => '重复密码不匹配!',
'incorregex' => '正则表达式错误!',
'bottom' => 'Bottom',
'top' => '排行',
'bottom' => '底部',
'top' => '顶部',
'choose' => '(选择)',
'setup' => '安装程序',
'init' => '初始化设置',
@ -64,7 +45,7 @@ $T=[
'msgmultikick' => '批量踢出',
'msgallkick' => '全部踢出',
'msgclean' => '房间清理',
'dateformat' => '<a target="_blank" href="http://php.net/manual/en/function.date.php#refsect1-function.date-parameters">Date formating</a>',
'dateformat' => '<a target="_blank" href="http://php.net/manual/en/function.date.php#refsect1-function.date-parameters">日期格式</a>',
'admfunc' => '管理员功能',
'allguests' => '全部游客',
'cleanmsgs' => '清理消息',
@ -83,7 +64,7 @@ $T=[
'filter' => '过滤',
'guestacc' => '修改游客访问',
'guestallow' => '允许',
'guestwait' => 'Allow with waitingroom',
'guestwait' => '等候室允许',
'adminallow' => '请求审核人批准',
'guestdisallow' => '只仅正式成员',
'addsuguest' => '注册申请员',
@ -94,7 +75,7 @@ $T=[
'memsuguest' => '申请为申请人 (G)',
'memreg' => '设置为正式成员',
'memmod' => '设置为主持人 (M)',
'memsumod' => 'Set to supermod (SM)',
'memsumod' => '设置为0.5 (SM)',
'memadm' => '设置为管理员 (A)',
'change' => '修改',
'regguest' => '注册游客',
@ -119,246 +100,246 @@ $T=[
'lastedited' => '上次由%1$s编辑 时间为%2$s',
'savenotes' => '保存说明',
'waitingroom' => '等候室',
'waittext' => 'Welcome %1$s, your login has been delayed, you can access the chat in %2$d seconds.',
'admwaittext' => 'Welcome %1$s, your login has been delayed, you can access the chat as soon, as a moderator lets you in.',
'waitreload' => 'If this page doesn\'t refresh every %d seconds, use the button below to reload it manually!',
'reload' => 'Reload',
'rules' => 'Rules',
'talkto' => 'Send to',
'toall' => 'All chatters',
'tomem' => 'Members only',
'tostaff' => 'Staff only',
'toadmin' => 'Admin only',
'alsopurge' => 'Also purge messages',
'dellast' => 'Delete last message',
'delall' => 'Delete all messages',
'switchsingle' => 'Switch to single-line',
'switchmulti' => 'Switch to multi-line',
'help' => 'Help',
'helpguest' => 'All functions should be pretty much self-explaining, just use the buttons. In your profile you can adjust the refresh rate, font colour and your preferred input box size.<br><u>Note:</u> This is a chat, so if you don\'t keep talking, you will be automatically logged out after a while.',
'helpembed' => 'If you want to embed an image in your post, simply put [img] in front of your image URL. Example: [img]http://example.com/images/file.jpg will embed the image in your post.',
'helpmem' => 'Members: You\'ll have some more options in your profile. You can adjust your font face, change your password anytime and of course you can delete your account.',
'helpmod' => 'Moderators: Notice the Admin-button at the bottom. It\'ll bring up a page where you can clean the room, kick chatters, view all active sessions and disable guest access completely if needed.',
'helpadm' => 'Admins: You\'ll be furthermore able to register guests, edit members and register new nicknames.',
'profile' => 'Your Profile',
'ignore' => 'Ignore',
'unignore' => 'Don\'t ignore anymore',
'refreshrate' => 'Refresh rate (5-150 seconds)',
'fontcolour' => 'Font colour',
'viewexample' => 'View examples',
'bgcolour' => 'Background colour',
'fontface' => 'Fontface',
'roomdefault' => 'Room Default',
'bold' => 'Bold',
'italic' => 'Italic',
'fontexample' => 'Example for your chosen font',
'timestamps' => 'Show Timestamps',
'embed' => 'Embed images',
'incognito' => 'Incognito mode',
'changepass' => 'Change Password',
'oldpass' => 'Old password:',
'newpass' => 'New password:',
'confirmpass' => 'Confirm new password:',
'savechanges' => 'Save changes',
'reloadpb' => 'Reload Post Box',
'reloadmsgs' => 'Reload Messages',
'chgprofile' => 'Profile',
'adminbtn' => 'Admin',
'admnotes' => 'Admin Notes',
'notes' => 'Notes',
'clone' => 'Clone',
'randh' => 'Rules & Help',
'exit' => 'Exit Chat',
'bye' => 'Bye %s, visit again soon!',
'colourtable' => 'Colourtable',
'backtoprofile' => 'Back to your Profile',
'copy' => 'Copy:',
'choosecol' => 'Guests, choose a colour:',
'randomcol' => 'Random Colour',
'enter' => 'Enter Chat',
'error' => 'Error',
'members' => 'Members',
'guests' => 'Guests',
'approveguests' => '%d new guests to approve',
'allowchecked' => 'Allow checked',
'allowall' => 'Allow all',
'denychecked' => 'Deny checked',
'denyall' => 'Deny all',
'denymessage' => 'Send message to denied:',
'butallowdeny' => 'Submit',
'waitempty' => 'No more entry requests to approve.',
'wrongcaptcha' => 'Wrong Captcha',
'captchaexpire' => 'Captcha already used or timed out.',
'noguests' => 'Sorry, currently members only!',
'curchat' => 'Currently %d chatter(s) in room:',
'cantreg' => 'Can\'t register %s',
'alreadyreged' => '%s is already registered.',
'successreg' => '%s successfully registered.',
'cantchgstat' => 'Can\'t change status of %s',
'succdel' => '%s successfully deleted from database.',
'succchg' => 'Status of %s successfully changed.',
'wrongpass' => 'Wrong Password!',
'wrongglobalpass' => 'Wrong global Password!',
'succprofile' => 'Your profile has successfully been saved.',
'backtologin' => 'Back to the login page.',
'backtochat' => 'Back to the chat.',
'Beige' => 'Beige',
'Black' => 'Black',
'Blue' => 'Blue',
'BlueViolet' => 'Blue violet',
'Brown' => 'Brown',
'Cyan' => 'Cyan',
'DarkBlue' => 'Dark blue',
'DarkGreen' => 'Dark green',
'DarkRed' => 'Dark red',
'DarkViolet' => 'Dark violet',
'DeepSkyBlue' => 'Sky blue',
'Gold' => 'Gold',
'Grey' => 'Grey',
'Green' => 'Green',
'HotPink' => 'Hot pink',
'Indigo' => 'Indigo',
'LightBlue' => 'Light blue',
'LightGreen' => 'Light green',
'LimeGreen' => 'Lime green',
'Magenta' => 'Magenta',
'Olive' => 'Olive',
'Orange' => 'Orange',
'OrangeRed' => 'Orange red',
'Purple' => 'Purple',
'Red' => 'Red',
'RoyalBlue' => 'Royal blue',
'SeaGreen' => 'Sea green',
'Sienna' => 'Sienna',
'Silver' => 'Silver',
'Tan' => 'Tan',
'Teal' => 'Teal',
'Violet' => 'Violet',
'White' => 'White',
'Yellow' => 'Yellow',
'YellowGreen' => 'Yellow green',
'redirectto' => 'Redirecting to:',
'nonhttp' => 'Non-http link requested:',
'httpredir' => 'If it\'s not working, try this one:',
'actions' => 'Actions',
'sesip' => 'IP-Address',
'css' => 'CSS Style',
'memberexpire' => 'Member timeout (minutes)',
'guestexpire' => 'Guest timeout (minutes)',
'kickpenalty' => 'Kick penalty (minutes)',
'entrywait' => 'Waiting room time (seconds)',
'captchatime' => 'Captcha timeout (seconds)',
'messageexpire' => 'Message timeout (minutes)',
'messagelimit' => 'Message limit (public)',
'maxmessage' => 'Maximal message length',
'confirm' => 'Are you sure?',
'yes' => 'Yes',
'no' => 'No',
'colbg' => 'Background colour',
'coltxt' => 'Text colour',
'maxname' => 'Maximal nickname length',
'minpass' => 'Minimal password length',
'defaultrefresh' => 'Default message reload time (seconds)',
'suguests' => 'Enable applicants',
'rulestxt' => 'Rules (html)',
'imgembed' => 'Embed images',
'trackip' => 'Show session-IP',
'captchachars' => 'Characters used in Captcha',
'memkick' => 'Members can kick, if no moderator is present',
'forceredirect' => 'Force redirection',
'redirect' => 'Custom redirection script',
'backuprestore' => 'Backup and restore',
'backup' => 'Backup',
'restore' => 'Restore',
'settings' => 'Settings',
'linkfilter' => 'Linkfilter',
'chatname' => 'Chat name',
'destroy' => 'Destroy chat',
'destroyed' => 'Successfully destroyed chat',
'topic' => 'Topic',
'passreset' => 'Reset password',
'cantresetpass' => 'Can\'t reset password',
'succpassreset' => 'Successfully reset password',
'entermsg' => '%s entered the chat.',
'exitmsg' => '%s left the chat.',
'memregmsg' => '%s is now a registered member.',
'suregmsg' => '%s is now a registered applicant.',
'kickmsg' => '%s has been kicked.',
'multikickmsg' => '%s have been kicked.',
'allkickmsg' => 'All guests have been kicked.',
'cleanmsg' => '%s has been cleaned.',
'waittext' => '欢迎%1$s, 您的登录信息已被延迟,您可以访问聊天记录%2$d秒.',
'admwaittext' => '欢迎%1$s, 您的登录信息已被延迟,您可以尽快访问聊天内容,因为主持人会让您进入.',
'waitreload' => '如果这个页面没有刷新%d秒, 使用下面的按钮手动重新加载!',
'reload' => '刷新',
'rules' => '规则',
'talkto' => '发送至',
'toall' => '所有的聊天者',
'tomem' => '内部使用',
'tostaff' => '只供职员使用',
'toadmin' => '仅限管理员',
'alsopurge' => '同时清除消息',
'dellast' => '删除上一条消息',
'delall' => '删除所有信息',
'switchsingle' => '切换到单行',
'switchmulti' => '切换到多行',
'help' => '帮助',
'helpguest' => '这里一切解释权归我所有,只需使用按钮。 在您的配置文件中,您可以调整刷新率,字体颜色和首选输入框大小.<br><u>注意:</u> 这是一个聊天室,所以如果你不再说话,你会在一段时间后自动退出.',
'helpembed' => '如果您想在帖子中嵌入图片,只需将[img]放在图片网址前面即可。示例:[img]http://example.com/images/file.jpg会将图片嵌入到您的帖子中.',
'helpmem' => '成员:您的个人资料中还有更多选项。 您可以随时调整字体,更改密码,当然也可以删除您的帐户.',
'helpmod' => '版主:请注意底部。 它将打开一个页面,您可以在其中清理房间,踢聊天,查看所有活动会话并在需要时完全禁用访客访问权限.',
'helpadm' => '管理员:您还可以注册客人,编辑成员并注册新的昵称。',
'profile' => '你的个人资料',
'ignore' => '忽略',
'unignore' => '取消忽略',
'refreshrate' => '刷新时间(5-150)',
'fontcolour' => '字体颜色',
'viewexample' => '查看示例',
'bgcolour' => '背景色',
'fontface' => '字体',
'roomdefault' => '默认房间',
'bold' => '大胆',
'italic' => '斜体',
'fontexample' => '您选择的字体的示例',
'timestamps' => '显示时间戳',
'embed' => '嵌入图像',
'incognito' => '隐身模式',
'changepass' => '更改密码',
'oldpass' => '旧密码:',
'newpass' => '新密码:',
'confirmpass' => '在重复一次新密码:',
'savechanges' => '保存更改',
'reloadpb' => '刷新缓存',
'reloadmsgs' => '刷新一下消息',
'chgprofile' => '个人资料',
'adminbtn' => '管理',
'admnotes' => '管理员公告',
'notes' => '公告',
'clone' => '打开新标签',
'randh' => '条款 & 帮助',
'exit' => '退出聊天室',
'bye' => '再见%s, 欢迎你再此访问!',
'colourtable' => '颜色表',
'backtoprofile' => '回到你的个人资料',
'copy' => '验证码:',
'choosecol' => '客人,选择一种颜色:',
'randomcol' => '随机颜色',
'enter' => '回车',
'error' => '错误',
'members' => '会员',
'guests' => '游客',
'approveguests' => '%d新客人批准',
'allowchecked' => '允许检查',
'allowall' => '允许全部',
'denychecked' => '拒绝检查',
'denyall' => '全部拒绝',
'denymessage' => '发送消息给拒绝:',
'butallowdeny' => '提交',
'waitempty' => '不再需要批准入场申请.',
'wrongcaptcha' => '错误验证码',
'captchaexpire' => '验证码已经使用或超时.',
'noguests' => '对不起,目前仅限会员!',
'curchat' => '目前%d人在房间里聊天:',
'cantreg' => '无法注册%s',
'alreadyreged' => '%s已经注册',
'successreg' => '%s成功注册.',
'cantchgstat' => '无法改变状态%s',
'succdel' => '%s已成功从数据库中删除.',
'succchg' => '%s的状态已更改.',
'wrongpass' => '密码错误!',
'wrongglobalpass' => '错误的全球密码!',
'succprofile' => '您的个人资料已成功保存.',
'backtologin' => '返回登录页面.',
'backtochat' => '回到聊天室.',
'Beige' => '米色',
'Black' => '黑色',
'Blue' => '蓝色',
'BlueViolet' => '紫罗兰色',
'Brown' => '棕色',
'Cyan' => '青色',
'DarkBlue' => '深蓝',
'DarkGreen' => '深绿色',
'DarkRed' => '深红',
'DarkViolet' => '深紫罗兰',
'DeepSkyBlue' => '天蓝色',
'Gold' => '',
'Grey' => '灰色',
'Green' => '绿色',
'HotPink' => '亮粉色',
'Indigo' => '靛青',
'LightBlue' => '浅蓝',
'LightGreen' => '浅绿色',
'LimeGreen' => '柠檬绿',
'Magenta' => '品红',
'Olive' => '橄榄',
'Orange' => '橙子',
'OrangeRed' => '橙红色',
'Purple' => '紫色',
'Red' => '红色',
'RoyalBlue' => '宝蓝色',
'SeaGreen' => '海绿色',
'Sienna' => '黄土',
'Silver' => '银色',
'Tan' => '黄褐色',
'Teal' => '蓝绿色',
'Violet' => '紫色',
'White' => '白色',
'Yellow' => '黄色',
'YellowGreen' => '黄绿色',
'redirectto' => '重定向到:',
'nonhttp' => '请求非http链接:',
'httpredir' => '如果它不起作用,试试这个:',
'actions' => '操作',
'sesip' => 'IP地址',
'css' => 'CSS风格',
'memberexpire' => '会员超时(分钟)',
'guestexpire' => '访客超时(分钟)',
'kickpenalty' => '踢罚(分钟)',
'entrywait' => '等候室时间(秒)',
'captchatime' => '验证码超时(秒)',
'messageexpire' => '消息超时(分钟)',
'messagelimit' => '消息限制(公开)',
'maxmessage' => '最大消息长度',
'confirm' => '你确定吗?',
'yes' => '',
'no' => '',
'colbg' => '背景色',
'coltxt' => '文字颜色',
'maxname' => '最大昵称长度',
'minpass' => '最小密码长度',
'defaultrefresh' => '默认消息重新加载时间(秒)',
'suguests' => '启用申请人',
'rulestxt' => '规则(html',
'imgembed' => '嵌入图像',
'trackip' => '显示会话-IP',
'captchachars' => '验证码中使用的字符',
'memkick' => '如果没有主持人,会员可以踢',
'forceredirect' => '强制重定向',
'redirect' => '自定义重定向脚本',
'backuprestore' => '备份还原',
'backup' => '备用',
'restore' => '恢复',
'settings' => '设置',
'linkfilter' => '链接过滤器',
'chatname' => '聊天名称',
'destroy' => '摧毁聊天',
'destroyed' => '成功破坏了聊天',
'topic' => '话题',
'passreset' => '重设密码',
'cantresetpass' => '无法重置密码',
'succpassreset' => '成功重置密码',
'entermsg' => '%s进入聊天室.',
'exitmsg' => '%s离开了聊天室',
'memregmsg' => '%s现在是注册会员.',
'suregmsg' => '%s现在是注册申请人.',
'kickmsg' => '%s被踢了.',
'multikickmsg' => '%s被踢了.',
'allkickmsg' => '所有客人都被踢了.',
'cleanmsg' => '%s已经清理干净了.',
'sendallmsg' => '%s - ',
'sendmemmsg' => '[M] %s - ',
'sendmodmsg' => '[Staff] %s - ',
'sendadmmsg' => '[Admin] %s - ',
'sendprvmsg' => '[%1$s to %2$s] - ',
'msgsendall' => 'Message to all',
'msgsendmem' => 'Message to members only',
'msgsendmod' => 'Message to staff only',
'msgsendadm' => 'Message to admins only',
'msgsendprv' => 'Private message',
'numnotes' => 'Number of notes revisions to keep',
'revisions' => 'Revisions:',
'older' => 'Older',
'newer' => 'Newer',
'accessdenied' => 'Access denied',
'loggedinas' => 'You are logged in as %s and don\'t have access to this section.',
'newnickname' => 'New nickname:',
'nicknametaken' => 'Nickname is already taken',
'nopass' => 'Invalid password (At least %d characters), not changing nickname',
'gdextrequired' => 'The gd extension of PHP is required for this feature. Please install it first.',
'memcachedextrequired' => 'The memcached extension of PHP is required for the caching feature. Please install it first or set the memcached setting back to false.',
'opensslextrequired' => 'The openssl extension of PHP is required for the encryption feature. Please install it first or set the encrypted setting back to false.',
'pdo_mysqlextrequired' => 'The pdo_mysql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_pgsqlextrequired' => 'The pdo_pgsql extension of PHP is required for the selected database driver. Please install it first.',
'pdo_sqliteextrequired' => 'The pdo_sqlite extension of PHP is required for the selected database driver. Please install it first.',
'jsonextrequired' => 'The json extension of PHP is required for this feature. Please install it first.',
'sendmail' => 'Send mail on new public message',
'mailsender' => 'Send mail using this address',
'mailreceiver' => 'Send mail to this address',
'modfallback' => 'Fallback to waiting room, if no moderator is present to approve guests',
'regpass' => 'Repeat password<br>to register',
'guestreg' => 'Let guests register themselves',
'asmember' => 'As member',
'assuguest' => 'As applicant',
'fatalerror' => 'Fatal error',
'prevmatch' => 'Your match was as follows',
'matchtoolong' => 'Your match was too long. You can use max. 255 characters. Try splitting it up.',
'nocache' => 'Autoscroll (for old browsers or top-to-bottom sort).',
'disablepm' => 'Disable private messages',
'disablechat' => 'Disable chat',
'disabletext' => 'Chat disabled message (html)',
'disabledtext' => 'Temporarily disabled',
'defaulttz' => 'Default time zone',
'tz' => 'Time zone',
'optional' => '(optional)',
'userloggedin' => 'A user with this nickname is already logged in.',
'regednick' => 'This nickname is a registered member.',
'eninbox' => 'Enable offline inbox',
'inboxmsgs' => 'Read %d messages in your inbox',
'offline' => '(offline)',
'deleteacc' => 'Delete account',
'eninnone' => 'For no one',
'eninall' => 'For everyone',
'eninmem' => 'For members only',
'eninstaff' => 'For staff only',
'eninadmin' => 'For admins only',
'nickregex' => 'Nickname regex',
'passregex' => 'Password regex',
'externalcss' => 'Link to external CSS file',
'greetingmsg' => 'Welcome %s!',
'msgsendall' => '给所有人的信息',
'msgsendmem' => '仅向会员发送消息',
'msgsendmod' => '仅向员工发送消息',
'msgsendadm' => '仅向管理员发送消息',
'msgsendprv' => '私人信息',
'numnotes' => '要保留的备注数量',
'revisions' => '修订:',
'older' => '旧的',
'newer' => '较新',
'accessdenied' => '拒绝访问',
'loggedinas' => '您以%s身份登录无法访问此部分',
'newnickname' => '新昵称:',
'nicknametaken' => '昵称已被取消',
'nopass' => '密码无效(至少%d个字符不更改昵称.',
'gdextrequired' => '此功能需要PHP的gd扩展名。 请先安装它。.',
'memcachedextrequired' => '缓存功能需要PHP的memcached扩展。 请先安装它或将memcached设置恢复为false.',
'sodiumextrequired' => '加密功能需要PHP的libsodium扩展。 请先安装它或将加密设置恢复为false.',
'pdo_mysqlextrequired' => '所选数据库驱动程序需要PHP的pdo_mysql扩展名。 请先安装它.',
'pdo_pgsqlextrequired' => '所选数据库驱动程序需要PHP的pdo_pgsql扩展名。 请先安装它。',
'pdo_sqliteextrequired' => '所选数据库驱动程序需要PHP的pdo_sqlite扩展。 请先安装它.',
'jsonextrequired' => '此功能需要PHP的json扩展名。 请先安装它.',
'sendmail' => '发送新公共邮件的邮件',
'mailsender' => '使用此地址发送邮件',
'mailreceiver' => '发送邮件到这个地址',
'modfallback' => '如果没有主持人来批准客人,请回到候诊室',
'regpass' => '重复密码<br>注册',
'guestreg' => '让客人自己注册',
'asmember' => '作为会员',
'assuguest' => '作为申请人',
'fatalerror' => '致命错误',
'prevmatch' => '你的申请如下',
'matchtoolong' => '你的申请太长了。 你可以用max。 255个字符。 尝试拆分它.',
'nocache' => '自动滚动(适用于旧浏览器或从上到下排序).',
'disablepm' => '禁用私人消息',
'disablechat' => '禁用聊天',
'disabletext' => '聊天禁用消息(html',
'disabledtext' => '暂时禁用',
'defaulttz' => '默认时区',
'tz' => '时区',
'optional' => '(可选的)',
'userloggedin' => '具有此昵称的用户已登录.',
'regednick' => '这个昵称是注册会员.',
'eninbox' => '启用离线收件箱',
'inboxmsgs' => '阅读收件箱中的%d条消息',
'offline' => '(离线)',
'deleteacc' => '删除帐户',
'eninnone' => '一个人',
'eninall' => '所以人',
'eninmem' => '仅限会员',
'eninstaff' => '仅限员工',
'eninadmin' => '仅适用于管理员',
'nickregex' => '昵称正则表达式',
'passregex' => '密码正则表达式',
'externalcss' => '链接到外部CSS文件',
'greetingmsg' => '欢迎%s!',
'entryhelp' => 'If this frame does not reload in %d seconds, you\'ll have to enable automatic redirection (meta refresh) in your browser. Also make sure no web filter, local proxy tool or browser plugin is preventing automatic refreshing! This could be for example "Polipo", "NoScript", etc.<br>As a workaround (or in case of server/proxy reload errors) you can always use the buttons at the bottom to refresh manually.',
'enablegreeting' => 'Show a greeting message before showing the messages',
'unban' => 'Unban',
'sortupdown' => 'Sort messages from top to bottom',
'sortframe' => 'Rearrange',
'cs' => 'Case sensitive',
'hidechatters' => 'Hide list of chatters',
'enfileupload' => 'Enable file uploads',
'msgattache' => 'Attachement',
'filenotfound' => 'File not found!',
'maxuploadsize' => 'Maximum upload size in KB',
'enablegreeting' => '在显示消息之前显示问候消息',
'unban' => '取消禁止',
'sortupdown' => '从上到下对消息进行排序',
'sortframe' => '改变方向',
'cs' => '大小写',
'hidechatters' => '隐藏聊天列表',
'enfileupload' => '启用文件上载',
'msgattache' => '附件',
'filenotfound' => '找不到文件!',
'maxuploadsize' => '最大上载大小(KB',
'maxsize' => 'Max %d KB',
'cssupdate' => 'Note: Default CSS is now hardcoded and can be removed from the CSS setting',
'cssupdate' => '注意默认的CSS现在是硬编码的可以从CSS设置中删除。',
];