From 9d27652fc5778a54864da67b7f34f0a62a686ad6 Mon Sep 17 00:00:00 2001
From: Herman van Rink <rink@initfour.nl>
Date: Mon, 17 Apr 2023 21:18:27 +0200
Subject: [PATCH] Merge origin/develop between
 941b192a829f9b1d7b5c95a0d28253bd96d5faa8...510ace7666d68e105316dfe5fd6572b5fed23db5
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

https://git.ispconfig.org/helmo/ispconfig3/-/compare/941b192a829f9b1d7b5c95a0d28253bd96d5faa8...510ace7666d68e105316dfe5fd6572b5fed23db5?from_project_id=427&straight=false

Squashed commit of the following:

commit 510ace7666d68e105316dfe5fd6572b5fed23db5
Merge: 835302e99 2bbbc5d85
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Apr 17 15:08:15 2023 +0000

    Merge branch '6480-db-operator' into 'develop'

    Resolve "wrong databases are shown when selecting a server."

    Closes #6480

    See merge request ispconfig/ispconfig3!1712

commit 2bbbc5d8557510997ee0b6dc43e810d5b820da0c
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Apr 16 23:24:02 2023 +0200

    Fix db field operator in all other list files, #6480

commit 925dac26bbfd685b5e9db1a56376f3a65a5362c5
Author: Tom <tom@unknown>
Date:   Fri Apr 14 14:13:59 2023 +0200

    Fix db field operator, #6480

commit 835302e99578530c499708cb11ea1a7fdfaf2d54
Merge: f8923da03 03bce8232
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 14:53:27 2023 +0000

    Merge branch '6484-Add-Simplified-Chinese-language' into 'develop'

    Add Simplified Chinese translations for ISPConfig

    Closes #6484

    See merge request ispconfig/ispconfig3!1707

commit f8923da030949444985c2e951490dd68e018a0b5
Merge: ba91d9141 3ddebfe99
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 09:32:29 2023 +0000

    Merge branch '2558-two-factor-authentication-followup' into 'develop'

    Extend Two-factor authentication

    Closes #2558

    See merge request ispconfig/ispconfig3!1594

commit ba91d9141ad8fb2b02a7758d9dc14c777fd9b67d
Merge: 694612e3c ace15083a
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:49:27 2023 +0000

    Merge branch '6431-rspamd-user-config-deleted-on-mail-user-changes' into 'develop'

    fixes #6431 // make sure config file is deleted only during spamfilter_user event.

    Closes #6431

    See merge request ispconfig/ispconfig3!1674

commit 694612e3ca4e27185624c53e1a6aa9a2041e0cca
Merge: f4fe95443 bc0347285
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:41:23 2023 +0000

    Merge branch '6294-paste-email' into 'develop'

    Paste email address to select mail domain

    Closes #6294

    See merge request ispconfig/ispconfig3!1571

commit f4fe9544321e9a41fed73f329e9a4677dac96084
Merge: 0b34b06dd 39d95d164
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:34:40 2023 +0000

    Merge branch '6446-le-warning' into 'develop'

    Early return when no LE domains remain, #6446

    Closes #6446

    See merge request ispconfig/ispconfig3!1685

commit 0b34b06ddbebceb0f04f5916b2dee5c17ff7f741
Merge: 8efadcb51 9b603507d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:22:28 2023 +0000

    Merge branch '6485-nginx-php-fpm-workaround' into 'develop'

    simplify redhat os detection for the Nginx EL workaround

    Closes #6485

    See merge request ispconfig/ispconfig3!1708

commit 9b603507d20bcc77fd1f7d4e4e0abac88e0ced48
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:14:24 2023 +0000

    Update nginx_plugin.inc.php

commit 8efadcb51273836cb3b2efd0b3d6e13f0cf775c6
Merge: 0e1b36adc 19a7aaeca
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:10:32 2023 +0000

    Merge branch 'develop' into 'develop'

    Improve client circle page

    See merge request ispconfig/ispconfig3!1710

commit 0e1b36adc59326121e617b4996d83b83fe9b77a3
Merge: ab87ccdfd c7a6bddfb
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:04:00 2023 +0000

    Merge branch '6416-undefined-constant-loglevel_warning-in-usr-local-ispconfig-server-plugins-available' into 'develop'

    Resolve "Undefined constant "LOGLEVEL_WARNING" in /usr/local/ispconfig/server/plugins-available/mysql_clientdb_plugin.inc.php:283"

    Closes #6416

    See merge request ispconfig/ispconfig3!1667

commit ab87ccdfd18b8f05e1bdde34192582bf6c39b886
Merge: f512e03c8 4d2b2f5d1
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 06:02:52 2023 +0000

    Merge branch 'feature/use-php-from-path-in-server-sh' into 'develop'

    Use PHP from path in server.sh

    See merge request ispconfig/ispconfig3!1676

commit c7a6bddfb2aa9096808f64c5d5ed8f5b0b5ecbe2
Author: Till <t.brehm@ispconfig.org>
Date:   Fri Apr 14 07:55:21 2023 +0200

    Replaced LOGLEVEL_WARNING with LOGLEVEL_WARN

commit f512e03c85d3d059f9f5267c837b9c28ab7dfcb3
Merge: e35532a64 502a66bbf
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Apr 14 05:31:41 2023 +0000

    Merge branch 'develop' into 'develop'

    gentoo specific updates

    See merge request ispconfig/ispconfig3!1664

commit e35532a6499f1c4a22e89b9e393a78e574f1a3bb
Merge: 6524493de 62a6d04f0
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 11:04:35 2023 +0000

    Merge branch '6471-use-mod-remoteip-in-new-apache-versions' into 'develop'

    Include minor number in apache version for vhost.conf.master, #6471

    Closes #6471

    See merge request ispconfig/ispconfig3!1700

commit 6524493debc02ffa1f4bd855cbdeebe82f1a8045
Merge: 3aeea7edb 07d37a4a8
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 11:02:50 2023 +0000

    Merge branch '6462-root-owner' into 'develop'

    account root should be owned by root, #6462

    Closes #6462

    See merge request ispconfig/ispconfig3!1693

commit 3aeea7edb3af5295a94a2198ae016c52f8182a3f
Merge: a2f2eb3ee 27fea5f28
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:59:09 2023 +0000

    Merge branch '6438-php81-deprecation' into 'develop'

    Fix php 8.1 deprecation warnings

    Closes #6438

    See merge request ispconfig/ispconfig3!1682

commit a2f2eb3eefd9994515c61e097b2bd5ef76403fd4
Merge: 7009315e5 2e8f525e5
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:57:33 2023 +0000

    Merge branch '6444-php82' into 'develop'

    Fix php 8.2 deprecation warnings, #6444

    Closes #6444

    See merge request ispconfig/ispconfig3!1684

commit 7009315e55f3e917eee014752e6dc92245de6edf
Merge: 03346dbb0 a8d78f68d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:56:44 2023 +0000

    Merge branch '6435-slave-root-master' into 'develop'

    Move asking to sql root to the place where its needed,

    Closes #6435

    See merge request ispconfig/ispconfig3!1680

commit 03346dbb01c23bdb8cb49753bd41dd57227e9246
Merge: 291809c43 cc39cc617
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:55:03 2023 +0000

    Merge branch '6424-Notifications-to-reseller-and-clients-not-working' into 'develop'

    FIX: Notifications to reseller and clients not working Issue #6424

    Closes #6424

    See merge request ispconfig/ispconfig3!1672

commit 291809c435c6a35d49f8a96c9919ccda1c4fb27e
Merge: 5055c5373 bb0880560
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:53:31 2023 +0000

    Merge branch 'xxxx-cleanup' into 'develop'

    Collection of minor cleanup commits

    See merge request ispconfig/ispconfig3!1679

commit 5055c537391cd5830f9bf72d4d0702248d90888f
Merge: 6b890e990 f5defafcf
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Apr 12 09:51:37 2023 +0000

    Merge branch '6436-dns-records-tab' into 'develop'

    Default to the records tab for found dns zones, #6436

    Closes #6436

    See merge request ispconfig/ispconfig3!1681

commit 19a7aaecadce0d3aa0ecad55487d4585c374ba40
Author: flo <fk@blinkenbox.coop>
Date:   Fri Apr 7 23:36:53 2023 +0200

    Improve client circle page

commit 6b890e990f3603a3e36446f03f19e6588ed6792b
Merge: 7fa44a038 507478ca0
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Mar 31 16:12:58 2023 +0000

    Merge branch '6486-wrong-database-name-variable-used-in-rspamd-plugin' into 'develop'

    Resolve "Wrong database name variable used in Rspamd plugin"

    Closes #6486

    See merge request ispconfig/ispconfig3!1709

commit 507478ca015c2b849065d564b85ec64071e56381
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Mar 31 16:05:09 2023 +0000

    Update rspamd_plugin.inc.php

commit a080b1cd7c8049944b76d53cb53edc796f15c29f
Author: Michael Seevogel <git@michaelseevogel.de>
Date:   Wed Mar 29 21:10:10 2023 +0200

    simplify redhat os detection for the Nginx EL workaround

commit 03bce8232b607106195cc105304747246142e0a5
Author: 妙正灰 <ivmmvobe@mf8.biz>
Date:   Wed Mar 29 01:48:36 2023 +0800

    Add Simplified Chinese translations for ISPConfig

commit 7fa44a038009dfd9781c5065c143f4dd6f5aed2c
Merge: 4052ec765 56c5fc58d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Mar 27 15:59:09 2023 +0000

    Merge branch '6481-replication-failed-with-uncaught-error-undefined-constant-dbtable' into 'develop'

    Resolve "replication failed with Uncaught Error: Undefined constant "dbtable""

    Closes #6481

    See merge request ispconfig/ispconfig3!1706

commit 56c5fc58d7c47b1d1d14844eb5c3ef09d464e45f
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Mar 27 15:51:07 2023 +0000

    Update modules.inc.php

commit 4052ec765dd7df50575dbd4e8e420eec98664ee0
Merge: 35d979072 8e5c13bc9
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Mar 24 18:07:13 2023 +0000

    Merge branch '6452-uncaught-typeerror-array_merge-argument-1-must-be-of-type-array-bool-given-in' into 'develop'

    Resolve "Uncaught TypeError: array_merge(): Argument 1 must be of type array, bool given in shelluser_base_plugin.inc.php:480"

    Closes #6452

    See merge request ispconfig/ispconfig3!1689

commit 8e5c13bc900a9306ba01e0d48c24802e30ef4e5b
Merge: e3f14f75a 35d979072
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Mar 24 17:59:05 2023 +0000

    Merge branch 'develop' into '6452-uncaught-typeerror-array_merge-argument-1-must-be-of-type-array-bool-given-in'

    # Conflicts:
    #   server/lib/classes/file.inc.php

commit 35d979072c181d3487c6430b2959022badbfdabe
Merge: 05b848e77 30a569bad
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Mar 10 14:21:39 2023 +0000

    Merge branch 'display-servername' into 'develop'

    fixes displaying server_name in single server setups

    Closes #6474

    See merge request ispconfig/ispconfig3!1701

commit 62a6d04f0b279f6419e2422e7f22d39329dc0952
Author: Andreas Palm <ap@ewsp.de>
Date:   Fri Mar 10 15:06:25 2023 +0100

    make #6471 backwards compatible by keeping the old variable

commit 05b848e770ddd520405ef3c33837b8c8ec16af91
Merge: 6f6b94897 942b3cb08
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Thu Mar 9 14:29:21 2023 +0000

    Merge branch '6475-sql-query-builder-in-listform_actions-inc-php-failure' into 'develop'

    Resolve "SQL query builder in listform_actions.inc.php failure"

    Closes #6475

    See merge request ispconfig/ispconfig3!1702

commit 942b3cb0840c458f69b1ff47b49c42c83d4874f1
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Thu Mar 9 13:46:43 2023 +0000

    Update interface/lib/classes/listform_actions.inc.php

commit 30a569bade1717fd3c5e70acc62fdcecef37290c
Author: Michael Seevogel <git@michaelseevogel.de>
Date:   Thu Mar 9 14:04:48 2023 +0100

    fixes displaying server_name in single server setups

commit 6f6b94897c3b567ff3f112de9d3ed354aa4993db
Merge: e952f0941 667212e8d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Thu Mar 9 08:37:40 2023 +0000

    Merge branch '6434-vim-insert' into 'develop'

    Fix stale i character, #6434

    Closes #6434

    See merge request ispconfig/ispconfig3!1678

commit e952f09417e90516a43d2a5a158ebfc9ccb2b796
Merge: 4590e73cd f818412d0
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Thu Mar 9 08:34:10 2023 +0000

    Merge branch '6451-data-check-fields' into 'develop'

    Selecting a dnssec algorithm should imply wanting to sign the zone, #6451

    Closes #6451

    See merge request ispconfig/ispconfig3!1688

commit 4590e73cd1f38afdd0de623c7234df92cee78c6e
Merge: 8770f3a05 fc675e268
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Tue Mar 7 21:31:38 2023 +0000

    Merge branch '6449-domain-status' into 'develop'

    Show mail_domain status in list on mail_user_edit, #6449

    Closes #6449

    See merge request ispconfig/ispconfig3!1686

commit 8770f3a052d1df473075b25fab56e9b9d7882db8
Merge: dd8b2ab46 94a926f0d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Tue Mar 7 21:30:09 2023 +0000

    Merge branch '6450-show-dnssec-status' into 'develop'

    Show DNSSEC status in soa list

    Closes #6450

    See merge request ispconfig/ispconfig3!1687

commit dd8b2ab46b6b1fb7a85c189118df673e363eb339
Merge: 81ad2131e e042d3ea8
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Mar 6 17:58:56 2023 +0000

    Merge branch '6433-safe-delete-warning' into 'develop'

    Avoid a warning is the dir does not exist

    Closes #6433

    See merge request ispconfig/ispconfig3!1677

commit 81ad2131e7fecd5d8b18276336da0a706f987a03
Merge: 969a78d0d 1955d8264
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Mar 6 17:57:08 2023 +0000

    Merge branch '6345-fix-dns-zone-import' into 'develop'

    fix checkDomainModuleDomain call on dns zone imports #6345

    Closes #6345

    See merge request ispconfig/ispconfig3!1695

commit 969a78d0dfbf9d1a1b98744898f3e98680f62e95
Merge: efb5a55a4 280c16b99
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Mar 6 17:56:19 2023 +0000

    Merge branch '6459-fix-dkim-selector-regex' into 'develop'

    Fixed regex for dkim_selector to match only valid entires #6459

    Closes #6459

    See merge request ispconfig/ispconfig3!1692

commit 5e9a4fec54fd199004c240f483c7fa531ee30ec8
Author: Andreas Palm <ap@ewsp.de>
Date:   Tue Feb 28 22:49:24 2023 +0100

    include minor number in apache version for vhost.conf.master, #6471

commit efb5a55a4902d5befc92bbff321647325cf3bfbb
Merge: d340266dd 344b6bc6f
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Sun Feb 19 08:16:08 2023 +0000

    Merge branch '6463-new-lines' into 'develop'

    Initialize new_lines array, #6463

    Closes #6463

    See merge request ispconfig/ispconfig3!1694

commit d340266dd58efb5e9d07a9eccfe6123ca4b31c46
Merge: 45acbb421 7632c8ea3
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Sat Feb 18 18:26:17 2023 +0000

    Merge branch 'add-docs-for-remote-call-monitor-jobqueue-count' into 'develop'

    Add docs for remote call monitor_jobqueue_count()

    See merge request ispconfig/ispconfig3!1696

commit 45acbb421cd702da587d6b9b74031b15581fd434
Merge: dbeb110df 537caeb28
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Sat Feb 18 18:25:30 2023 +0000

    Merge branch 'Petar-develop-patch-53672' into 'develop'

    BUG doman>domain web_childdomain.tform.php

    See merge request ispconfig/ispconfig3!1697

commit dbeb110df4b945db5c618fc7325b601b348308aa
Merge: 7d30386fe bf853e67b
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Sat Feb 18 18:25:02 2023 +0000

    Merge branch 'Petar-develop-patch-91591' into 'develop'

    BUG doman>domain Update web_vhost_domain.tform.php

    See merge request ispconfig/ispconfig3!1698

commit bf853e67b8f6774b9e952a1760419f32c27af0d7
Author: Petar <p3romk@gmail.com>
Date:   Tue Feb 14 07:52:05 2023 +0000

    BUG doman>domain Update web_vhost_domain.tform.php

commit 537caeb28eccbd2d3c7ec92f84abb4011d658a4e
Author: Petar <p3romk@gmail.com>
Date:   Tue Feb 14 07:49:57 2023 +0000

    BUG doman>domain web_childdomain.tform.php

commit 7632c8ea346f4e0495a1cc45233cdaf23f674de3
Author: Mladen B <mladen074@gmail.com>
Date:   Mon Feb 13 09:52:13 2023 +0000

    Add docs for remote call monitor_jobqueue_count()

commit 1955d826405e6be0e5299d2ea4a369aa9437a12b
Author: Demian <demian@pytech.de>
Date:   Thu Feb 9 15:48:21 2023 +0100

    fix checkDomainModuleDomain call on dns zone imports #6345

    before we handed over domain_name instead of domain_id to the checkDomainModuleDomain function,
    which resulted in nothing. This fixes the call by querying the database for the domain_id for
    the given domain_name.

commit 344b6bc6fcb7ea48bfbf3a19181c80300397b3fd
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Feb 8 22:02:04 2023 +0100

    Initialize new_lines array, #6463

commit 07d37a4a8ef21fa8b5e899f72b53835fbdb88352
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Feb 8 21:41:53 2023 +0100

    account root should be owned by root, #6462

commit 280c16b99970d06334bd8950913512f25540de29
Author: Demian <demian@pytech.de>
Date:   Tue Feb 7 08:35:37 2023 +0100

    Fixed regex to match the dkim_slector RFC compliant #6459

    The dkim_select can start with a number, but has to contain atleast
    1 letter and has to be between 1 and 63 characters long.

commit 38103c00c1444d67f48d455c0e45fb22e15a8ce0
Author: Demian <demian@pytech.de>
Date:   Mon Feb 6 16:17:52 2023 +0100

    Fixed regex for dkim_selector to match only valid entires #6459

    before the regex matched empty entries and entries starting with a number.

commit 3ddebfe99470c34bab240aeb42fe9dc42772c7ad
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Feb 1 16:56:05 2023 +0100

    Extra error when No mail address available to sent an OTP code to

commit 7cb697a8f8bf59542ee40f96e3a50730a9ae2735
Author: Herman van Rink <rink@initfour.nl>
Date:   Thu May 19 13:36:11 2022 +0200

    Fix indend and add comment

commit 79770a899467464c114b2a49fcc15d0ebc98f5be
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Feb 1 16:33:02 2023 +0100

    Add otp_email_override support

    UI is still to be implemented

commit 7d30386fe3e0aae351e2f61955402e6e188561e3
Merge: d53109aa2 39b6810cf
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Jan 30 19:47:17 2023 +0000

    Merge branch '6458-let-s-encrypt-ssl-certs-not-issued-due-to-changed-cert-path-for-ecc-certs' into 'develop'

    Resolve "Let's Encrypt SSL certs not issued due to changed cert path for ECC certs"

    Closes #6458

    See merge request ispconfig/ispconfig3!1691

commit 39b6810cf9c42713fe543120e5d03a393a6f32ab
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Mon Jan 30 19:38:45 2023 +0000

    Update install/lib/installer_base.lib.php

commit 27fea5f289300e361a755f7526ce9540ede57fbc
Author: Herman van Rink <rink@initfour.nl>
Date:   Fri Jan 27 22:32:51 2023 +0100

    Avoid Deprecation warning

    PHP Deprecated:  substr(): Passing null to parameter #1 ($string) of type string is deprecated in /usr/local/ispconfig/server/plugins-available/bind_plugin.inc.php on line 397

commit e3f14f75a7e8910ff03a83454a32ca7fefc94d0b
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Jan 20 10:19:10 2023 +0000

    Fixed Uncaught TypeError: array_merge(): Argument #1 must be of type array, bool given in /usr/local/ispconfig/server/plugins-available/shelluser_jailkit_plugin.inc.php:530

commit 79637839cb40bd18966606297c78e0a6da85a404
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Jan 20 10:13:31 2023 +0000

    Fixed Undefined variable $new_lines in /usr/local/ispconfig/server/lib/classes/file.inc.php on line 126

commit dddf3e5bd0d31c7066b051ed84e4fb493a3ad14a
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Jan 20 06:14:53 2023 +0000

    Update server/plugins-available/shelluser_base_plugin.inc.php

commit f818412d0462dc734e1b6f463233f7a3cddfe065
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Jan 18 15:38:50 2023 +0100

    Selecting a dnssec algarithm should imply wanting to sign the zone, #6451

commit 94a926f0d027723674f434f701642a5810630aed
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Jan 18 14:31:33 2023 +0100

    Show DNSSEC status in soa list

commit fc675e2684004c124b1c96f172f0e44e100c4413
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Jan 18 08:48:41 2023 +0100

    Show mail_domain status in list on mail_user_edit, #6449

commit 39d95d1641c60ff9051d3c0eafcf425a29aecdda
Author: Herman van Rink <rink@initfour.nl>
Date:   Tue Jan 17 13:58:27 2023 +0100

    Early return when no LE domains remain, #6446

commit 2e8f525e590352dc33277a3efc93c6f3486e8a49
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Jan 16 21:48:28 2023 +0100

    Fix php 8.2 deprecation warnings, #6444

commit 4a099343840dbab9ad929becf674fea2d047127a
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Dec 26 14:30:58 2022 +0100

    Fix loginc error, backup_download_dir was not initialized in time

    Fround by: PHP Deprecated:  is_dir(): Passing null to parameter #1 ($filename) of type string is deprecated in /usr/local/ispconfig/server/lib/classes/backup.inc.php on line 1311

commit a41468bf1c2ff19d9f9a9d87913e87103a1cbe9c
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Dec 26 14:21:36 2022 +0100

    Avoid Automatic conversion of false to array is deprecated in cron.d/200-logfiles.inc.php

commit 5bb6e37a974506cfa343544807cd3c7be52ad7d1
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Dec 26 12:41:04 2022 +0100

    Avoid php8.1 warning about shell_exec returning NULL

commit bb0880560339d825ad586de28d8d03c2a5020125
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Dec 26 10:36:40 2022 +0100

    an before a vowel

commit f5defafcfb8fb5d771c62d9d0ad244ba9e6f82ce
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Dec 25 22:42:20 2022 +0100

    Default to the records tab for found dns zones, #6436

commit a8d78f68d8b882a153b555e1207c2ca3004ba9f3
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Dec 25 21:30:38 2022 +0100

    Move asking to sql root to the place where its needed,

commit 996a7d719f7a9ddaa4703584cea980e418cc3cdc
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Dec 25 19:17:08 2022 +0100

    Extend ignore file for vscode

commit 8be92ac9206d689b842692cde7e3cb9f4e70f533
Author: Herman van Rink <rink@initfour.nl>
Date:   Tue Nov 29 23:23:48 2022 +0100

    fix typo

commit 614e7bd65c002819ed2117fd1294927ca6397742
Author: Herman van Rink <rink@initfour.nl>
Date:   Thu May 26 22:22:19 2022 +0200

    Indent for readability

commit f9f235c1a9aaf8522959f22ac94084b3f87c5ca4
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Apr 24 21:28:09 2022 +0200

    Fix comment + linewrap

commit 093ad5040724af8e3ee4ba6be4e0565c4a9c5c5b
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Apr 17 22:51:55 2022 +0200

    Extra api example usage

commit 667212e8d07b94f652c3b032aaf270b66d0d2785
Author: Herman van Rink <rink@initfour.nl>
Date:   Sat Dec 24 23:37:17 2022 +0100

    Fix stale i character, #6434

commit e042d3ea8e81e6ca1f55512b77014bd65d474685
Author: Herman van Rink <rink@initfour.nl>
Date:   Fri Dec 23 21:53:31 2022 +0100

    Avoid a warning is the dir does not exist

commit 4d2b2f5d1c870af97d396206187bd67eb668644a
Author: Webslice <webslice@bixels.nl>
Date:   Thu Dec 22 09:43:56 2022 +0100

    Use PHP from path in server.sh

commit ace15083a35484e2ce025135960226fa2d8461a1
Author: Dimitri <de@niih.de>
Date:   Fri Dec 16 23:23:09 2022 +0000

    fixes #6431 // make sure config file is deleted only during spamfilter_user event.

commit 14032d8876fd44fc37897cbfa61afe524e3b8996
Author: Dimitri <de@niih.de>
Date:   Fri Dec 16 23:20:06 2022 +0000

    Revert "Merge branch '6431-rspamd-user-config-deleted-on-mail-user-changes' into 'develop'"

    This reverts merge request !1

commit ff4988ae9ff7a5b1287b10bb97025f7c1b0da48b
Merge: d53109aa2 a5845b137
Author: Dimitri <de@niih.de>
Date:   Fri Dec 16 22:52:19 2022 +0000

    Merge branch '6431-rspamd-user-config-deleted-on-mail-user-changes' into 'develop'

    fixes #6431 // make sure config file is deleted only during spamfilter_user event.

    See merge request dimitri/ispconfig3!1

commit a5845b137f32b9f5abe3baf435794af5aaf9b7ce
Author: Dimitri <de@niih.de>
Date:   Fri Dec 16 22:29:13 2022 +0000

    fixes #6431 // make sure config file is deleted only during spamfilter_user event.

commit d53109aa289f87c6cc4c98cc3400dbf512a6fd3b
Merge: 1d6b37d97 17629b613
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 16 17:50:53 2022 +0000

    Merge branch '6430-php8-unable-to-add-database-on-multiserver-setup-withs-eparate-db-server' into 'develop'

    Resolve "PHP8: Unable to add database on multiserver setup withs eparate DB server"

    Closes #6430

    See merge request ispconfig/ispconfig3!1673

commit 17629b613c5209a6ad647dff644314b3a8fe3fa3
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 16 16:01:10 2022 +0000

    Update interface/web/sites/database_edit.php

commit cc39cc617a6303826962d05d74598af844aae54e
Author: Krzysztof Baranowski <krzysiek@hostname.pl>
Date:   Wed Dec 14 17:50:49 2022 +0000

    Update 300-quota_notify.inc.php

    Add all clients to array, use data when needed.

commit 1d6b37d97b7f8ae8ef0331c020431d2ba539c840
Merge: 29f90a26a b5b8a5853
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 9 08:29:58 2022 +0000

    Merge branch '6417-quota-unlimited-zero-vs--1' into 'develop'

    Unlimited quota is stored as -1, not zero, #6417

    Closes #6417

    See merge request ispconfig/ispconfig3!1668

commit 29f90a26a4b65f109f445fb4949c49236b272f0a
Merge: 9220d195e 77ab6ddac
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 9 08:28:49 2022 +0000

    Merge branch '6418-usage-sort' into 'develop'

    Mark usage column for php sorting, #6418

    Closes #6418

    See merge request ispconfig/ispconfig3!1669

commit 9220d195e647fa0b2e1e218a717f12ec705891ce
Merge: 483cf6fff 697ce3b60
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 9 08:28:12 2022 +0000

    Merge branch '6419-isset' into 'develop'

    PHP 8 strict fixes, #6419

    Closes #6419

    See merge request ispconfig/ispconfig3!1670

commit 483cf6fff23211dc3e30aa4017790536d7da5723
Merge: 9ab8755e5 da608f7ff
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Fri Dec 9 08:26:28 2022 +0000

    Merge branch 'sonority-develop-patch-76321' into 'develop'

    Fixed typo. Wrong "subjectAltName" with leading dot when using self-signed certificates.

    See merge request ispconfig/ispconfig3!1671

commit 9ab8755e5df03081868a7c9ff875ad9484713e2d
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Wed Dec 7 09:12:30 2022 +0000

    Update backup.inc.php fixed syntax error in log function in older PHP versions

commit b5b8a5853103f823785b1e32482db682a1deeb46
Author: Herman van Rink <rink@initfour.nl>
Date:   Tue Dec 6 23:03:34 2022 +0100

    -1 has no meaning for a mail_user quota, 0==unlimited and default.

commit 9648eaa80fbc00214feb570706d33c8b5b423585
Author: Herman van Rink <rink@initfour.nl>
Date:   Tue Dec 6 22:55:46 2022 +0100

    -1 has no meaning for a mail_user quota, 0==unlimited and default.

commit da608f7ff4dbcc3dddf8bc86d829496a38661cbc
Author: Stephan Kellermayr <stephan.kellermayr@gmail.com>
Date:   Tue Dec 6 15:22:04 2022 +0000

    Fixed typo. Wrong "subjectAltName" with leading dot when using self-signed certificates.

commit 2133a9886a45448d63001049b58e1c8f32f693c8
Author: Herman van Rink <rink@initfour.nl>
Date:   Mon Dec 5 21:26:55 2022 +0100

    Revert unlimited quota check for email, dovecot forces this to be 0.

commit 697ce3b608622aba11fefe55164ead5631685d33
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Dec 4 22:53:09 2022 +0100

    PHP 8 strict fixes, #6419

commit 77ab6ddacfa5925f848ce6083d40258e36cec193
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Dec 4 20:53:59 2022 +0100

    Mark usage column for php sorting, #6418

commit e11f336e42c2cef7901abc5d1327c7ac557d145f
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Nov 27 22:51:13 2022 +0100

    tabs

commit 626ec513c3a81282cf2bb5e8158e8adfbeec1dff
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Nov 27 22:36:55 2022 +0100

    Unlimited quota is stored as -1, not zero, #6417

commit d0f92fc6a3c2fe3548f1a2b7957718a90678fba6
Merge: 7b15d049a d079b0133
Author: Till Brehm <tbrehm@ispconfig.org>
Date:   Thu Nov 24 18:53:18 2022 +0000

    Merge branch 'develop' into 'develop'

    APS deletion follows symlink

    See merge request ispconfig/ispconfig3!1666

commit d079b01330a767f6c80e1d031af8eca3779a43d9
Author: clk <clk@teuto.net>
Date:   Thu Nov 24 13:27:32 2022 +0100

    Fixed file deletion bug

commit 502a66bbff10323f7d35e4655358468965e7bd67
Merge: 69c4da025 953772335
Author: Christian <chris@seeya.at>
Date:   Tue Nov 15 20:02:29 2022 +0000

    Merge branch 'develop' into 'develop'

    # Conflicts:
    #   install/dist/tpl/gentoo/apache_ispconfig.vhost.master

commit 69c4da025798cf0147173c394a9f5b7822f2b7b8
Author: dachris1 <chris@seeya.at>
Date:   Tue Nov 15 20:12:06 2022 +0100

    updated based on debian config

    install/tpl/gentoo_postfix.conf.master
    updated based on debian config

commit f58ff87aad89fa72b3807d66b75058840bdd4fb0
Author: dachris1 <chris@seeya.at>
Date:   Tue Nov 15 20:11:18 2022 +0100

    new config based on debian config

    added <IfModule mod_version.c> because gentoo has no mod version installed by default
    added <IfModule mod_proxy_fcgi.c>

commit 98f84fedc3d8711a9722c34926c8a6ff973cfb12
Author: dachris1 <chris@seeya.at>
Date:   Tue Nov 15 20:05:37 2022 +0100

    updated/added functions

    install/dist/lib/gentoo.lib.php
    updated functions:
    configure_postfix
    configure_dovecot
    install_ispconfig

    added configuration for pureftpd versions greater than 1.0.50

    added function get_host_ips() because gentoo does not provide IPs with "hostname --all-ip-addresses"

commit b81daafdcd18f4b8a3d0beebc8202160274156da
Author: dachris1 <chris@seeya.at>
Date:   Tue Nov 15 20:01:29 2022 +0100

    added gentoo specific code to keep symlinks in _getinitcommand

    server/lib/classes/system.inc.php
    added gentoo specific code to keep symlinks as init script. gentoo uses symlinks to start different php-fpm versions, but "realpath" kills these symlinks.

commit bc0347285490ab6c2bc42fd7d45736b00598128f
Author: Herman van Rink <rink@initfour.nl>
Date:   Fri Aug 19 17:00:16 2022 +0200

    Restore onChange as an addition to OnPaste

    This could be refactorred into a function ...

commit 6d437a507beca31dffa002bd9bb14df4d155c2d6
Author: Herman van Rink <rink@initfour.nl>
Date:   Wed Aug 17 21:04:51 2022 +0200

    Convert onChange to OnPaste

commit e5d54a6547d3af4c480eb6276f8c78907e97bc06
Author: Herman van Rink <rink@initfour.nl>
Date:   Sun Feb 27 23:25:32 2022 +0100

    Paste email address to select mail domain
---
 .../autoinstall.conf_sample.php               |   2 +-
 .../autoinstall.ini.sample                    |   2 +-
 install/dist/lib/gentoo.lib.php               | 695 +++++++++++++-----
 .../tpl/gentoo/apache_ispconfig.vhost.master  | 121 ++-
 install/lib/install.lib.php                   |   9 +-
 install/lib/installer_base.lib.php            |  48 +-
 .../sql/incremental/upd_dev_collection.sql    |   2 +
 install/sql/ispconfig3.sql                    |   2 +-
 install/tpl/gentoo_postfix.conf.master        |   7 +-
 interface/lib/classes/db_mysql.inc.php        |  13 +-
 .../lib/classes/listform_actions.inc.php      |   2 +-
 interface/lib/classes/tform_base.inc.php      |   6 +-
 interface/lib/lang/cn.lng                     | 178 +++++
 interface/web/admin/lib/lang/cn.lng           |  60 ++
 .../admin/lib/lang/cn_directive_snippets.lng  |  15 +
 .../lib/lang/cn_directive_snippets_list.lng   |   8 +
 interface/web/admin/lib/lang/cn_firewall.lng  |  11 +
 .../web/admin/lib/lang/cn_firewall_list.lng   |   8 +
 interface/web/admin/lib/lang/cn_groups.lng    |   5 +
 .../web/admin/lib/lang/cn_groups_list.lng     |   7 +
 interface/web/admin/lib/lang/cn_iptables.lng  |  15 +
 .../web/admin/lib/lang/cn_iptables_list.lng   |  17 +
 .../web/admin/lib/lang/cn_language_add.lng    |   8 +
 .../admin/lib/lang/cn_language_complete.lng   |   7 +
 .../web/admin/lib/lang/cn_language_edit.lng   |   8 +
 .../web/admin/lib/lang/cn_language_export.lng |   6 +
 .../web/admin/lib/lang/cn_language_import.lng |   9 +
 .../web/admin/lib/lang/cn_language_list.lng   |   7 +
 .../web/admin/lib/lang/cn_package_install.lng |   7 +
 .../web/admin/lib/lang/cn_remote_action.lng   |  12 +
 .../web/admin/lib/lang/cn_remote_user.lng     |  52 ++
 .../admin/lib/lang/cn_remote_user_list.lng    |   7 +
 interface/web/admin/lib/lang/cn_server.lng    |  16 +
 .../web/admin/lib/lang/cn_server_config.lng   | 354 +++++++++
 .../admin/lib/lang/cn_server_config_list.lng  |   4 +
 interface/web/admin/lib/lang/cn_server_ip.lng |  13 +
 .../web/admin/lib/lang/cn_server_ip_list.lng  |  10 +
 .../web/admin/lib/lang/cn_server_ip_map.lng   |  14 +
 .../admin/lib/lang/cn_server_ip_map_list.lng  |   7 +
 .../web/admin/lib/lang/cn_server_list.lng     |  14 +
 .../web/admin/lib/lang/cn_server_php.lng      |  20 +
 .../web/admin/lib/lang/cn_server_php_list.lng |   9 +
 .../web/admin/lib/lang/cn_system_config.lng   | 110 +++
 .../admin/lib/lang/cn_tpl_default_admin.lng   |  18 +
 interface/web/admin/lib/lang/cn_users.lng     |  42 ++
 .../web/admin/lib/lang/cn_users_list.lng      |   9 +
 interface/web/admin/list/firewall.list.php    |   8 +-
 interface/web/admin/list/remote_user.list.php |   2 +-
 interface/web/admin/list/server_php.list.php  |   3 +
 interface/web/admin/server_config_edit.php    |   2 +-
 .../web/client/form/client_circle.tform.php   |   5 +-
 interface/web/client/lib/lang/cn.lng          |  31 +
 interface/web/client/lib/lang/cn_client.lng   | 210 ++++++
 .../web/client/lib/lang/cn_client_circle.lng  |   9 +
 .../client/lib/lang/cn_client_circle_list.lng |  10 +
 .../web/client/lib/lang/cn_client_del.lng     |  10 +
 .../web/client/lib/lang/cn_client_message.lng |  20 +
 .../lib/lang/cn_client_message_template.lng   |  13 +
 .../lang/cn_client_message_template_list.lng  |   5 +
 .../client/lib/lang/cn_client_template.lng    | 131 ++++
 .../lib/lang/cn_client_template_list.lng      |   7 +
 .../web/client/lib/lang/cn_clients_list.lng   |  14 +
 interface/web/client/lib/lang/cn_domain.lng   |   6 +
 .../web/client/lib/lang/cn_domain_list.lng    |   6 +
 interface/web/client/lib/lang/cn_reseller.lng | 216 ++++++
 .../web/client/lib/lang/cn_resellers_list.lng |  11 +
 interface/web/client/list/domain.list.php     |   2 +-
 .../client/templates/client_circle_edit.htm   |  15 +-
 interface/web/dashboard/lib/lang/cn.lng       |   4 +
 .../lib/lang/cn_dashlet_customer.lng          |   4 +
 .../lib/lang/cn_dashlet_databasequota.lng     |   7 +
 .../dashboard/lib/lang/cn_dashlet_donate.lng  |   7 +
 .../cn_dashlet_invoice_client_settings.lng    |   4 +
 .../lib/lang/cn_dashlet_invoices.lng          |  18 +
 .../dashboard/lib/lang/cn_dashlet_limits.lng  |  34 +
 .../lib/lang/cn_dashlet_mailquota.lng         |   8 +
 .../dashboard/lib/lang/cn_dashlet_modules.lng |   4 +
 .../lib/lang/cn_dashlet_products.lng          |   9 +
 .../dashboard/lib/lang/cn_dashlet_quota.lng   |   8 +
 .../dashboard/lib/lang/cn_dashlet_shop.lng    |   8 +
 interface/web/dns/dns_import.php              |   6 +-
 interface/web/dns/form/dns_soa.tform.php      |   1 +
 interface/web/dns/lib/lang/ar_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/ar_dns_soa.lng     |   2 +-
 interface/web/dns/lib/lang/bg_dns_soa.lng     |   2 +-
 interface/web/dns/lib/lang/cn.lng             |  23 +
 interface/web/dns/lib/lang/cn_dns_a.lng       |  17 +
 interface/web/dns/lib/lang/cn_dns_a_list.lng  |  15 +
 interface/web/dns/lib/lang/cn_dns_aaaa.lng    |  17 +
 interface/web/dns/lib/lang/cn_dns_alias.lng   |  17 +
 interface/web/dns/lib/lang/cn_dns_caa.lng     |  18 +
 interface/web/dns/lib/lang/cn_dns_cname.lng   |  17 +
 interface/web/dns/lib/lang/cn_dns_dkim.lng    |  13 +
 interface/web/dns/lib/lang/cn_dns_dmarc.lng   |  50 ++
 interface/web/dns/lib/lang/cn_dns_dname.lng   |  17 +
 interface/web/dns/lib/lang/cn_dns_ds.lng      |  18 +
 interface/web/dns/lib/lang/cn_dns_hinfo.lng   |  16 +
 interface/web/dns/lib/lang/cn_dns_import.lng  |  25 +
 interface/web/dns/lib/lang/cn_dns_loc.lng     |  16 +
 interface/web/dns/lib/lang/cn_dns_mx.lng      |  18 +
 interface/web/dns/lib/lang/cn_dns_naptr.lng   |  21 +
 interface/web/dns/lib/lang/cn_dns_ns.lng      |  16 +
 interface/web/dns/lib/lang/cn_dns_ptr.lng     |  16 +
 interface/web/dns/lib/lang/cn_dns_rp.lng      |  16 +
 interface/web/dns/lib/lang/cn_dns_slave.lng   |  17 +
 .../dns/lib/lang/cn_dns_slave_admin_list.lng  |  10 +
 .../web/dns/lib/lang/cn_dns_slave_list.lng    |   9 +
 interface/web/dns/lib/lang/cn_dns_soa.lng     |  47 ++
 .../dns/lib/lang/cn_dns_soa_admin_list.lng    |  12 +
 .../web/dns/lib/lang/cn_dns_soa_list.lng      |  11 +
 interface/web/dns/lib/lang/cn_dns_spf.lng     |  30 +
 interface/web/dns/lib/lang/cn_dns_srv.lng     |  20 +
 interface/web/dns/lib/lang/cn_dns_sshfp.lng   |  16 +
 .../web/dns/lib/lang/cn_dns_template.lng      |   7 +
 .../web/dns/lib/lang/cn_dns_template_list.lng |   6 +
 interface/web/dns/lib/lang/cn_dns_tlsa.lng    |  16 +
 interface/web/dns/lib/lang/cn_dns_txt.lng     |  19 +
 interface/web/dns/lib/lang/cn_dns_wizard.lng  |  45 ++
 interface/web/dns/lib/lang/en_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/en_dns_soa.lng     |   2 +-
 interface/web/dns/lib/lang/fi_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/hu_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/hu_dns_soa.lng     |   2 +-
 interface/web/dns/lib/lang/ja_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/pt_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/ro_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/se_dns_slave.lng   |   2 +-
 interface/web/dns/lib/lang/sk_dns_slave.lng   |   2 +-
 interface/web/dns/list/dns_a.list.php         |   8 +-
 interface/web/dns/list/dns_slave.list.php     |   8 +-
 interface/web/dns/list/dns_soa.list.php       |  18 +-
 .../web/dns/templates/dns_soa_admin_list.htm  |   2 +-
 interface/web/dns/templates/dns_soa_list.htm  |   2 +-
 interface/web/help/lib/lang/cn.lng            |  15 +
 interface/web/help/lib/lang/cn_faq_form.lng   |   6 +
 .../lib/lang/cn_faq_manage_questions_list.lng |   9 +
 .../help/lib/lang/cn_faq_sections_form.lng    |   3 +
 .../web/help/lib/lang/cn_help_faq_list.lng    |   3 +
 .../lib/lang/cn_help_faq_sections_list.lng    |   8 +
 .../web/help/lib/lang/cn_support_message.lng  |  16 +
 .../help/lib/lang/cn_support_message_list.lng |   7 +
 .../web/help/list/support_message.list.php    |   2 +-
 interface/web/login/lib/lang/cn.lng           |  43 ++
 interface/web/login/lib/lang/cn_login_as.lng  |  15 +
 interface/web/login/otp.php                   |  22 +-
 interface/web/mail/form/mail_domain.tform.php |   2 +-
 interface/web/mail/form/mail_user.tform.php   |   2 +-
 interface/web/mail/lib/lang/ar.lng            |   1 +
 interface/web/mail/lib/lang/bg.lng            |   1 +
 interface/web/mail/lib/lang/br.lng            |   1 +
 interface/web/mail/lib/lang/ca.lng            |   1 +
 interface/web/mail/lib/lang/cn.lng            |  52 ++
 .../mail/lib/lang/cn_backup_stats_list.lng    |   9 +
 interface/web/mail/lib/lang/cn_mail_alias.lng |  16 +
 .../web/mail/lib/lang/cn_mail_alias_list.lng  |   8 +
 .../web/mail/lib/lang/cn_mail_aliasdomain.lng |  11 +
 .../lib/lang/cn_mail_aliasdomain_list.lng     |   8 +
 .../web/mail/lib/lang/cn_mail_backup_list.lng |  16 +
 .../web/mail/lib/lang/cn_mail_blacklist.lng   |  12 +
 .../mail/lib/lang/cn_mail_blacklist_list.lng  |  10 +
 .../mail/lib/lang/cn_mail_content_filter.lng  |   9 +
 .../lib/lang/cn_mail_content_filter_list.lng  |   8 +
 .../web/mail/lib/lang/cn_mail_domain.lng      |  25 +
 .../lib/lang/cn_mail_domain_admin_list.lng    |   8 +
 .../mail/lib/lang/cn_mail_domain_catchall.lng |  14 +
 .../lib/lang/cn_mail_domain_catchall_list.lng |   9 +
 .../web/mail/lib/lang/cn_mail_domain_list.lng |   7 +
 .../web/mail/lib/lang/cn_mail_forward.lng     |  15 +
 .../mail/lib/lang/cn_mail_forward_list.lng    |   8 +
 interface/web/mail/lib/lang/cn_mail_get.lng   |  19 +
 .../web/mail/lib/lang/cn_mail_get_list.lng    |   9 +
 .../web/mail/lib/lang/cn_mail_mailinglist.lng |  23 +
 .../lib/lang/cn_mail_mailinglist_list.lng     |   5 +
 .../mail/lib/lang/cn_mail_relay_domain.lng    |   9 +
 .../lib/lang/cn_mail_relay_domain_list.lng    |   7 +
 .../mail/lib/lang/cn_mail_relay_recipient.lng |   9 +
 .../lib/lang/cn_mail_relay_recipient_list.lng |   9 +
 .../web/mail/lib/lang/cn_mail_spamfilter.lng  |  17 +
 .../mail/lib/lang/cn_mail_spamfilter_list.lng |   8 +
 .../web/mail/lib/lang/cn_mail_transport.lng   |  11 +
 .../mail/lib/lang/cn_mail_transport_list.lng  |   9 +
 interface/web/mail/lib/lang/cn_mail_user.lng  |  77 ++
 .../web/mail/lib/lang/cn_mail_user_filter.lng |  31 +
 .../lib/lang/cn_mail_user_filter_list.lng     |   7 +
 .../web/mail/lib/lang/cn_mail_user_list.lng   |  13 +
 .../mail/lib/lang/cn_mail_user_stats_list.lng |   8 +
 .../web/mail/lib/lang/cn_mail_whitelist.lng   |  12 +
 .../mail/lib/lang/cn_mail_whitelist_list.lng  |  10 +
 .../mail/lib/lang/cn_spamfilter_blacklist.lng |  12 +
 .../lib/lang/cn_spamfilter_blacklist_list.lng |   9 +
 .../mail/lib/lang/cn_spamfilter_config.lng    |  20 +
 .../lib/lang/cn_spamfilter_config_list.lng    |   5 +
 .../mail/lib/lang/cn_spamfilter_policy.lng    |  51 ++
 .../lib/lang/cn_spamfilter_policy_list.lng    |   9 +
 .../web/mail/lib/lang/cn_spamfilter_users.lng |  13 +
 .../lib/lang/cn_spamfilter_users_list.lng     |  10 +
 .../mail/lib/lang/cn_spamfilter_whitelist.lng |  12 +
 .../lib/lang/cn_spamfilter_whitelist_list.lng |   9 +
 .../lib/lang/cn_user_quota_stats_list.lng     |   8 +
 .../web/mail/lib/lang/cn_xmpp_domain.lng      |  62 ++
 .../lib/lang/cn_xmpp_domain_admin_list.lng    |   8 +
 .../web/mail/lib/lang/cn_xmpp_domain_list.lng |   7 +
 interface/web/mail/lib/lang/cn_xmpp_user.lng  |  15 +
 .../web/mail/lib/lang/cn_xmpp_user_list.lng   |   8 +
 interface/web/mail/lib/lang/cz.lng            |   1 +
 interface/web/mail/lib/lang/de.lng            |   1 +
 interface/web/mail/lib/lang/dk.lng            |   1 +
 interface/web/mail/lib/lang/el.lng            |   1 +
 interface/web/mail/lib/lang/en.lng            |   1 +
 interface/web/mail/lib/lang/es.lng            |   1 +
 interface/web/mail/lib/lang/fi.lng            |   1 +
 interface/web/mail/lib/lang/fr.lng            |   1 +
 interface/web/mail/lib/lang/hr.lng            |   1 +
 interface/web/mail/lib/lang/hu.lng            |   1 +
 interface/web/mail/lib/lang/id.lng            |   1 +
 interface/web/mail/lib/lang/it.lng            |   1 +
 interface/web/mail/lib/lang/ja.lng            |   1 +
 interface/web/mail/lib/lang/nl.lng            |   1 +
 interface/web/mail/lib/lang/pl.lng            |   1 +
 interface/web/mail/lib/lang/pt.lng            |   1 +
 interface/web/mail/lib/lang/ro.lng            |   1 +
 interface/web/mail/lib/lang/ru.lng            |   1 +
 interface/web/mail/lib/lang/se.lng            |   1 +
 interface/web/mail/lib/lang/sk.lng            |   1 +
 interface/web/mail/lib/lang/tr.lng            |   1 +
 .../web/mail/list/mail_blacklist.list.php     |   8 +-
 .../mail/list/mail_content_filter.list.php    |   8 +-
 interface/web/mail/list/mail_domain.list.php  |   2 +-
 interface/web/mail/list/mail_get.list.php     |   8 +-
 .../web/mail/list/mail_relay_domain.list.php  |   8 +-
 .../mail/list/mail_relay_recipient.list.php   |   8 +-
 .../web/mail/list/mail_spamfilter.list.php    |   8 +-
 .../web/mail/list/mail_transport.list.php     |   8 +-
 .../web/mail/list/mail_whitelist.list.php     |   8 +-
 .../mail/list/spamfilter_blacklist.list.php   |   8 +-
 .../web/mail/list/spamfilter_users.list.php   |  16 +-
 .../mail/list/spamfilter_whitelist.list.php   |  16 +-
 interface/web/mail/list/xmpp_domain.list.php  |   2 +-
 interface/web/mail/mail_user_edit.php         |   5 +-
 .../mail/templates/mail_user_mailbox_edit.htm |   2 +-
 interface/web/mailuser/lib/lang/cn.lng        |   9 +
 interface/web/mailuser/lib/lang/cn_index.lng  |  12 +
 .../lib/lang/cn_mail_user_autoresponder.lng   |  13 +
 .../web/mailuser/lib/lang/cn_mail_user_cc.lng |  11 +
 .../mailuser/lib/lang/cn_mail_user_filter.lng |  26 +
 .../lib/lang/cn_mail_user_filter_list.lng     |   8 +
 .../lib/lang/cn_mail_user_password.lng        |  11 +
 .../lib/lang/cn_mail_user_spamfilter.lng      |   7 +
 interface/web/monitor/lib/lang/cn.lng         | 168 +++++
 .../web/monitor/lib/lang/cn_datalog_list.lng  |   8 +
 .../lib/lang/cn_dataloghistory_list.lng       |   9 +
 .../lib/lang/cn_dataloghistory_undo.lng       |   7 +
 .../lib/lang/cn_dataloghistory_view.lng       |  27 +
 .../web/monitor/lib/lang/cn_syslog_list.lng   |  10 +
 interface/web/sites/database_edit.php         |   4 +-
 .../web/sites/form/web_childdomain.tform.php  |   2 +-
 .../web/sites/form/web_vhost_domain.tform.php |   2 +-
 interface/web/sites/lib/lang/cn.lng           |  35 +
 interface/web/sites/lib/lang/cn_aps.lng       |  63 ++
 .../sites/lib/lang/cn_aps_instances_list.lng  |  11 +
 .../sites/lib/lang/cn_aps_packages_list.lng   |   8 +
 .../lib/lang/cn_aps_update_packagelist.lng    |   7 +
 .../sites/lib/lang/cn_backup_stats_list.lng   |  10 +
 interface/web/sites/lib/lang/cn_cron.lng      |  26 +
 interface/web/sites/lib/lang/cn_cron_list.lng |  13 +
 interface/web/sites/lib/lang/cn_database.lng  |  50 ++
 .../sites/lib/lang/cn_database_admin_list.lng |  12 +
 .../web/sites/lib/lang/cn_database_list.lng   |  11 +
 .../lib/lang/cn_database_quota_stats_list.lng |   9 +
 .../web/sites/lib/lang/cn_database_user.lng   |  25 +
 .../lib/lang/cn_database_user_admin_list.lng  |   6 +
 .../sites/lib/lang/cn_database_user_list.lng  |   5 +
 .../lib/lang/cn_ftp_sites_stats_list.lng      |  10 +
 interface/web/sites/lib/lang/cn_ftp_user.lng  |  36 +
 .../web/sites/lib/lang/cn_ftp_user_list.lng   |   8 +
 .../web/sites/lib/lang/cn_shell_user.lng      |  36 +
 .../web/sites/lib/lang/cn_shell_user_list.lng |   8 +
 .../lib/lang/cn_user_quota_stats_list.lng     |  10 +
 .../web/sites/lib/lang/cn_web_aliasdomain.lng | 118 +++
 .../lib/lang/cn_web_aliasdomain_list.lng      |  14 +
 .../web/sites/lib/lang/cn_web_backup_list.lng |  54 ++
 .../web/sites/lib/lang/cn_web_childdomain.lng | 124 ++++
 .../lib/lang/cn_web_childdomain_list.lng      |  18 +
 .../lib/lang/cn_web_directive_snippets.lng    |   3 +
 .../web/sites/lib/lang/cn_web_domain.lng      | 141 ++++
 .../lib/lang/cn_web_domain_admin_list.lng     |   9 +
 .../web/sites/lib/lang/cn_web_domain_list.lng |   8 +
 .../web/sites/lib/lang/cn_web_folder.lng      |   8 +
 .../web/sites/lib/lang/cn_web_folder_list.lng |   8 +
 .../web/sites/lib/lang/cn_web_folder_user.lng |  14 +
 .../lib/lang/cn_web_folder_user_list.lng      |   7 +
 .../lib/lang/cn_web_sites_stats_list.lng      |  10 +
 .../web/sites/lib/lang/cn_web_subdomain.lng   |  54 ++
 .../sites/lib/lang/cn_web_subdomain_list.lng  |   8 +
 .../sites/lib/lang/cn_web_vhost_domain.lng    | 209 ++++++
 .../lang/cn_web_vhost_domain_admin_list.lng   |  14 +
 .../lib/lang/cn_web_vhost_domain_list.lng     |  14 +
 .../sites/lib/lang/cn_web_vhost_subdomain.lng | 136 ++++
 .../lib/lang/cn_web_vhost_subdomain_list.lng  |   8 +
 .../web/sites/lib/lang/cn_webdav_user.lng     |  21 +
 .../sites/lib/lang/cn_webdav_user_list.lng    |   8 +
 interface/web/sites/list/cron.list.php        |  10 +-
 interface/web/sites/list/database.list.php    |   8 +-
 interface/web/sites/list/ftp_user.list.php    |   8 +-
 interface/web/sites/list/shell_user.list.php  |  10 +-
 .../web/sites/list/web_childdomain.list.php   |   6 +-
 interface/web/sites/list/web_folder.list.php  |  10 +-
 .../web/sites/list/web_folder_user.list.php   |   2 +-
 interface/web/sites/list/webdav_user.list.php |  10 +-
 .../lib/lang/cn_strengthmeter.lng             |   8 +
 interface/web/tools/lib/lang/cn.lng           |  13 +
 .../tools/lib/lang/cn_import_ispconfig.lng    |  25 +
 .../web/tools/lib/lang/cn_import_vpopmail.lng |   8 +
 interface/web/tools/lib/lang/cn_index.lng     |   4 +
 interface/web/tools/lib/lang/cn_resync.lng    |  53 ++
 .../web/tools/lib/lang/cn_tpl_default.lng     |   7 +
 .../web/tools/lib/lang/cn_usersettings.lng    |  20 +
 interface/web/vm/lib/lang/cn.lng              |   7 +
 .../web/vm/lib/lang/cn_openvz_action.lng      |  17 +
 interface/web/vm/lib/lang/cn_openvz_ip.lng    |   9 +
 .../web/vm/lib/lang/cn_openvz_ip_list.lng     |   7 +
 .../web/vm/lib/lang/cn_openvz_ostemplate.lng  |  10 +
 .../vm/lib/lang/cn_openvz_ostemplate_list.lng |   8 +
 .../web/vm/lib/lang/cn_openvz_template.lng    |  97 +++
 interface/web/vm/lib/lang/cn_openvz_vm.lng    |  45 ++
 .../web/vm/lib/lang/cn_openvz_vm_list.lng     |  10 +
 interface/web/vm/list/openvz_ip.list.php      |   8 +-
 .../web/vm/list/openvz_ostemplate.list.php    |   4 +-
 interface/web/vm/list/openvz_vm.list.php      |   4 +-
 .../API-docs/monitor_jobqueue_count.html      |  27 +
 .../examples/sites_web_domain_get.php         |   5 +
 server/conf/vhost.conf.master                 |   2 +-
 server/lib/classes/aps_installer.inc.php      |   2 +-
 server/lib/classes/backup.inc.php             |  11 +-
 .../classes/cron.d/200-ftplogfiles.inc.php    |  14 +-
 .../classes/cron.d/300-quota_notify.inc.php   |  75 +-
 server/lib/classes/db_mysql.inc.php           |   7 +-
 server/lib/classes/file.inc.php               |   3 +-
 server/lib/classes/letsencrypt.inc.php        |   5 +
 server/lib/classes/modules.inc.php            |   2 +-
 server/lib/classes/services.inc.php           |   2 +-
 server/lib/classes/system.inc.php             |  30 +
 .../plugins-available/apache2_plugin.inc.php  |  17 +-
 server/plugins-available/bind_plugin.inc.php  |   2 +-
 server/plugins-available/mail_plugin.inc.php  |   4 +-
 .../mail_plugin_dkim.inc.php                  |   2 +-
 .../mongo_clientdb_plugin.inc.php~            |  30 +-
 .../mysql_clientdb_plugin.inc.php             |  40 +-
 server/plugins-available/nginx_plugin.inc.php |  26 +-
 .../plugins-available/rspamd_plugin.inc.php   |   4 +-
 .../shelluser_base_plugin.inc.php             |  11 +-
 .../shelluser_jailkit_plugin.inc.php          |   8 +-
 server/server.sh                              |   4 +-
 353 files changed, 6600 insertions(+), 540 deletions(-)
 create mode 100644 interface/lib/lang/cn.lng
 create mode 100644 interface/web/admin/lib/lang/cn.lng
 create mode 100644 interface/web/admin/lib/lang/cn_directive_snippets.lng
 create mode 100644 interface/web/admin/lib/lang/cn_directive_snippets_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_firewall.lng
 create mode 100644 interface/web/admin/lib/lang/cn_firewall_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_groups.lng
 create mode 100644 interface/web/admin/lib/lang/cn_groups_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_iptables.lng
 create mode 100644 interface/web/admin/lib/lang/cn_iptables_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_add.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_complete.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_edit.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_export.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_import.lng
 create mode 100644 interface/web/admin/lib/lang/cn_language_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_package_install.lng
 create mode 100644 interface/web/admin/lib/lang/cn_remote_action.lng
 create mode 100644 interface/web/admin/lib/lang/cn_remote_user.lng
 create mode 100644 interface/web/admin/lib/lang/cn_remote_user_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_config.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_config_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_ip.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_ip_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_ip_map.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_ip_map_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_php.lng
 create mode 100644 interface/web/admin/lib/lang/cn_server_php_list.lng
 create mode 100644 interface/web/admin/lib/lang/cn_system_config.lng
 create mode 100644 interface/web/admin/lib/lang/cn_tpl_default_admin.lng
 create mode 100644 interface/web/admin/lib/lang/cn_users.lng
 create mode 100644 interface/web/admin/lib/lang/cn_users_list.lng
 create mode 100644 interface/web/client/lib/lang/cn.lng
 create mode 100644 interface/web/client/lib/lang/cn_client.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_circle.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_circle_list.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_del.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_message.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_message_template.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_message_template_list.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_template.lng
 create mode 100644 interface/web/client/lib/lang/cn_client_template_list.lng
 create mode 100644 interface/web/client/lib/lang/cn_clients_list.lng
 create mode 100644 interface/web/client/lib/lang/cn_domain.lng
 create mode 100644 interface/web/client/lib/lang/cn_domain_list.lng
 create mode 100644 interface/web/client/lib/lang/cn_reseller.lng
 create mode 100644 interface/web/client/lib/lang/cn_resellers_list.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_customer.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_databasequota.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_donate.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_invoice_client_settings.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_invoices.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_limits.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_mailquota.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_modules.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_products.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_quota.lng
 create mode 100644 interface/web/dashboard/lib/lang/cn_dashlet_shop.lng
 create mode 100644 interface/web/dns/lib/lang/cn.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_a.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_a_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_aaaa.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_alias.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_caa.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_cname.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_dkim.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_dmarc.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_dname.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_ds.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_hinfo.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_import.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_loc.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_mx.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_naptr.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_ns.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_ptr.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_rp.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_slave.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_slave_admin_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_slave_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_soa.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_soa_admin_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_soa_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_spf.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_srv.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_sshfp.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_template.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_template_list.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_tlsa.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_txt.lng
 create mode 100644 interface/web/dns/lib/lang/cn_dns_wizard.lng
 create mode 100644 interface/web/help/lib/lang/cn.lng
 create mode 100644 interface/web/help/lib/lang/cn_faq_form.lng
 create mode 100644 interface/web/help/lib/lang/cn_faq_manage_questions_list.lng
 create mode 100644 interface/web/help/lib/lang/cn_faq_sections_form.lng
 create mode 100644 interface/web/help/lib/lang/cn_help_faq_list.lng
 create mode 100644 interface/web/help/lib/lang/cn_help_faq_sections_list.lng
 create mode 100644 interface/web/help/lib/lang/cn_support_message.lng
 create mode 100644 interface/web/help/lib/lang/cn_support_message_list.lng
 create mode 100644 interface/web/login/lib/lang/cn.lng
 create mode 100644 interface/web/login/lib/lang/cn_login_as.lng
 create mode 100644 interface/web/mail/lib/lang/cn.lng
 create mode 100644 interface/web/mail/lib/lang/cn_backup_stats_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_alias.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_alias_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_aliasdomain.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_aliasdomain_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_backup_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_blacklist.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_blacklist_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_content_filter.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_content_filter_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_domain.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_domain_admin_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_domain_catchall.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_domain_catchall_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_domain_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_forward.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_forward_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_get.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_get_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_mailinglist.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_mailinglist_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_relay_domain.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_relay_domain_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_relay_recipient.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_relay_recipient_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_spamfilter.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_spamfilter_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_transport.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_transport_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_user.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_user_filter.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_user_filter_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_user_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_user_stats_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_whitelist.lng
 create mode 100644 interface/web/mail/lib/lang/cn_mail_whitelist_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_blacklist.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_blacklist_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_config.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_config_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_policy.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_policy_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_users.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_users_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_whitelist.lng
 create mode 100644 interface/web/mail/lib/lang/cn_spamfilter_whitelist_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_user_quota_stats_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_xmpp_domain.lng
 create mode 100644 interface/web/mail/lib/lang/cn_xmpp_domain_admin_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_xmpp_domain_list.lng
 create mode 100644 interface/web/mail/lib/lang/cn_xmpp_user.lng
 create mode 100644 interface/web/mail/lib/lang/cn_xmpp_user_list.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_index.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_autoresponder.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_cc.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_filter.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_filter_list.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_password.lng
 create mode 100644 interface/web/mailuser/lib/lang/cn_mail_user_spamfilter.lng
 create mode 100644 interface/web/monitor/lib/lang/cn.lng
 create mode 100644 interface/web/monitor/lib/lang/cn_datalog_list.lng
 create mode 100644 interface/web/monitor/lib/lang/cn_dataloghistory_list.lng
 create mode 100644 interface/web/monitor/lib/lang/cn_dataloghistory_undo.lng
 create mode 100644 interface/web/monitor/lib/lang/cn_dataloghistory_view.lng
 create mode 100644 interface/web/monitor/lib/lang/cn_syslog_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn.lng
 create mode 100644 interface/web/sites/lib/lang/cn_aps.lng
 create mode 100644 interface/web/sites/lib/lang/cn_aps_instances_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_aps_packages_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_aps_update_packagelist.lng
 create mode 100644 interface/web/sites/lib/lang/cn_backup_stats_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_cron.lng
 create mode 100644 interface/web/sites/lib/lang/cn_cron_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_admin_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_quota_stats_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_user.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_user_admin_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_database_user_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_ftp_sites_stats_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_ftp_user.lng
 create mode 100644 interface/web/sites/lib/lang/cn_ftp_user_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_shell_user.lng
 create mode 100644 interface/web/sites/lib/lang/cn_shell_user_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_user_quota_stats_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_aliasdomain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_aliasdomain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_backup_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_childdomain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_childdomain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_directive_snippets.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_domain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_domain_admin_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_domain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_folder.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_folder_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_folder_user.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_folder_user_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_sites_stats_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_subdomain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_subdomain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_vhost_domain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_vhost_domain_admin_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_vhost_domain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_vhost_subdomain.lng
 create mode 100644 interface/web/sites/lib/lang/cn_web_vhost_subdomain_list.lng
 create mode 100644 interface/web/sites/lib/lang/cn_webdav_user.lng
 create mode 100644 interface/web/sites/lib/lang/cn_webdav_user_list.lng
 create mode 100644 interface/web/strengthmeter/lib/lang/cn_strengthmeter.lng
 create mode 100644 interface/web/tools/lib/lang/cn.lng
 create mode 100644 interface/web/tools/lib/lang/cn_import_ispconfig.lng
 create mode 100644 interface/web/tools/lib/lang/cn_import_vpopmail.lng
 create mode 100644 interface/web/tools/lib/lang/cn_index.lng
 create mode 100644 interface/web/tools/lib/lang/cn_resync.lng
 create mode 100644 interface/web/tools/lib/lang/cn_tpl_default.lng
 create mode 100644 interface/web/tools/lib/lang/cn_usersettings.lng
 create mode 100644 interface/web/vm/lib/lang/cn.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_action.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_ip.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_ip_list.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_ostemplate.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_ostemplate_list.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_template.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_vm.lng
 create mode 100644 interface/web/vm/lib/lang/cn_openvz_vm_list.lng
 create mode 100644 remoting_client/API-docs/monitor_jobqueue_count.html

diff --git a/docs/autoinstall_samples/autoinstall.conf_sample.php b/docs/autoinstall_samples/autoinstall.conf_sample.php
index c8bf209f9f..c8c374e4f0 100644
--- a/docs/autoinstall_samples/autoinstall.conf_sample.php
+++ b/docs/autoinstall_samples/autoinstall.conf_sample.php
@@ -61,7 +61,7 @@ $autoupdate['ignore_hostname_dns'] = 'n';
 $autoupdate['ispconfig_postfix_ssl_symlink'] = 'y';
 $autoupdate['ispconfig_pureftpd_ssl_symlink'] = 'y';
 
-/* These are for service-detection (defaulting to old behaviour where alle changes were automatically accepted) */
+/* These are for service-detection (defaulting to old behaviour where all changes were automatically accepted) */
 $autoupdate['svc_detect_change_mail_server'] = 'yes'; // yes (default), no
 $autoupdate['svc_detect_change_web_server'] = 'yes'; // yes (default), no
 $autoupdate['svc_detect_change_dns_server'] = 'yes'; // yes (default), no
diff --git a/docs/autoinstall_samples/autoinstall.ini.sample b/docs/autoinstall_samples/autoinstall.ini.sample
index bf47122074..9251d1eef0 100644
--- a/docs/autoinstall_samples/autoinstall.ini.sample
+++ b/docs/autoinstall_samples/autoinstall.ini.sample
@@ -60,7 +60,7 @@ ignore_hostname_dns=n
 ispconfig_postfix_ssl_symlink=y
 ispconfig_pureftpd_ssl_symlink=y
 
-; These are for service-detection (defaulting to old behaviour where alle changes were automatically accepted)
+; These are for service-detection (defaulting to old behaviour where all changes were automatically accepted)
 svc_detect_change_mail_server=yes
 svc_detect_change_web_server=yes
 svc_detect_change_dns_server=yes
diff --git a/install/dist/lib/gentoo.lib.php b/install/dist/lib/gentoo.lib.php
index c98788e33c..8c942f2491 100644
--- a/install/dist/lib/gentoo.lib.php
+++ b/install/dist/lib/gentoo.lib.php
@@ -47,8 +47,7 @@ class installer extends installer_base
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 	}
 
-	public function configure_postfix($options = '')
-	{
+	public function configure_postfix($options = '') {
 		global $conf,$autoinstall;
 
 		$cf = $conf['postfix'];
@@ -57,6 +56,11 @@ class installer extends installer_base
 		if(!is_dir($config_dir)){
 			$this->error("The postfix configuration directory '$config_dir' does not exist.");
 		}
+    
+    //* Get postfix version
+		exec('postconf -d mail_version 2>&1', $out);
+		$postfix_version = preg_replace('/.*=\s*/', '', $out[0]);
+		unset($out);
 
 		//* Install virtual mappings
 		foreach (glob('tpl/mysql-virtual_*.master') as $filename) {
@@ -65,30 +69,48 @@ class installer extends installer_base
 
 		//* mysql-verify_recipients.cf
 		$this->process_postfix_config('mysql-verify_recipients.cf');
+    
+    // test if lmtp if available
+		$configure_lmtp = $this->get_postfix_service('lmtp','unix');
 
+		//* postfix-dkim
+		$filename='tag_as_originating.re';
+		$full_file_name=$config_dir.'/'.$filename;
+		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		if($configure_lmtp) {
+			$content = preg_replace('/amavis:/', 'lmtp:', $content);
+		}
+		wf($full_file_name, $content);
+    
+    $filename='tag_as_foreign.re';
+		$full_file_name=$config_dir.'/'.$filename;
+		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
+		if($configure_lmtp) {
+			$content = preg_replace('/amavis:/', 'lmtp:', $content);
+		}
+		wf($full_file_name, $content);    
+    
 		//* Changing mode and group of the new created config files.
-		caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
+		/*caselog('chmod o= '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
 			__FILE__, __LINE__, 'chmod on mysql-virtual_*.cf*', 'chmod on mysql-virtual_*.cf* failed');
 		caselog('chgrp '.$cf['group'].' '.$config_dir.'/mysql-virtual_*.cf* &> /dev/null',
-			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');
+			__FILE__, __LINE__, 'chgrp on mysql-virtual_*.cf*', 'chgrp on mysql-virtual_*.cf* failed');*/
 
 		//* Creating virtual mail user and group
 		$command = 'groupadd -g '.$cf['vmail_groupid'].' '.$cf['vmail_groupname'];
-		if (!is_group($cf['vmail_groupname'])) {
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
+		if(!is_group($cf['vmail_groupname'])) caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		$command = 'useradd -g '.$cf['vmail_groupname'].' -u '.$cf['vmail_userid'].' '.$cf['vmail_username'].' -d '.$cf['vmail_mailbox_base'].' -m';
-		if (!is_user($cf['vmail_username'])) {
-			caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
+		if(!is_user($cf['vmail_username'])) caselog("$command &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* These postconf commands will be executed on installation and update
 		$server_ini_rec = $this->db->queryOneRecord("SELECT config FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].'.server', $conf['server_id']);
 		$server_ini_array = ini_to_array(stripslashes($server_ini_rec['config']));
 		unset($server_ini_rec);
 
-		//* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removeal after an update
+    //* If there are RBL's defined, format the list and add them to smtp_recipient_restrictions to prevent removal after an update
 		$rbl_list = '';
 		if (@isset($server_ini_array['mail']['realtime_blackhole_list']) && $server_ini_array['mail']['realtime_blackhole_list'] != '') {
 			$rbl_hosts = explode(",", str_replace(" ", "", $server_ini_array['mail']['realtime_blackhole_list']));
@@ -107,7 +129,7 @@ class installer extends installer_base
 		$reject_sender_login_mismatch = '';
 		$reject_authenticated_sender_login_mismatch = '';
 		if(isset($server_ini_array['mail']['reject_sender_login_mismatch']) && ($server_ini_array['mail']['reject_sender_login_mismatch'] == 'y')) {
-			$reject_sender_login_mismatch = ', reject_sender_login_mismatch';
+      $reject_sender_login_mismatch = ',reject_sender_login_mismatch,';
 			$reject_authenticated_sender_login_mismatch = 'reject_authenticated_sender_login_mismatch, ';
 		}
 
@@ -145,7 +167,42 @@ class installer extends installer_base
 		$postconf_tpl = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_postfix.conf.master', 'tpl/gentoo_postfix.conf.master');
 		$postconf_tpl = strtr($postconf_tpl, $postconf_placeholders);
 		$postconf_commands = array_filter(explode("\n", $postconf_tpl)); // read and remove empty lines
-
+        
+    //* Merge version-specific postfix config
+		if(version_compare($postfix_version , '2.5', '>=')) {
+		    $configfile = 'postfix_2-5.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '2.10', '>=')) {
+		    $configfile = 'postfix_2-10.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '3.0', '>=')) {
+		    $configfile = 'postfix_3-0.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		if(version_compare($postfix_version , '3.3', '>=')) {
+		    $configfile = 'postfix_3-3.conf';
+		    $content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		    $content = strtr($content, $postconf_placeholders);
+		    $postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+		$configfile = 'postfix_custom.conf';
+		if(file_exists($conf['ispconfig_install_dir'].'/server/conf-custom/install/' . $configfile . '.master')) {
+			$content = file_get_contents($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master');
+			$content = strtr($content, $postconf_placeholders);
+			$postconf_commands = array_merge($postconf_commands, array_filter(explode("\n", $content)));
+		}
+
+		// Remove comment lines, these would give fatal errors when passed to postconf.
+		$postconf_commands = array_filter($postconf_commands, function($line) { return preg_match('/^[^#]/', $line); });
+    
 		//* These postconf commands will be executed on installation only
 		if($this->is_update == false) {
 			$postconf_commands = array_merge($postconf_commands, array(
@@ -161,6 +218,15 @@ class installer extends installer_base
 		touch($config_dir.'/nested_header_checks');
 		touch($config_dir.'/body_checks');
 		touch($config_dir.'/sasl_passwd');
+    
+    //* Create the mailman files
+		if(!is_dir('/var/lib/mailman/data')) exec('mkdir -p /var/lib/mailman/data');
+		if(!is_file('/var/lib/mailman/data/aliases')) touch('/var/lib/mailman/data/aliases');
+		exec('postalias /var/lib/mailman/data/aliases');
+		if(!is_file('/var/lib/mailman/data/virtual-mailman')) touch('/var/lib/mailman/data/virtual-mailman');
+		exec('postmap /var/lib/mailman/data/virtual-mailman');
+		if(!is_file('/var/lib/mailman/data/transport-mailman')) touch('/var/lib/mailman/data/transport-mailman');
+		exec('/usr/sbin/postmap /var/lib/mailman/data/transport-mailman');
 
 		//* Create auxillary postfix conf files
 		$configfile = 'helo_access';
@@ -189,13 +255,13 @@ class installer extends installer_base
 		//* Executing the postconf commands
 		foreach($postconf_commands as $cmd) {
 			$command = "postconf -e '$cmd'";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
+      swriteln($command);
+      caselog($command." &> /dev/null", __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
 		}
-
-		//* Create the SSL certificate
-		if (!stristr($options, 'dont-create-certs'))
-		{
-			if(AUTOINSTALL){
+		
+		if (!stristr($options, 'dont-create-certs')){
+			//* Create the SSL certificate
+      if(AUTOINSTALL){
 				$command = 'cd '.$config_dir.'; '
 					."openssl req -new -subj '/C=".escapeshellcmd($autoinstall['ssl_cert_country'])."/ST=".escapeshellcmd($autoinstall['ssl_cert_state'])."/L=".escapeshellcmd($autoinstall['ssl_cert_locality'])."/O=".escapeshellcmd($autoinstall['ssl_cert_organisation'])."/OU=".escapeshellcmd($autoinstall['ssl_cert_organisation_unit'])."/CN=".escapeshellcmd($autoinstall['ssl_cert_common_name'])."' -outform PEM -out smtpd.cert -newkey rsa:4096 -nodes -keyout smtpd.key -keyform PEM -days 3650 -x509";
 			} else {
@@ -208,58 +274,59 @@ class installer extends installer_base
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
 		}
 
-		//* We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
-		$command = 'chmod 755  /var/lib/courier/authdaemon/';
-		if (is_dir('/var/lib/courier/authdaemon')) {
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
-		}
+		//** We have to change the permissions of the courier authdaemon directory to make it accessible for maildrop.
+		$command = 'chmod 755  /var/run/courier/authdaemon/';
+		if(is_file('/var/run/courier/authdaemon/')) caselog($command.' &> /dev/null', __FILE__, __LINE__, 'EXECUTED: '.$command, 'Failed to execute the command '.$command);
 
-		//* Changing maildrop lines in posfix master.cf
+		//* Check maildrop service in posfix master.cf
+		$quoted_regex = '^maildrop   unix.*pipe flags=DRhu user=vmail '.preg_quote('argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}', '/');
 		$configfile = $config_dir.'/master.cf';
-		$content = rf($configfile);
-
-		$content = preg_replace('/^#?maildrop/m', 'maildrop', $content);
-		$content = preg_replace('/^#?(\s+)flags=DRhu user=vmail argv=\/usr\/bin\/maildrop -d/m',
-			'$1flags=DRhu user=vmail argv=/usr/bin/maildrop -d vmail \${extension} \${recipient} \${user} \${nexthop} \${sender}',
-			$content);
-
-		$this->write_config_file($configfile, $content);
-
-		//* Writing the Maildrop mailfilter file
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/mailfilter.master', 'tpl/mailfilter.master');
+		if($this->get_postfix_service('maildrop', 'unix')) {
+			exec ("postconf -M maildrop.unix 2> /dev/null", $out, $ret);
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $out[0]) && $out[0] !='')?false:true;
+		} else {
+			$change_maildrop_flags = @(preg_match("/$quoted_regex/", $configfile))?false:true;
+		}
+		if ($change_maildrop_flags) {
+			//* Change maildrop service in posfix master.cf
+			if(is_file($config_dir.'/master.cf')) {
+				copy($config_dir.'/master.cf', $config_dir.'/master.cf~');
+			}
+			if(is_file($config_dir.'/master.cf~')) {
+				chmod($config_dir.'/master.cf~', 0400);
+ 			}
+			$configfile = $config_dir.'/master.cf';
+			$content = rf($configfile);
+			$content =	str_replace('flags=DRhu user=vmail argv=/usr/bin/maildrop -d ${recipient}',
+						'flags=DRhu user='.$cf['vmail_username'].' argv=/usr/bin/maildrop -d '.$cf['vmail_username'].' ${extension} ${recipient} ${user} ${nexthop} ${sender}',
+						$content);
+			wf($configfile, $content);
+		}
+    
+    //* Writing the Maildrop mailfilter file
+		$configfile = 'mailfilter';
+		if(is_file($cf['vmail_mailbox_base'].'/.'.$configfile)) {
+			copy($cf['vmail_mailbox_base'].'/.'.$configfile, $cf['vmail_mailbox_base'].'/.'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
 		$content = str_replace('{dist_postfix_vmail_mailbox_base}', $cf['vmail_mailbox_base'], $content);
-
-		$this->write_config_file($cf['vmail_mailbox_base'].'/.mailfilter', $content);
+		wf($cf['vmail_mailbox_base'].'/.'.$configfile, $content);     
 
 		//* Create the directory for the custom mailfilters
-		if (!is_dir($cf['vmail_mailbox_base'].'/mailfilters'))
-		{
+		if(!is_dir($cf['vmail_mailbox_base'].'/mailfilters')) {
 			$command = 'mkdir '.$cf['vmail_mailbox_base'].'/mailfilters';
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
-
-		//* postfix-dkim
-		$filename='tag_as_originating.re';
-		$full_file_name=$config_dir.'/'.$filename;
-		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
-		wf($full_file_name, $content);
-
-		$filename='tag_as_foreign.re';
-		$full_file_name=$config_dir.'/'.$filename;
-		if(is_file($full_file_name)) copy($full_file_name, $full_file_name.'~');
-		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/postfix-'.$filename.'.master', 'tpl/postfix-'.$filename.'.master');
-		wf($full_file_name, $content);
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+		}	
 
 		//* Chmod and chown the .mailfilter file
-		$command = 'chown -R '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		$command = 'chown '.$cf['vmail_username'].':'.$cf['vmail_groupname'].' '.$cf['vmail_mailbox_base'].'/.mailfilter';
 		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
-		$command = 'chmod -R 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
+		$command = 'chmod 600 '.$cf['vmail_mailbox_base'].'/.mailfilter';
 		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 	}
-
+  
 	public function configure_saslauthd()
 	{
 		global $conf;
@@ -297,17 +364,21 @@ class installer extends installer_base
 		caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 	}
 
-	public function configure_dovecot()
-	{
+	public function configure_dovecot() {
 		global $conf;
 
 		$virtual_transport = 'dovecot';
 
 		$configure_lmtp = false;
 
+		// use lmtp if installed
+		if($configure_lmtp = (is_file('/usr/lib/dovecot/lmtp') || is_file('/usr/libexec/dovecot/lmtp'))) {
+			$virtual_transport = 'lmtp:unix:private/dovecot-lmtp';
+		}
+
 		// check if virtual_transport must be changed
 		if ($this->is_update) {
-			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"].".server", $conf['server_id']);
+			$tmp = $this->db->queryOneRecord("SELECT * FROM ?? WHERE server_id = ?", $conf["mysql"]["database"] . ".server", $conf['server_id']);
 			$ini_array = ini_to_array(stripslashes($tmp['config']));
 			// ini_array needs not to be checked, because already done in update.php -> updateDbAndIni()
 
@@ -318,10 +389,13 @@ class installer extends installer_base
 		}
 
 		$config_dir = $conf['postfix']['config_dir'];
+		$quoted_config_dir = preg_quote($config_dir, '|');
+		$postfix_version = `postconf -d mail_version 2>/dev/null`;
+		$postfix_version = preg_replace( '/mail_version\s*=\s*(.*)\s*/', '$1', $postfix_version );
 
 		//* Configure master.cf and add a line for deliver
 		if(!$this->get_postfix_service('dovecot', 'unix')) {
-			//* backup
+ 			//* backup
 			if(is_file($config_dir.'/master.cf')){
 				copy($config_dir.'/master.cf', $config_dir.'/master.cf~2');
 			}
@@ -329,14 +403,15 @@ class installer extends installer_base
 				chmod($config_dir.'/master.cf~2', 0400);
 			}
 			//* Configure master.cf and add a line for deliver
-			$content = rf($conf["postfix"]["config_dir"].'/master.cf');
-			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DROhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
+			$content = rf($config_dir.'/master.cf');
+			$deliver_content = 'dovecot   unix  -       n       n       -       -       pipe'."\n".'  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}'."\n";
 			af($config_dir.'/master.cf', $deliver_content);
 			unset($content);
 			unset($deliver_content);
 		}
 
 		//* Reconfigure postfix to use dovecot authentication
+		// Adding the amavisd commands to the postfix configuration
 		$postconf_commands = array (
 			'dovecot_destination_recipient_limit = 1',
 			'virtual_transport = '.$virtual_transport,
@@ -344,25 +419,44 @@ class installer extends installer_base
 			'smtpd_sasl_path = private/auth'
 		);
 
-		//* Make a backup copy of the main.cf file
-		copy($conf['postfix']['config_dir'].'/main.cf', $conf['postfix']['config_dir'].'/main.cf~3');
+		// Make a backup copy of the main.cf file
+		copy($config_dir.'/main.cf', $config_dir.'/main.cf~3');
 
-		//* Executing the postconf commands
-		foreach($postconf_commands as $cmd)
-		{
+		$options = preg_split("/,\s*/", exec("postconf -h smtpd_recipient_restrictions"));
+		$new_options = array();
+		foreach ($options as $value) {
+			$value = trim($value);
+			if ($value == '') continue;
+			if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+				continue;
+			}
+			$new_options[] = $value;
+		}
+		if ($configure_lmtp && $conf['mail']['content_filter'] === 'amavisd') {
+			for ($i = 0; isset($new_options[$i]); $i++) {
+				if ($new_options[$i] == 'reject_unlisted_recipient') {
+					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
+					break;
+				}
+			}
+			# postfix < 3.3 needs this when using reject_unverified_recipient:
+			if(version_compare($postfix_version, 3.3, '<')) {
+				$postconf_commands[] = "enable_original_recipient = yes";
+			}
+		}
+		$postconf_commands[] = "smtpd_recipient_restrictions = ".implode(", ", $new_options);
+
+		// Executing the postconf commands
+		foreach($postconf_commands as $cmd) {
 			$command = "postconf -e '$cmd'";
-			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+			caselog($command." &> /dev/null", __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		}
 
+		//* backup dovecot.conf
 		$config_dir = $conf['dovecot']['config_dir'];
-		//* copy dovecot.conf
-		$configfile = $config_dir.'/dovecot.conf';
-		$content = $this->get_template_file('dovecot.conf', true);
-		$this->write_config_file($configfile, $content);
-
-		//* dovecot-lmtpd
-		if($configure_lmtp) {
-			replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', 'protocols = imap pop3 lmtp', 1, 0);
+		$configfile = 'dovecot.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
 		}
 
 		//* Get the dovecot version
@@ -370,15 +464,112 @@ class installer extends installer_base
 		$dovecot_version = $tmp[0];
 		unset($tmp);
 
+		//* Copy dovecot configuration file
+		if(version_compare($dovecot_version,1, '<=')) {	//* Dovecot 1.x
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_dovecot.conf.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_dovecot.conf.master', $config_dir.'/'.$configfile);
+			} else {
+				copy('dist/tpl/gentoo/dovecot.conf.master', $config_dir.'/'.$configfile);
+			}
+		} else {	//* Dovecot 2.x
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_dovecot2.conf.master')) {
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/gentoo_dovecot2.conf.master', $config_dir.'/'.$configfile);
+			} else {
+				copy('dist/tpl/gentoo/dovecot2.conf.master', $config_dir.'/'.$configfile);
+			}
+			// Copy custom config file
+			if(is_file($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master')) {
+				if(!@is_dir($config_dir . '/conf.d')) {
+					mkdir($config_dir . '/conf.d');
+				}
+				copy($conf['ispconfig_install_dir'].'/server/conf-custom/install/dovecot_custom.conf.master', $config_dir.'/conf.d/99-ispconfig-custom-config.conf');
+			}
+			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = postmaster@example.com', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
+			replaceLine($config_dir.'/'.$configfile, 'postmaster_address = webmaster@localhost', 'postmaster_address = postmaster@'.$conf['hostname'], 1, 0);
+			if(version_compare($dovecot_version, 2.1, '<')) {
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+			}
+			if(version_compare($dovecot_version,2.2) >= 0) {
+				// Dovecot > 2.2 does not recognize !SSLv2 anymore on Debian 9
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('!SSLv2','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+			}
+			if(version_compare($dovecot_version,2.3) >= 0) {
+				// Remove deprecated setting(s)
+				removeLine($config_dir.'/'.$configfile, 'ssl_protocols =');
+
+				// Check if we have a dhparams file and if not, create it
+				if(!file_exists('/etc/dovecot/dh.pem')) {
+					swriteln('Creating new DHParams file, this takes several minutes. Do not interrupt the script.');
+					if(file_exists('/var/lib/dovecot/ssl-parameters.dat')) {
+						// convert existing ssl parameters file
+						$command = 'dd if=/var/lib/dovecot/ssl-parameters.dat bs=1 skip=88 | openssl dhparam -inform der > /etc/dovecot/dh.pem';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					} else {
+						/*
+						   Create a new dhparams file. We use 2048 bit only as it simply takes too long
+						   on smaller systems to generate a 4096 bit dh file (> 30 minutes). If you need
+						   a 4096 bit file, create it manually before you install ISPConfig
+						*/
+						$command = 'openssl dhparam -out /etc/dovecot/dh.pem 2048';
+						caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+					}
+				}
+				//remove #2.3+ comment
+				$content = file_get_contents($config_dir.'/'.$configfile);
+				$content = str_replace('#2.3+ ','',$content);
+				file_put_contents($config_dir.'/'.$configfile,$content);
+				unset($content);
+
+			} else {
+				// remove settings which are not supported in Dovecot < 2.3
+				removeLine($config_dir.'/'.$configfile, 'ssl_min_protocol =');
+				removeLine($config_dir.'/'.$configfile, 'ssl_dh =');
+			}
+		}
+
+		$dovecot_protocols = 'imap pop3';
+
+		//* dovecot-lmtpd
+		if($configure_lmtp) {
+			$dovecot_protocols .= ' lmtp';
+		}
+
+		//* dovecot-managesieved
+		if(is_file('/usr/lib/dovecot/managesieve') || is_file('/usr/libexec/dovecot/managesieve')) {
+			$dovecot_protocols .= ' sieve';
+		}
+
+		replaceLine($config_dir.'/'.$configfile, 'protocols = imap pop3', "protocols = $dovecot_protocols", 1, 0);
+
 		//* dovecot-sql.conf
-		$configfile = $config_dir.'/dovecot-sql.conf';
-		$content = $this->get_template_file('debian_dovecot-sql.conf', true, true);
+		$configfile = 'dovecot-sql.conf';
+		if(is_file($config_dir.'/'.$configfile)) {
+			copy($config_dir.'/'.$configfile, $config_dir.'/'.$configfile.'~');
+		}
+		if(is_file($config_dir.'/'.$configfile.'~')) chmod($config_dir.'/'.$configfile.'~', 0400);
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/debian_dovecot-sql.conf.master', 'tpl/debian_dovecot-sql.conf.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
 		# enable iterate_query for dovecot2
 		if(version_compare($dovecot_version,2, '>=')) {
 			$content = str_replace('# iterate_query', 'iterate_query', $content);
 		}
-		$content = str_replace('{server_id}', $conf['server_id'], $content);
-		$this->write_config_file($configfile, $content);
+		wf($config_dir.'/'.$configfile, $content);
+
+		chmod($config_dir.'/'.$configfile, 0600);
+		chown($config_dir.'/'.$configfile, 'root');
+		chgrp($config_dir.'/'.$configfile, 'root');
+
+		// Dovecot shall ignore mounts in website directory
+		if(is_installed('doveadm')) exec("doveadm mount add '/var/www/*' ignore > /dev/null 2> /dev/null");
+
 	}
 
 	public function configure_spamassassin()
@@ -515,6 +706,36 @@ class installer extends installer_base
 		 $content = preg_replace('/MISC_OTHER="[^"]+"/', 'MISC_OTHER="-b -A -E -Z -D -H -O clf:'.$logdir.'/transfer.log'.$enable_tls.'"', $content);
 
 		$this->write_config_file($conf['pureftpd']['config_file'], $content);
+    
+    //* Since version 1.0.50: Configuration through /etc/conf.d/pure-ftpd is now deprecated!    
+    exec("/usr/sbin/pure-ftpd --help | head -1",$out);
+    if(preg_match("#v([0-9\.]+)\s#",$out[0],$matches)){
+      $pureftpd_version = $matches[1];
+      
+      if(version_compare($pureftpd_version, '1.0.50', '>=')) { 
+        $configfile = $conf['pureftpd']['main_config_file'];
+    		if(is_file($configfile)) {
+    			copy($configfile, $configfile.'~');
+    		}
+    		
+        $content = rf($configfile);
+        $content = preg_replace('/BrokenClientsCompatibility\s+(yes|no)/', 'BrokenClientsCompatibility   yes', $content);
+        $content = preg_replace('/ChrootEveryone\s+(yes|no)/', 'ChrootEveryone               yes', $content);
+        $content = preg_replace('/NoAnonymous\s+(yes|no)/', 'NoAnonymous                  yes', $content);
+        $content = preg_replace('/#? AltLog\s+clf.*\s/', 'AltLog                       clf:/var/log/pureftpd.log', $content);
+        $content = preg_replace('/CustomerProof\s+(yes|no)/', 'CustomerProof                yes', $content);
+        $content = preg_replace('/DisplayDotFiles\s+(yes|no)/', 'DisplayDotFiles              yes', $content);
+        $content = preg_replace('/DontResolve\s+(yes|no)/', 'DontResolve                  yes', $content);
+        $content = preg_replace('/#? MySQLConfigFile\s+\/.*\s/', 'MySQLConfigFile              ' . $conf['pureftpd']['mysql_config_file'], $content);
+        
+        if(file_exists('/etc/ssl/private/pure-ftpd.pem')) {
+          $content = preg_replace('/(#?) TLS\s+(0|1)/', 'TLS                          1', $content);
+        }
+        
+        wf($configfile, $content);
+      }
+    }
+    
 	}
 
 	public function configure_powerdns()
@@ -845,39 +1066,46 @@ class installer extends installer_base
 
 		}
 	}
+  
+  public function get_host_ips() {
+		$out = array();
+		exec("ip addr show | awk '/global/ { print $2 }' | cut -d '/' -f 1", $ret, $val);
+		if($val == 0) {
+			if(is_array($ret) && !empty($ret)){				
+				foreach($ret as $ip) {
+					$ip = trim($ip);
+          $out[] = $ip;
+				}
+			}
+		}
 
-	public function install_ispconfig()
-	{
+		return $out;
+	}
+  
+	public function install_ispconfig() {
 		global $conf;
 
 		$install_dir = $conf['ispconfig_install_dir'];
 
 		//* Create the ISPConfig installation directory
-		if(!is_dir($install_dir))
-		{
+		if(!@is_dir($install_dir)) {
 			$command = "mkdir $install_dir";
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 		}
 
 		//* Create a ISPConfig user and group
-		if (!is_group('ispconfig'))
-		{
-			$command = 'groupadd ispconfig';
-			caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
+		$command = 'groupadd ispconfig';
+		if(!is_group('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
-		if (!is_user('ispconfig'))
-		{
-			$command = "useradd -g ispconfig -d $install_dir ispconfig";
-			caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
-		}
+		$command = 'useradd -g ispconfig -d '.$install_dir.' ispconfig';
+		if(!is_user('ispconfig')) caselog($command.' &> /dev/null 2> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* copy the ISPConfig interface part
-		$command = "cp -rf ../interface $install_dir";
+		$command = 'cp -rf ../interface '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* copy the ISPConfig server part
-		$command = "cp -rf ../server $install_dir";
+		$command = 'cp -rf ../server '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* Make a backup of the security settings
@@ -887,28 +1115,29 @@ class installer extends installer_base
 		$command = 'cp -rf ../security '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
-		//* Apply changed security_settings.ini values to new security_settings.ini file
-		if(is_file('/usr/local/ispconfig/security/security_settings.ini~')) {
-			$security_settings_old = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini~'));
-			$security_settings_new = ini_to_array(file_get_contents('/usr/local/ispconfig/security/security_settings.ini'));
-			if(is_array($security_settings_new) && is_array($security_settings_old)) {
-				foreach($security_settings_new as $section => $sval) {
-					if(is_array($sval)) {
-						foreach($sval as $key => $val) {
-							if(isset($security_settings_old[$section]) && isset($security_settings_old[$section][$key])) {
-								$security_settings_new[$section][$key] = $security_settings_old[$section][$key];
-							}
-						}
-					}
-				}
-				file_put_contents('/usr/local/ispconfig/security/security_settings.ini',array_to_ini($security_settings_new));
-			}
+		$configfile = 'security_settings.ini';
+		if(is_file($install_dir.'/security/'.$configfile)) {
+			copy($install_dir.'/security/'.$configfile, $install_dir.'/security/'.$configfile.'~');
 		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		wf($install_dir.'/security/'.$configfile, $content);
 
+		//* Create a symlink, so ISPConfig is accessible via web
+		// Replaced by a separate vhost definition for port 8080
+		// $command = "ln -s $install_dir/interface/web/ /var/www/ispconfig";
+		// caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
 		//* Create the config file for ISPConfig interface
 		$configfile = 'config.inc.php';
-		$content = $this->get_template_file($configfile, true, true); //* get contents & insert db cred
+		if(is_file($install_dir.'/interface/lib/'.$configfile)) {
+			copy($install_dir.'/interface/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
 
 		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
 		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
@@ -923,10 +1152,34 @@ class installer extends installer_base
 		$content = str_replace('{theme}', $conf['theme'], $content);
 		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
 
-		$this->write_config_file("$install_dir/interface/lib/$configfile", $content);
+		wf($install_dir.'/interface/lib/'.$configfile, $content);
 
 		//* Create the config file for ISPConfig server
-		$this->write_config_file("$install_dir/server/lib/$configfile", $content);
+		$configfile = 'config.inc.php';
+		if(is_file($install_dir.'/server/lib/'.$configfile)) {
+			copy($install_dir.'/server/lib/'.$configfile, $install_dir.'/interface/lib/'.$configfile.'~');
+		}
+		$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/'.$configfile.'.master', 'tpl/'.$configfile.'.master');
+		$content = str_replace('{mysql_server_ispconfig_user}', $conf['mysql']['ispconfig_user'], $content);
+		$content = str_replace('{mysql_server_ispconfig_password}', $conf['mysql']['ispconfig_password'], $content);
+		$content = str_replace('{mysql_server_database}', $conf['mysql']['database'], $content);
+		$content = str_replace('{mysql_server_host}', $conf['mysql']['host'], $content);
+		$content = str_replace('{mysql_server_port}', $conf['mysql']['port'], $content);
+
+		$content = str_replace('{mysql_master_server_ispconfig_user}', $conf['mysql']['master_ispconfig_user'], $content);
+		$content = str_replace('{mysql_master_server_ispconfig_password}', $conf['mysql']['master_ispconfig_password'], $content);
+		$content = str_replace('{mysql_master_server_database}', $conf['mysql']['master_database'], $content);
+		$content = str_replace('{mysql_master_server_host}', $conf['mysql']['master_host'], $content);
+		$content = str_replace('{mysql_master_server_port}', $conf['mysql']['master_port'], $content);
+
+		$content = str_replace('{server_id}', $conf['server_id'], $content);
+		$content = str_replace('{ispconfig_log_priority}', $conf['ispconfig_log_priority'], $content);
+		$content = str_replace('{language}', $conf['language'], $content);
+		$content = str_replace('{timezone}', $conf['timezone'], $content);
+		$content = str_replace('{theme}', $conf['theme'], $content);
+		$content = str_replace('{language_file_import_enabled}', ($conf['language_file_import_enabled'] == true)?'true':'false', $content);
+
+		wf($install_dir.'/server/lib/'.$configfile, $content);
 
 		//* Create the config file for remote-actions (but only, if it does not exist, because
 		//  the value is a autoinc-value and so changed by the remoteaction_core_module
@@ -935,7 +1188,7 @@ class installer extends installer_base
 			wf($install_dir.'/server/lib/remote_action.inc.php', $content);
 		}
 
-		// Enable the server modules and plugins.
+		//* Enable the server modules and plugins.
 		// TODO: Implement a selector which modules and plugins shall be enabled.
 		$dir = $install_dir.'/server/mods-available/';
 		if (is_dir($dir)) {
@@ -977,10 +1230,12 @@ class installer extends installer_base
 						if(method_exists($tmp, 'onInstall') && $tmp->onInstall()) {
 							if(!@is_link($install_dir.'/server/plugins-enabled/'.$file)) {
 								@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-enabled/'.$file);
+								//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-enabled/'.$file);
 							}
 							if (strpos($file, '_core_plugin') !== false) {
 								if(!@is_link($install_dir.'/server/plugins-core/'.$file)) {
 									@symlink($install_dir.'/server/plugins-available/'.$file, $install_dir.'/server/plugins-core/'.$file);
+									//@symlink($install_dir.'/server/plugins-available/'.$file, '../plugins-core/'.$file);
 								}
 							}
 						}
@@ -991,21 +1246,25 @@ class installer extends installer_base
 			}
 		}
 
-		//* Update the server config
+		// Update the server config
 		$mail_server_enabled = ($conf['services']['mail'])?1:0;
 		$web_server_enabled = ($conf['services']['web'])?1:0;
 		$dns_server_enabled = ($conf['services']['dns'])?1:0;
 		$file_server_enabled = ($conf['services']['file'])?1:0;
 		$db_server_enabled = ($conf['services']['db'])?1:0;
-		$vserver_server_enabled = ($conf['services']['vserver'])?1:0;
+		$vserver_server_enabled = ($conf['openvz']['installed'])?1:0;
+		$proxy_server_enabled = ($conf['services']['proxy'])?1:0;
+		$firewall_server_enabled = ($conf['services']['firewall'])?1:0;
+		$xmpp_server_enabled = ($conf['services']['xmpp'])?1:0;
 
-		$sql = "UPDATE `server` SET mail_server = ?, web_server = ?, dns_server = ?, file_server = ?, db_server = ?, vserver_server = ? WHERE server_id = ?";
+		$sql = "UPDATE `server` SET mail_server = '$mail_server_enabled', web_server = '$web_server_enabled', dns_server = '$dns_server_enabled', file_server = '$file_server_enabled', db_server = '$db_server_enabled', vserver_server = '$vserver_server_enabled', proxy_server = '$proxy_server_enabled', firewall_server = '$firewall_server_enabled', xmpp_server = '$xmpp_server_enabled' WHERE server_id = ?";
 
-		$this->db->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
+		$this->db->query($sql, $conf['server_id']);
 		if($conf['mysql']['master_slave_setup'] == 'y') {
-			$this->dbmaster->query($sql, $mail_server_enabled, $web_server_enabled, $dns_server_enabled, $file_server_enabled, $db_server_enabled, $vserver_server_enabled, $conf['server_id']);
+			$this->dbmaster->query($sql, $conf['server_id']);
 		}
 
+
 		// chown install dir to root and chmod 755
 		$command = 'chown root:root '.$install_dir;
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1020,6 +1279,10 @@ class installer extends installer_base
 		$command = 'chown -R ispconfig:ispconfig '.$install_dir.'/interface';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 
+		//* Chmod the files and directories in the acme dir
+		$command = 'chmod -R 755 '.$install_dir.'/interface/acme';
+		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
+
 		//* chown the server files to the root user and group
 		$command = 'chown -R root:root '.$install_dir.'/server';
 		caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
@@ -1046,9 +1309,7 @@ class installer extends installer_base
 		exec("chmod -R 770 $install_dir/interface/lib/lang");
 
 		//* Make the temp directory for language file exports writable
-		if(is_dir($install_dir.'/interface/web/temp')) {
-			exec("chmod -R 770 $install_dir/interface/web/temp");
-		}
+		if(is_dir($install_dir.'/interface/web/temp')) exec("chmod -R 770 $install_dir/interface/web/temp");
 
 		//* Make all interface language file directories group writable
 		$handle = @opendir($install_dir.'/interface/web');
@@ -1101,18 +1362,18 @@ class installer extends installer_base
 		// and must be fixed as this will allow the apache user to read the ispconfig files.
 		// Later this must run as own apache server or via suexec!
 		if($conf['apache']['installed'] == true){
-			$command = 'usermod -a -G ispconfig '.$conf['apache']['user'];
+			$command = 'adduser '.$conf['apache']['user'].' ispconfig';
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 			if(is_group('ispapps')){
-				$command = 'usermod -a -G ispapps '.$conf['apache']['user'];
+				$command = 'adduser '.$conf['apache']['user'].' ispapps';
 				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 			}
 		}
 		if($conf['nginx']['installed'] == true){
-			$command = 'usermod -a -G ispconfig '.$conf['nginx']['user'];
+			$command = 'adduser '.$conf['nginx']['user'].' ispconfig';
 			caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 			if(is_group('ispapps')){
-				$command = 'usermod -a -G ispapps '.$conf['nginx']['user'];
+				$command = 'adduser '.$conf['nginx']['user'].' ispapps';
 				caselog($command.' &> /dev/null', __FILE__, __LINE__, "EXECUTED: $command", "Failed to execute the command $command");
 			}
 		}
@@ -1128,43 +1389,62 @@ class installer extends installer_base
 
 		if($conf['apache']['installed'] == true && $this->install_ispconfig_interface == true){
 			//* Copy the ISPConfig vhost for the controlpanel
-			$content = $this->get_template_file("apache_ispconfig.vhost", true);
-			$content = str_replace('{vhost_port}', $conf['apache']['vhost_port'], $content);
+			$vhost_conf_dir = $conf['apache']['vhost_conf_dir'];
+			//$vhost_conf_enabled_dir = $conf['apache']['vhost_conf_enabled_dir'];
 
-			//* comment out the listen directive if port is 80 or 443
-			if ($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
-				$content = str_replace('{vhost_port_listen}', '#', $content);
+			// Dont just copy over the virtualhost template but add some custom settings
+			$tpl = new tpl();
+  		if (file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/apache_ispconfig.vhost.master")) {
+  			$tpl->newTemplate($conf['ispconfig_install_dir']."/server/conf-custom/install/apache_ispconfig.vhost.master");
+  		} else {
+  			$tpl->newTemplate("dist/tpl/gentoo/apache_ispconfig.vhost.master");
+  		}
+			$tpl->setVar('vhost_port',$conf['apache']['vhost_port']);
+
+			// comment out the listen directive if port is 80 or 443
+			if($conf['apache']['vhost_port'] == 80 or $conf['apache']['vhost_port'] == 443) {
+				$tpl->setVar('vhost_port_listen','#');
 			} else {
-				$content = str_replace('{vhost_port_listen}', '', $content);
+				$tpl->setVar('vhost_port_listen','');
 			}
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_comment}', '', $content);
+				$tpl->setVar('ssl_comment','');
 			} else {
-				$content = str_replace('{ssl_comment}', '#', $content);
+				$tpl->setVar('ssl_comment','#');
 			}
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key') && is_file($install_dir.'/interface/ssl/ispserver.bundle')) {
-				$content = str_replace('{ssl_bundle_comment}', '', $content);
+				$tpl->setVar('ssl_bundle_comment','');
 			} else {
-				$content = str_replace('{ssl_bundle_comment}', '#', $content);
+				$tpl->setVar('ssl_bundle_comment','#');
 			}
 
-			$vhost_path = $conf['apache']['vhost_conf_dir'].'/ispconfig.vhost';
-			$this->write_config_file($vhost_path, $content);
-
-			if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
-				$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
-				$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
-				$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
-				@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
-				$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
-				wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
-				exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
-				chmod('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', 0755);
-				@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
-				exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
-				$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
-			}
+			$tpl->setVar('apache_version',getapacheversion());
+
+			wf($vhost_conf_dir.'/ispconfig.vhost', $tpl->grab());
+
+			//* and create the symlink
+			/*if($this->is_update == false) {
+				if(@is_link($vhost_conf_enabled_dir.'/ispconfig.vhost')) unlink($vhost_conf_enabled_dir.'/ispconfig.vhost');
+				if(!@is_link($vhost_conf_enabled_dir.'/000-ispconfig.vhost')) {
+					symlink($vhost_conf_dir.'/ispconfig.vhost', $vhost_conf_enabled_dir.'/000-ispconfig.vhost');
+				}
+			}*/
+			//if(!is_file('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter')) {
+			$content = rfsel($conf['ispconfig_install_dir'].'/server/conf-custom/install/apache_ispconfig_fcgi_starter.master', 'tpl/apache_ispconfig_fcgi_starter.master');
+			$content = str_replace('{fastcgi_bin}', $conf['fastcgi']['fastcgi_bin'], $content);
+			$content = str_replace('{fastcgi_phpini_path}', $conf['fastcgi']['fastcgi_phpini_path'], $content);
+			@mkdir('/var/www/php-fcgi-scripts/ispconfig', 0755, true);
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', false);
+			wf('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', $content);
+			exec('chmod +x /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter');
+			@symlink($install_dir.'/interface/web', '/var/www/ispconfig');
+			exec('chown -R ispconfig:ispconfig /var/www/php-fcgi-scripts/ispconfig');
+			$this->set_immutable('/var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter', true);
+			//}
+      
+      // unlink acme vhost symlink
+      if(is_link($vhost_conf_dir . '/999-acme.conf') && file_exists($vhost_conf_dir . '/acme.conf')) unlink($vhost_conf_dir . '/999-acme.conf');
 		}
 
 		if($conf['nginx']['installed'] == true && $this->install_ispconfig_interface == true){
@@ -1177,7 +1457,7 @@ class installer extends installer_base
 			$content = str_replace('{vhost_port}', $conf['nginx']['vhost_port'], $content);
 
 			if(is_file($install_dir.'/interface/ssl/ispserver.crt') && is_file($install_dir.'/interface/ssl/ispserver.key')) {
-				$content = str_replace('{ssl_on}', 'ssl', $content);
+				$content = str_replace('{ssl_on}', 'ssl http2', $content);
 				$content = str_replace('{ssl_comment}', '', $content);
 				$content = str_replace('{fastcgi_ssl}', 'on', $content);
 			} else {
@@ -1219,44 +1499,41 @@ class installer extends installer_base
 		}
 
 		//* Install the update script
-		if (is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) {
-			unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
-		}
-
+		if(is_file('/usr/local/bin/ispconfig_update_from_dev.sh')) unlink('/usr/local/bin/ispconfig_update_from_dev.sh');
 		chown($install_dir.'/server/scripts/update_from_dev.sh', 'root');
 		chmod($install_dir.'/server/scripts/update_from_dev.sh', 0700);
-		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
-		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
+//		chown($install_dir.'/server/scripts/update_from_tgz.sh', 'root');
+//		chmod($install_dir.'/server/scripts/update_from_tgz.sh', 0700);
 		chown($install_dir.'/server/scripts/ispconfig_update.sh', 'root');
 		chmod($install_dir.'/server/scripts/ispconfig_update.sh', 0700);
-
-		if (!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) {
-			symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update_from_dev.sh');
-		}
-
-		if (!is_link('/usr/local/bin/ispconfig_update.sh')) {
-			symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update.sh');
-		}
+		if(!is_link('/usr/local/bin/ispconfig_update_from_dev.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update_from_dev.sh');
+		if(!is_link('/usr/local/bin/ispconfig_update.sh')) symlink($install_dir.'/server/scripts/ispconfig_update.sh', '/usr/local/bin/ispconfig_update.sh');
+
+		// Make executable then unlink and symlink letsencrypt pre, post and renew hook scripts
+		chown($install_dir.'/server/scripts/letsencrypt_pre_hook.sh', 'root');
+		chown($install_dir.'/server/scripts/letsencrypt_post_hook.sh', 'root');
+		chown($install_dir.'/server/scripts/letsencrypt_renew_hook.sh', 'root');
+		chmod($install_dir.'/server/scripts/letsencrypt_pre_hook.sh', 0700);
+		chmod($install_dir.'/server/scripts/letsencrypt_post_hook.sh', 0700);
+		chmod($install_dir.'/server/scripts/letsencrypt_renew_hook.sh', 0700);
+		if(is_link('/usr/local/bin/letsencrypt_pre_hook.sh')) unlink('/usr/local/bin/letsencrypt_pre_hook.sh');
+		if(is_link('/usr/local/bin/letsencrypt_post_hook.sh')) unlink('/usr/local/bin/letsencrypt_post_hook.sh');
+		if(is_link('/usr/local/bin/letsencrypt_renew_hook.sh')) unlink('/usr/local/bin/letsencrypt_renew_hook.sh');
+		symlink($install_dir.'/server/scripts/letsencrypt_pre_hook.sh', '/usr/local/bin/letsencrypt_pre_hook.sh');
+		symlink($install_dir.'/server/scripts/letsencrypt_post_hook.sh', '/usr/local/bin/letsencrypt_post_hook.sh');
+		symlink($install_dir.'/server/scripts/letsencrypt_renew_hook.sh', '/usr/local/bin/letsencrypt_renew_hook.sh');
 
 		//* Make the logs readable for the ispconfig user
-		if (is_file('/var/log/maillog')) {
-			exec('chmod +r /var/log/maillog');
-		}
-		if (is_file('/var/log/messages')) {
-			exec('chmod +r /var/log/messages');
-		}
-		if (is_file('/var/log/clamav/clamav.log')) {
-			exec('chmod +r /var/log/clamav/clamav.log');
-		}
-		if (is_file('/var/log/clamav/freshclam.log')) {
-			exec('chmod +r /var/log/clamav/freshclam.log');
-		}
-
-		//* Create the ispconfig log directory
-		if (!is_dir($conf['ispconfig_log_dir'])) {
-			mkdir($conf['ispconfig_log_dir']);
-		}
-		if (!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
+		if(@is_file('/var/log/mail.log')) exec('chmod +r /var/log/mail.log');
+		if(@is_file('/var/log/mail.warn')) exec('chmod +r /var/log/mail.warn');
+		if(@is_file('/var/log/mail.err')) exec('chmod +r /var/log/mail.err');
+		if(@is_file('/var/log/messages')) exec('chmod +r /var/log/messages');
+		if(@is_file('/var/log/clamav/clamav.log')) exec('chmod +r /var/log/clamav/clamav.log');
+		if(@is_file('/var/log/clamav/freshclam.log')) exec('chmod +r /var/log/clamav/freshclam.log');
+
+		//* Create the ispconfig log file and directory
+		if(!is_file($conf['ispconfig_log_dir'].'/ispconfig.log')) {
+			if(!is_dir($conf['ispconfig_log_dir'])) mkdir($conf['ispconfig_log_dir'], 0755);
 			touch($conf['ispconfig_log_dir'].'/ispconfig.log');
 		}
 		chmod($conf['ispconfig_log_dir'].'/ispconfig.log', 0600);
@@ -1268,16 +1545,45 @@ class installer extends installer_base
 		exec('chown ispconfig:ispconfig '. $conf['ispconfig_log_dir'].'/auth.log');
 		exec('chmod 660 '. $conf['ispconfig_log_dir'].'/auth.log');
 
-		rename($install_dir.'/server/scripts/run-getmail.sh', '/usr/local/bin/run-getmail.sh');
-
-		if (is_user('getmail')) {
-			chown('/usr/local/bin/run-getmail.sh', 'getmail');
+		if(is_user('getmail')) {
+			rename($install_dir.'/server/scripts/run-getmail.sh', '/usr/local/bin/run-getmail.sh');
+			if(is_user('getmail')) chown('/usr/local/bin/run-getmail.sh', 'getmail');
+			chmod('/usr/local/bin/run-getmail.sh', 0744);
+		}
+
+		//* Add Log-Rotation
+		if (is_dir('/etc/logrotate.d')) {
+			@unlink('/etc/logrotate.d/logispc3'); // ignore, if the file is not there
+			/* We rotate these logs in cron_daily.php
+			$fh = fopen('/etc/logrotate.d/logispc3', 'w');
+			fwrite($fh,
+					"$conf['ispconfig_log_dir']/ispconfig.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"} \n" .
+					"$conf['ispconfig_log_dir']/cron.log { \n" .
+					"	weekly \n" .
+					"	missingok \n" .
+					"	rotate 4 \n" .
+					"	compress \n" .
+					"	delaycompress \n" .
+					"}");
+			fclose($fh);
+			*/
 		}
-		chmod('/usr/local/bin/run-getmail.sh', 0744);
 
 		//* Remove Domain module as its functions are available in the client module now
 		if(@is_dir('/usr/local/ispconfig/interface/web/domain')) exec('rm -rf /usr/local/ispconfig/interface/web/domain');
 
+		//* Disable rkhunter run and update in debian cronjob as ispconfig is running and updating rkhunter
+		if(is_file('/etc/default/rkhunter')) {
+			replaceLine('/etc/default/rkhunter', 'CRON_DAILY_RUN="yes"', 'CRON_DAILY_RUN="no"', 1, 0);
+			replaceLine('/etc/default/rkhunter', 'CRON_DB_UPDATE="yes"', 'CRON_DB_UPDATE="no"', 1, 0);
+		}
+
 		// Add symlink for patch tool
 		if(!is_link('/usr/local/bin/ispconfig_patch')) exec('ln -s /usr/local/ispconfig/server/scripts/ispconfig_patch /usr/local/bin/ispconfig_patch');
 
@@ -1286,7 +1592,6 @@ class installer extends installer_base
 		if(is_file($conf['amavis']['config_dir'].'/50-user~')) chmod($conf['amavis']['config_dir'].'/50-user~', 0400);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf')) chmod($conf['amavis']['config_dir'].'/amavisd.conf', 0640);
 		if(is_file($conf['amavis']['config_dir'].'/amavisd.conf~')) chmod($conf['amavis']['config_dir'].'/amavisd.conf~', 0400);
-
 	}
 
 }
diff --git a/install/dist/tpl/gentoo/apache_ispconfig.vhost.master b/install/dist/tpl/gentoo/apache_ispconfig.vhost.master
index e885b381bc..39d25ac906 100644
--- a/install/dist/tpl/gentoo/apache_ispconfig.vhost.master
+++ b/install/dist/tpl/gentoo/apache_ispconfig.vhost.master
@@ -4,41 +4,83 @@
 # for the ISPConfig controlpanel
 ######################################################
 
-{vhost_port_listen} Listen {vhost_port}
-<tmpl_if name='apache_version' op='<' value='2.4' format='version'>
-  # NameVirtualHost *:{vhost_port}
-</tmpl_if>
+<tmpl_var name="vhost_port_listen"> Listen <tmpl_var name="vhost_port">
+NameVirtualHost *:<tmpl_var name="vhost_port">
 
-<VirtualHost _default_:{vhost_port}>
+<VirtualHost _default_:<tmpl_var name="vhost_port">>
   ServerAdmin webmaster@localhost
 
   Alias /mail /var/www/ispconfig/mail
   
+  <Directory /var/www/ispconfig/>
+    <FilesMatch "\.ph(p3?|tml)$">
+      SetHandler None
+    </FilesMatch>
+  </Directory>
+  <Directory /usr/local/ispconfig/interface/web/>
+    <FilesMatch "\.ph(p3?|tml)$">
+      SetHandler None
+    </FilesMatch>
+  </Directory>
+  
   <IfModule mod_fcgid.c>
     DocumentRoot /var/www/ispconfig/
     SuexecUserGroup ispconfig ispconfig
     <Directory /var/www/ispconfig/>
-      Options +Indexes +FollowSymLinks +MultiViews +ExecCGI
+      Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
       AllowOverride AuthConfig Indexes Limit Options FileInfo
-      <FilesMatch "\.ph(p[3-5]?|tml)$">
+      <FilesMatch "\.php$">
            SetHandler fcgid-script
       </FilesMatch>
       FCGIWrapper /var/www/php-fcgi-scripts/ispconfig/.php-fcgi-starter .php
+      <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
+      Require all granted
+      <tmpl_else>
       Order allow,deny
       Allow from all
+      </tmpl_if>
     </Directory>
     DirectoryIndex index.php
+    IPCCommTimeout  7200
+    MaxRequestLen 15728640
+  </IfModule>
+  
+  <IfModule mod_proxy_fcgi.c>
+    DocumentRoot /usr/local/ispconfig/interface/web
+    SuexecUserGroup ispconfig ispconfig
+    DirectoryIndex index.php
+
+    <Directory /usr/local/ispconfig/interface/web>
+      Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
+      AllowOverride AuthConfig Indexes Limit Options FileInfo
+      <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
+      Require all granted
+      <tmpl_else>
+      Order allow,deny
+      Allow from all
+      </tmpl_if>
+      <FilesMatch \.php$>
+         #SetHandler "proxy:unix:/var/lib/php5-fpm/ispconfig.sock|fcgi://localhost"
+         SetHandler "proxy:fcgi://127.0.0.1:9000"
+      </FilesMatch>
+    </Directory>
   </IfModule>
 
-  <IfModule mod_php5.c>
+  <IfModule mpm_itk_module>
     DocumentRoot /usr/local/ispconfig/interface/web/
+    AssignUserId ispconfig ispconfig
     AddType application/x-httpd-php .php
     <Directory /usr/local/ispconfig/interface/web>
+      # php_admin_value open_basedir "/usr/local/ispconfig/interface:/usr/share:/tmp"
       Options +FollowSymLinks
       AllowOverride None
+      <tmpl_if name='apache_version' op='>' value='2.2' format='version'>
+      Require all granted
+      <tmpl_else>
       Order allow,deny
       Allow from all
-	  php_value magic_quotes_gpc        0
+      </tmpl_if>
+      php_value magic_quotes_gpc        0
     </Directory>
   </IfModule>
 
@@ -51,20 +93,53 @@
   </IfModule>
 
   # SSL Configuration
-  {ssl_comment}SSLEngine On
-  {ssl_comment}SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
-  {ssl_comment}SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
+  <tmpl_var name="ssl_comment">SSLEngine On
+  <tmpl_if name='apache_version' op='>=' value='2.3.16' format='version'>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv3 -TLSv1 -TLSv1.1
+  <tmpl_else>
+  <tmpl_var name="ssl_comment">SSLProtocol All -SSLv2 -SSLv3
+  </tmpl_if>
+  <tmpl_var name="ssl_comment">SSLCertificateFile /usr/local/ispconfig/interface/ssl/ispserver.crt
+  <tmpl_var name="ssl_comment">SSLCertificateKeyFile /usr/local/ispconfig/interface/ssl/ispserver.key
+  <tmpl_var name="ssl_bundle_comment">SSLCACertificateFile /usr/local/ispconfig/interface/ssl/ispserver.bundle
 
-</VirtualHost>
+  <tmpl_var name="ssl_comment">SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
+  <tmpl_var name="ssl_comment">SSLHonorCipherOrder On
+  <tmpl_if name='apache_version' op='>=' value='2.4.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLCompression Off
+  </tmpl_if>
+  <tmpl_if name='apache_version' op='>=' value='2.4.11' format='version'>
+  <tmpl_var name="ssl_comment">SSLSessionTickets Off
+  </tmpl_if>
 
-<Directory /var/www/php-cgi-scripts>
-    AllowOverride None
-    Order Deny,Allow
-    Deny from all
-</Directory>
+  <IfModule mod_headers.c>
+    # ISPConfig 3.1 currently requires unsafe-line for both scripts and styles, as well as unsafe-eval
+    Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'"
+    <tmpl_var name="ssl_comment">Header set Content-Security-Policy "default-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; object-src 'none'; upgrade-insecure-requests"
+    Header set X-Content-Type-Options: nosniff
+    Header set X-Frame-Options: SAMEORIGIN
+    Header set X-XSS-Protection: "1; mode=block"
+    Header always edit Set-Cookie (.*) "$1; HTTPOnly"
+    <tmpl_var name="ssl_comment">Header always edit Set-Cookie (.*) "$1; Secure"
+    <IfModule mod_version.c>
+      <IfVersion >= 2.4.7>
+          Header setifempty Strict-Transport-Security "max-age=15768000"
+      </IfVersion>
+      <IfVersion < 2.4.7>
+          Header set Strict-Transport-Security "max-age=15768000"
+      </IfVersion>
+    </IfModule>
+    RequestHeader unset Proxy early
+  </IfModule>
+
+  <tmpl_if name='apache_version' op='>=' value='2.3.3' format='version'>
+  <tmpl_var name="ssl_comment">SSLUseStapling On
+  <tmpl_var name="ssl_comment">SSLStaplingResponderTimeout 5
+  <tmpl_var name="ssl_comment">SSLStaplingReturnResponderErrors Off
+  </tmpl_if>
+  
+  # Redirect http to https
+  ErrorDocument 400 "<script>document.location.href='https://'+location.hostname+':'+location.port';</script><h1>Error 400 - trying to redirect</h1>"
+
+</VirtualHost>
 
-<Directory /var/www/php-fcgi-scripts>
-    AllowOverride None
-    Order Deny,Allow
-    Deny from all
-</Directory>
diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 10de1d8fbf..5a0b0ceaf5 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -547,16 +547,15 @@ function remove_blank_lines($input, $file = 1){
 		$content = $input;
 	}
 	$lines = explode("\n", $content);
+	$new_lines = array();
 	if(!empty($lines)){
 		foreach($lines as $line){
 			if(trim($line) != '') $new_lines[] = $line;
 		}
 	}
-	if(is_array($new_lines)){
-		$content = implode("\n", $new_lines);
-	} else {
-		$content = '';
-	}
+
+	$content = implode("\n", $new_lines);
+
 	if($file){
 		wf($input, $content);
 	}else{
diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php
index 3d49c23871..d0aab93088 100644
--- a/install/lib/installer_base.lib.php
+++ b/install/lib/installer_base.lib.php
@@ -52,7 +52,7 @@ class installer_base {
 	}
 
 	public function update_acme() {
-		$acme = explode("\n", shell_exec('which acme.sh /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh 2> /dev/null'));
+		$acme = explode("\n", (string)shell_exec('which acme.sh /usr/local/ispconfig/server/scripts/acme.sh /root/.acme.sh/acme.sh 2> /dev/null'));
 		$acme = reset($acme);
 		$val = 0;
 
@@ -838,9 +838,9 @@ class installer_base {
 			$addr_cleanup = "'%u'";
 			foreach (str_split($out[0]) as $delim) {
 				$recipient_delimiter = $this->db->escape( str_replace('%', '%%', $delim) );
-				$addr_cleanup = "SUBSTRING_INDEX(${addr_cleanup}, '${recipient_delimiter}', 1)";
+				$addr_cleanup = "SUBSTRING_INDEX({$addr_cleanup}, '{$recipient_delimiter}', 1)";
 			}
-			$no_addr_extension = "CONCAT(${addr_cleanup}, '@%d')";
+			$no_addr_extension = "CONCAT({$addr_cleanup}, '@%d')";
 		} else {
 			$no_addr_extension = "''";
 		}
@@ -1525,7 +1525,7 @@ class installer_base {
 		foreach ($options as $value) {
 			$value = trim($value);
 			if ($value == '') continue;
-			if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+			if (preg_match("|check_recipient_access\s+proxy:mysql:{$quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
 				continue;
 			}
 			$new_options[] = $value;
@@ -1533,7 +1533,7 @@ class installer_base {
 		if ($configure_lmtp && (!isset($conf['mail']['content_filter']) || $conf['mail']['content_filter'] === 'amavisd')) {
 			for ($i = 0; isset($new_options[$i]); $i++) {
 				if ($new_options[$i] == 'reject_unlisted_recipient') {
-					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
+					array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:{$config_dir}/mysql-verify_recipients.cf"));
 					break;
 				}
 			}
@@ -1712,7 +1712,7 @@ class installer_base {
 			// Check for amavisd -> pure webserver with postfix for mailing without antispam
 			if ($conf['amavis']['installed']) {
 				$content_filter_service = ($configure_lmtp) ? 'lmtp' : 'amavis';
-				$postconf_commands[] = "content_filter = ${content_filter_service}:[127.0.0.1]:10024";
+				$postconf_commands[] = "content_filter = {$content_filter_service}:[127.0.0.1]:10024";
 				$postconf_commands[] = 'receive_override_options = no_address_mappings';
 				$postconf_commands[] = 'address_verify_virtual_transport = smtp:[127.0.0.1]:10025';
 				$postconf_commands[] = 'address_verify_transport_maps = static:smtp:[127.0.0.1]:10025';
@@ -1723,7 +1723,7 @@ class installer_base {
 			foreach ($options as $value) {
 				$value = trim($value);
 				if ($value == '') continue;
-				if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+				if (preg_match("|check_recipient_access\s+proxy:mysql:{$quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
 					continue;
 				}
 				$new_options[] = $value;
@@ -1731,7 +1731,7 @@ class installer_base {
 			if ($configure_lmtp) {
 				for ($i = 0; isset($new_options[$i]); $i++) {
 					if ($new_options[$i] == 'reject_unlisted_recipient') {
-						array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:${config_dir}/mysql-verify_recipients.cf"));
+						array_splice($new_options, $i+1, 0, array("check_recipient_access proxy:mysql:{$config_dir}/mysql-verify_recipients.cf"));
 						break;
 					}
 				}
@@ -1868,7 +1868,7 @@ class installer_base {
 				if (preg_match('/check_policy_service\s+inet:127.0.0.1:10023/', $value)) {
 					continue;
 				}
-				if (preg_match("|check_recipient_access\s+proxy:mysql:${quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
+				if (preg_match("|check_recipient_access\s+proxy:mysql:{$quoted_config_dir}/mysql-verify_recipients.cf|", $value)) {
 					continue;
 				}
 				$new_options[] = $value;
@@ -1935,10 +1935,10 @@ class installer_base {
 		);
 		foreach ($local_d as $f) {
 			$tpl = new tpl();
-			if (file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) {
-				$tpl->newTemplate($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master");
+			if (file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master")) {
+				$tpl->newTemplate($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master");
 			} else {
-				$tpl->newTemplate("rspamd_${f}.master");
+				$tpl->newTemplate("rspamd_{$f}.master");
 			}
 
 			$tpl->setVar('dkim_path', $mail_config['dkim_path']);
@@ -1950,7 +1950,7 @@ class installer_base {
 				$tpl->setLoop('local_addrs', $local_addrs);
 			}
 
-			wf("/etc/rspamd/local.d/${f}", $tpl->grab());
+			wf("/etc/rspamd/local.d/{$f}", $tpl->grab());
 		}
 
 
@@ -1967,10 +1967,10 @@ class installer_base {
 			'arc.conf',
 		);
 		foreach ($local_d as $f) {
-			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) {
-				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/${f}");
+			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master")) {
+				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master /etc/rspamd/local.d/{$f}");
 			} else {
-				exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/${f}");
+				exec("cp tpl/rspamd_{$f}.master /etc/rspamd/local.d/{$f}");
 			}
 		}
 
@@ -1980,10 +1980,10 @@ class installer_base {
 			'surbl_group.conf',
 		);
 		foreach ($override_d as $f) {
-			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) {
-				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/override.d/${f}");
+			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master")) {
+				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master /etc/rspamd/override.d/{$f}");
 			} else {
-				exec("cp tpl/rspamd_${f}.master /etc/rspamd/override.d/${f}");
+				exec("cp tpl/rspamd_{$f}.master /etc/rspamd/override.d/{$f}");
 			}
 		}
 
@@ -1995,10 +1995,10 @@ class installer_base {
 			'spf_whitelist.inc.ispc',
 		);
 		foreach ($maps_d as $f) {
-			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master")) {
-				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_${f}.master /etc/rspamd/local.d/maps.d/${f}");
+			if(file_exists($conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master")) {
+				exec('cp '.$conf['ispconfig_install_dir']."/server/conf-custom/install/rspamd_{$f}.master /etc/rspamd/local.d/maps.d/{$f}");
 			} else {
-				exec("cp tpl/rspamd_${f}.master /etc/rspamd/local.d/maps.d/${f}");
+				exec("cp tpl/rspamd_{$f}.master /etc/rspamd/local.d/maps.d/{$f}");
 			}
 		}
 
@@ -3145,11 +3145,11 @@ class installer_base {
 				$out = null;
 				$ret = null;
 				if($conf['nginx']['installed'] == true || $conf['apache']['installed'] == true) {
-					exec("$acme --issue --log $acme_log -w /usr/local/ispconfig/interface/acme -d " . escapeshellarg($hostname) . " $renew_hook", $out, $ret);
+					exec("$acme --issue --keylength 4096 --log $acme_log -w /usr/local/ispconfig/interface/acme -d " . escapeshellarg($hostname) . " $renew_hook", $out, $ret);
 				}
 				// Else, it is not webserver, so we use standalone
 				else {
-					exec("$acme --issue --log $acme_log --standalone -d " . escapeshellarg($hostname) . " $hook", $out, $ret);
+					exec("$acme --issue --keylength 4096 --log $acme_log --standalone -d " . escapeshellarg($hostname) . " $hook", $out, $ret);
 				}
 
 				if($ret == 0 || ($ret == 2 && file_exists($check_acme_file))) {
diff --git a/install/sql/incremental/upd_dev_collection.sql b/install/sql/incremental/upd_dev_collection.sql
index e69de29bb2..c3d8c5b210 100644
--- a/install/sql/incremental/upd_dev_collection.sql
+++ b/install/sql/incremental/upd_dev_collection.sql
@@ -0,0 +1,2 @@
+
+ALTER TABLE `mail_user` CHANGE `quota` `quota` BIGINT(20) NOT NULL DEFAULT '0';
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index cf340bda01..e9ed67c86a 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -1070,7 +1070,7 @@ CREATE TABLE `mail_user` (
   `gid` int(11) NOT NULL default '5000',
   `maildir` varchar(255) NOT NULL default '',
   `maildir_format` varchar(255) NOT NULL default 'maildir',
-  `quota` bigint(20) NOT NULL default '-1',
+  `quota` bigint(20) NOT NULL default '0',
   `cc` text,
   `forward_in_lda` enum('n','y') NOT NULL default 'n',
   `sender_cc` varchar(255) NOT NULL default '',
diff --git a/install/tpl/gentoo_postfix.conf.master b/install/tpl/gentoo_postfix.conf.master
index c6b1c2f9c5..8bd34f6928 100644
--- a/install/tpl/gentoo_postfix.conf.master
+++ b/install/tpl/gentoo_postfix.conf.master
@@ -1,3 +1,5 @@
+alias_maps = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
+alias_database = hash:/etc/aliases, hash:/var/lib/mailman/data/aliases
 virtual_alias_domains = proxy:mysql:{config_dir}/mysql-virtual_alias_domains.cf
 virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman, proxy:mysql:{config_dir}/mysql-virtual_forwardings.cf, proxy:mysql:{config_dir}/mysql-virtual_alias_maps.cf, proxy:mysql:{config_dir}/mysql-virtual_email2email.cf
 virtual_mailbox_domains = proxy:mysql:{config_dir}/mysql-virtual_domains.cf
@@ -5,6 +7,9 @@ virtual_mailbox_maps = proxy:mysql:{config_dir}/mysql-virtual_mailboxes.cf
 virtual_mailbox_base = {vmail_mailbox_base}
 virtual_uid_maps = proxy:mysql:/etc/postfix/mysql-virtual_uids.cf
 virtual_gid_maps = proxy:mysql:/etc/postfix/mysql-virtual_gids.cf
+sender_bcc_maps = proxy:mysql:{config_dir}/mysql-virtual_outgoing_bcc.cf
+inet_protocols=all
+inet_interfaces = all
 smtpd_sasl_auth_enable = yes
 broken_sasl_auth_clients = yes
 smtpd_sasl_authenticated_header = yes
@@ -35,7 +40,7 @@ header_checks = regexp:{config_dir}/header_checks
 mime_header_checks = regexp:{config_dir}/mime_header_checks
 nested_header_checks = regexp:{config_dir}/nested_header_checks
 body_checks = regexp:{config_dir}/body_checks
-inet_interfaces = all
+owner_request_special = no
 smtp_tls_security_level = may
 smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
 smtpd_tls_protocols = !SSLv2,!SSLv3
diff --git a/interface/lib/classes/db_mysql.inc.php b/interface/lib/classes/db_mysql.inc.php
index 78eee8c997..9ae929136b 100644
--- a/interface/lib/classes/db_mysql.inc.php
+++ b/interface/lib/classes/db_mysql.inc.php
@@ -825,12 +825,13 @@ class db
 		return true;
 	}
 
-	//** Deletes a record and saves the changes into the datalog
+	// Updates a datalog record to store an error state.
 	public function datalogError($errormsg) {
 		global $app;
 
-		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) $this->query("UPDATE sys_datalog set error = ? WHERE datalog_id = ?", $errormsg, $app->modules->current_datalog_id);
-
+		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) {
+			$this->query("UPDATE sys_datalog set error = ? WHERE datalog_id = ?", $errormsg, $app->modules->current_datalog_id);
+		}
 		return true;
 	}
 
@@ -844,7 +845,11 @@ class db
 			$login = $_SESSION['s']['user']['username'];
 		}
 
-		$result = $this->queryAllRecords("SELECT COUNT( * ) AS cnt, sys_datalog.action, sys_datalog.dbtable FROM sys_datalog, server WHERE server.server_id = sys_datalog.server_id AND sys_datalog.user = ? AND sys_datalog.datalog_id > server.updated GROUP BY sys_datalog.dbtable, sys_datalog.action", $login);
+		$result = $this->queryAllRecords("SELECT COUNT( * ) AS cnt, sys_datalog.action, sys_datalog.dbtable
+				FROM sys_datalog, server
+				WHERE server.server_id = sys_datalog.server_id AND sys_datalog.user = ? AND sys_datalog.datalog_id > server.updated
+				GROUP BY sys_datalog.dbtable, sys_datalog.action",
+			$login);
 		foreach($result as $row) {
 			if(!$row['dbtable'] || in_array($row['dbtable'], array('aps_instances', 'aps_instances_settings', 'mail_access', 'mail_content_filter'))) continue; // ignore some entries, maybe more to come
 			$return['entries'][] = array('table' => $row['dbtable'], 'action' => $row['action'], 'count' => $row['cnt'], 'text' => $app->lng('datalog_status_' . $row['action'] . '_' . $row['dbtable'])); $return['count'] += $row['cnt'];
diff --git a/interface/lib/classes/listform_actions.inc.php b/interface/lib/classes/listform_actions.inc.php
index 7ffc84c32b..a40ace3c42 100644
--- a/interface/lib/classes/listform_actions.inc.php
+++ b/interface/lib/classes/listform_actions.inc.php
@@ -226,7 +226,7 @@ class listform_actions {
 		}
 
 		$sql_where = $app->listform->getSearchSQL($sql_where);
-		if(isset($app->listform->listDef['join_sql'])) $sql_where .= ' AND '.$app->listform->listDef['join_sql'];
+		if(isset($app->listform->listDef['join_sql']) && $app->listform->listDef['join_sql'] != '') $sql_where .= ' AND '.$app->listform->listDef['join_sql'];
 		$app->tpl->setVar($app->listform->searchValues);
 
 		$order_by_sql = $this->SQLOrderBy;
diff --git a/interface/lib/classes/tform_base.inc.php b/interface/lib/classes/tform_base.inc.php
index 9e22a1e868..25c64409e8 100644
--- a/interface/lib/classes/tform_base.inc.php
+++ b/interface/lib/classes/tform_base.inc.php
@@ -560,8 +560,12 @@ class tform_base {
 								foreach($vals as $tvl) {
 									if(trim($tvl) == trim($k)) $checked = ' CHECKED';
 								}
+								$datacheckfields = '';
+								if (isset($field['data-check-fields'])) {
+									$datacheckfields = " data-check-fields=\"{$field['data-check-fields']}\"";
+								}
 								// $out .= "<label for=\"".$key."[]\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key."[]\" value=\"$k\" type=\"checkbox\" $checked /> $v</label>\r\n";
-								$out .= "<label for=\"".$key.$elementNo."\" class=\"inlineLabel\"><input name=\"".$key."[]\" id=\"".$key.$elementNo."\" value=\"$k\" type=\"checkbox\" $checked /> $v</label>";
+								$out .= "<label for=\"".$key.$elementNo."\" class=\"inlineLabel\"$datacheckfields><input name=\"".$key."[]\" id=\"".$key.$elementNo."\" value=\"$k\" type=\"checkbox\" $checked /> $v</label>";
 								if (isset($field['render_inline']) && $field['render_inline'] == 'n') {
 									$out .= "<br/>\r\n";
 								}
diff --git a/interface/lib/lang/cn.lng b/interface/lib/lang/cn.lng
new file mode 100644
index 0000000000..72fcb8b737
--- /dev/null
+++ b/interface/lib/lang/cn.lng
@@ -0,0 +1,178 @@
+<?php
+$wb['conf_format_dateshort'] = 'Y-m-d';
+$wb['conf_format_dateshort_human_readable'] = 'yyyy-mm-dd';
+$wb['conf_format_datelong'] = 'l dS of F Y';
+$wb['conf_format_timeshort'] = 'H:i';
+$wb['conf_format_timelong'] = 'H:i:s';
+$wb['conf_format_datetime'] = 'Y-m-d H:i';
+$wb['number_format_decimals'] = '4';
+$wb['number_format_decimals_client'] = '2';
+$wb['number_format_dec_point'] = '.';
+$wb['number_format_thousands_sep'] = '';
+$wb['error_301'] = '当前用户无权访问该模块。';
+$wb['error_302'] = '无效的模块。';
+$wb['error_1001'] = '用户名和密码不能为空!';
+$wb['error_1002'] = '用户名和/或密码不正确!';
+$wb['error_1003'] = '用户名已被停用!';
+$wb['delete_confirmation'] = '你确定要删除这条记录吗?';
+$wb['error_no_view_permission'] = '你没有查看此记录的权限或此记录不存在!';
+$wb['error_no_delete_permission'] = '你没有删除此记录的权限!';
+$wb['page_txt'] = '页';
+$wb['page_of_txt'] = '/';
+$wb['page_and_txt'] = '和';
+$wb['page_next_txt'] = '下一页';
+$wb['page_back_txt'] = '上一页';
+$wb['delete_txt'] = '删除';
+$wb['filter_txt'] = '筛选';
+$wb['add_new_record_txt'] = '添加新记录';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['top_menu_system'] = '系统';
+$wb['top_menu_client'] = '客户';
+$wb['top_menu_email'] = '邮件';
+$wb['top_menu_monitor'] = '监控';
+$wb['top_menu_sites'] = '站点';
+$wb['top_menu_dns'] = 'DNS';
+$wb['top_menu_tools'] = '工具';
+$wb['top_menu_help'] = '帮助';
+$wb['top_menu_billing'] = '结算';
+$wb['top_menu_mailuser'] = '邮件用户';
+$wb['top_menu_domain'] = '域名';
+$wb['top_menu_dashboard'] = '主页';
+$wb['top_menu_vm'] = '虚拟服务器';
+$wb['toolsarea_head_txt'] = '工具';
+$wb['latest_news_txt'] = '最新新闻';
+$wb['logout_txt'] = '注销';
+$wb['daynamesmin_su'] = '周日';
+$wb['daynamesmin_mo'] = '周一';
+$wb['daynamesmin_tu'] = '周二';
+$wb['daynamesmin_we'] = '周三';
+$wb['daynamesmin_th'] = '周四';
+$wb['daynamesmin_fr'] = '周五';
+$wb['daynamesmin_sa'] = '周六';
+$wb['daynames_sunday'] = '星期日';
+$wb['daynames_monday'] = '星期一';
+$wb['daynames_tuesday'] = '星期二';
+$wb['daynames_wednesday'] = '星期三';
+$wb['daynames_thursday'] = '星期四';
+$wb['daynames_friday'] = '星期五';
+$wb['daynames_saturday'] = '星期六';
+$wb['monthnamesshort_jan'] = '1月';
+$wb['monthnamesshort_feb'] = '2月';
+$wb['monthnamesshort_mar'] = '3月';
+$wb['monthnamesshort_apr'] = '4月';
+$wb['monthnamesshort_may'] = '5月';
+$wb['monthnamesshort_jun'] = '6月';
+$wb['monthnamesshort_jul'] = '7月';
+$wb['monthnamesshort_aug'] = '8月';
+$wb['monthnamesshort_sep'] = '9月';
+$wb['monthnamesshort_oct'] = '10月';
+$wb['monthnamesshort_nov'] = '11月';
+$wb['monthnamesshort_dec'] = '12月';
+$wb['datepicker_nextText'] = '下一个';
+$wb['datepicker_prevText'] = '上一个';
+$wb['submit_confirmation'] = '您确定要执行此操作吗?';
+$wb['globalsearch_resultslimit_of_txt'] = 'çš„';
+$wb['globalsearch_resultslimit_results_txt'] = '结果';
+$wb['globalsearch_noresults_text_txt'] = '没有结果。';
+$wb['globalsearch_noresults_limit_txt'] = '0 结果';
+$wb['globalsearch_searchfield_watermark_txt'] = '搜索';
+$wb['globalsearch_suggestions_text_txt'] = '建议';
+$wb['global_tabchange_warning_txt'] = '如果您按下“确定”按钮,此选项卡中的更改将被更改。如果取消,它们将被丢弃。';
+$wb['global_tabchange_discard_txt'] = '此选项卡中有未保存的更改。如果您继续,更改将被丢弃。';
+
+$wb['datalog_changes_txt'] = '以下更改尚未应用到所有服务器:';
+$wb['datalog_changes_end_txt'] = '存储更新可能需要一分钟时间。请耐心等待。';
+$wb['datalog_status_i_web_database'] = '创建新数据库';
+$wb['datalog_status_u_web_database'] = '更新数据库';
+$wb['datalog_status_d_web_database'] = '删除数据库';
+$wb['datalog_status_i_web_database_user'] = '为数据库创建用户';
+$wb['datalog_status_u_web_database_user'] = '更新数据库用户';
+$wb['datalog_status_d_web_database_user'] = '删除数据库用户';
+$wb['datalog_status_i_web_domain'] = '创建新网站';
+$wb['datalog_status_u_web_domain'] = '更新网站设置';
+$wb['datalog_status_d_web_domain'] = '删除网站';
+$wb['datalog_status_i_ftp_user'] = '创建FTP用户';
+$wb['datalog_status_u_ftp_user'] = '更新FTP用户';
+$wb['datalog_status_d_ftp_user'] = '删除FTP用户';
+$wb['datalog_status_i_mail_domain'] = '创建电子邮件域';
+$wb['datalog_status_u_mail_domain'] = '更新电子邮件域';
+$wb['datalog_status_d_mail_domain'] = '删除电子邮件域';
+$wb['datalog_status_i_mail_user'] = '创建电子邮件用户';
+$wb['datalog_status_u_mail_user'] = '更新电子邮件用户';
+$wb['datalog_status_d_mail_user'] = '删除电子邮件用户';
+$wb['datalog_status_i_spamfilter_users'] = '创建垃圾邮件过滤器设置';
+$wb['datalog_status_u_spamfilter_users'] = '更新垃圾邮件过滤器设置';
+$wb['datalog_status_d_spamfilter_users'] = '删除垃圾邮件过滤器设置';
+$wb['datalog_status_i_mail_forwarding'] = '创建电子邮件地址';
+$wb['datalog_status_u_mail_forwarding'] = '更新电子邮件地址';
+$wb['datalog_status_d_mail_forwarding'] = '删除电子邮件地址';
+$wb['datalog_status_i_dns_rr'] = '创建DNS记录';
+$wb['datalog_status_u_dns_rr'] = '更新DNS记录';
+$wb['datalog_status_d_dns_rr'] = '删除DNS记录';
+$wb['datalog_status_i_dns_soa'] = '创建DNS区域';
+$wb['datalog_status_u_dns_soa'] = '更新DNS区域';
+$wb['datalog_status_d_dns_soa'] = '删除DNS区域';
+$wb['datalog_status_i_dns_slave'] = '创建新的DNS从区域';
+$wb['datalog_status_u_dns_slave'] = '更新DNS从区域';
+$wb['datalog_status_d_dns_slave'] = '删除DNS从区域';
+$wb['datalog_status_i_firewall'] = '创建新的防火墙规则';
+$wb['datalog_status_u_firewall'] = '更新防火墙规则';
+$wb['datalog_status_d_firewall'] = '删除防火墙规则';
+$wb['datalog_status_u_server'] = '更新服务器设置';
+$wb['datalog_status_d_server'] = '删除服务器';
+$wb['datalog_status_i_cron'] = '创建cron作业';
+$wb['datalog_status_u_cron'] = '更新cron作业';
+$wb['datalog_status_i_server_ip'] = '添加服务器IP';
+$wb['datalog_status_u_server_ip'] = '更新服务器IP';
+$wb['datalog_status_d_server_ip'] = '删除服务器IP';
+$wb['datalog_status_d_cron'] = '删除cron作业';
+$wb['datalog_status_i_mail_get'] = '创建邮件获取器账户';
+$wb['datalog_status_u_mail_get'] = '更新邮件获取器账户';
+$wb['datalog_status_d_mail_get'] = '删除邮件获取器账户';
+$wb['datalog_status_i_mail_mailinglist'] = '创建邮件列表';
+$wb['datalog_status_u_mail_mailinglist'] = '更新邮件列表';
+$wb['datalog_status_d_mail_mailinglist'] = '删除邮件列表';
+$wb['datalog_status_i_shell_user'] = '创建 Shell 用户';
+$wb['datalog_status_u_shell_user'] = '更新 Shell 用户';
+$wb['datalog_status_d_shell_user'] = '删除 Shell 用户';
+$wb['datalog_status_i_web_folder'] = '创建文件夹保护';
+$wb['datalog_status_u_web_folder'] = '更新文件夹保护';
+$wb['datalog_status_d_web_folder'] = '删除文件夹保护';
+$wb['datalog_status_i_web_folder_user'] = '创建文件夹保护用户';
+$wb['datalog_status_u_web_folder_user'] = '更新文件夹保护用户';
+$wb['datalog_status_d_web_folder_user'] = '删除文件夹保护用户';
+$wb['datalog_status_i_xmpp_domain'] = '创建 XMPP 域名';
+$wb['datalog_status_u_xmpp_domain'] = '更新 XMPP 域名';
+$wb['datalog_status_d_xmpp_domain'] = '删除 XMPP 域名';
+$wb['datalog_status_i_xmpp_user'] = '创建 XMPP 用户';
+$wb['datalog_status_u_xmpp_user'] = '更新 XMPP 用户';
+$wb['datalog_status_d_xmpp_user'] = '删除 XMPP 用户';
+$wb['err_csrf_attempt_blocked'] = 'CSRF 尝试已被阻止。';
+$wb['login_as_txt'] = '以...身份登录';
+$wb['no_domain_perm'] = '您没有此域的权限。';
+$wb['no_destination_perm'] = '您没有此目标的权限。';
+$wb['client_you_are_locked'] = '您无权更改任何设置。';
+$wb['gender_m_txt'] = '先生';
+$wb['gender_f_txt'] = '女士';
+$wb['client_cannot_be_deleted_because_of_billing_module_txt'] = '此客户在计费模块中有记录,因此无法删除。';
+$wb['yes_txt'] = '是';
+$wb['no_txt'] = '否';
+$wb['None'] = 'æ— ';
+$wb['strength_1'] = 'å¼±';
+$wb['strength_2'] = '一般';
+$wb['strength_3'] = '好';
+$wb['strength_4'] = '强';
+$wb['strength_5'] = '非常强';
+$wb['weak_password_txt'] = '所选密码不符合安全指南。它的长度必须至少为 {chars} 个字符,并具有“{strength}”的强度。';
+$wb['weak_password_length_txt'] = '所选密码不符合安全指南。它的长度必须至少为 {chars} 个字符。';
+$wb['security_check1_txt'] = '检查安全权限:';
+$wb['security_check2_txt'] = '失败。';
+$wb['select_directive_snippet_txt'] = '指令片段';
+$wb['select_master_directive_snippet_txt'] = '主指令片段';
+$wb['unlimited_txt'] = '无限制';
+$wb['server_id_0_error_txt'] = '请选择一个有效的服务器。服务器ID必须大于0。';
+$wb['datalog_changes_close_txt'] = '关闭';
+$wb['non_admin_error'] = '需要管理员级别的权限';
+$wb['copy_to_clipboard_txt'] = '复制到剪贴板';
+?>
diff --git a/interface/web/admin/lib/lang/cn.lng b/interface/web/admin/lib/lang/cn.lng
new file mode 100644
index 0000000000..e744926508
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn.lng
@@ -0,0 +1,60 @@
+<?php
+
+$wb['Groups'] = '用户组';
+$wb['groups_description'] = '编辑系统用户组的表单。';
+
+$wb['Servers'] = '服务器';
+$wb['Config'] = '配置';
+
+$wb['Add user'] = '添加用户';
+$wb['Edit user'] = '编辑用户';
+$wb['Add group'] = '添加组';
+$wb['Edit group'] = '编辑组';
+$wb['Edit server'] = '编辑服务器';
+
+$wb['Sync. Now'] = '立即同步';
+$wb['DB Sync.'] = '数据库同步。';
+
+$wb['User Management'] = '用户管理';
+$wb['CP Users'] = '控制面板用户';
+$wb['Remote Users'] = '远程用户';
+
+$wb['System'] = '系统';
+$wb['Server Services'] = '服务器服务';
+$wb['Services'] = '服务';
+$wb['Server Config'] = '服务器配置';
+$wb['Server'] = '服务器';
+$wb['Mail'] = '邮件';
+$wb['Getmail'] = 'Getmail';
+$wb['Web'] = 'Web';
+$wb['FastCGI'] = 'FastCGI';
+$wb['Jailkit'] = 'Jailkit';
+$wb['Rescue'] = '救援';
+$wb['Server IP addresses'] = '服务器IP地址';
+$wb['Additional PHP Versions'] = '额外的PHP版本';
+$wb['Directive Snippets'] = '指令片段';
+$wb['Firewall'] = '防火墙';
+
+$wb['Interface'] = '界面';
+$wb['Interface Config'] = '主配置';
+$wb['Sites'] = '网站';
+$wb['DNS'] = 'DNS';
+$wb['Domains'] = '域名';
+$wb['Misc'] = '杂项';
+
+$wb['Software'] = '应用与插件';
+$wb['Repositories'] = '软件源';
+$wb['Packages'] = '软件包';
+$wb['Updates'] = 'æ›´æ–°';
+
+$wb['Language Editor'] = '语言编辑器';
+$wb['Languages'] = '语言';
+$wb['New Language'] = '新语言';
+$wb['Merge'] = '合并';
+$wb['Export'] = '导出';
+$wb['Import'] = '导入';
+
+$wb['Remote Actions'] = '远程操作';
+$wb['Do OS-Update'] = '执行操作系统更新';
+$wb['Do ISPConfig-Update'] = '执行ISPConfig更新';
+?>
diff --git a/interface/web/admin/lib/lang/cn_directive_snippets.lng b/interface/web/admin/lib/lang/cn_directive_snippets.lng
new file mode 100644
index 0000000000..e35b560bba
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_directive_snippets.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['Directive Snippets'] = '指令片段';
+$wb['name_txt'] = '片段名称';
+$wb['type_txt'] = '类型';
+$wb['snippet_txt'] = '指令片段';
+$wb['active_txt'] = '激活';
+$wb['directive_snippets_name_empty'] = '请为指令片段指定一个名称。';
+$wb['directive_snippets_name_error_unique'] = '已经存在一个同名的指令片段。';
+$wb['variables_txt'] = '变量';
+$wb['customer_viewable_txt'] = '客户可见';
+$wb['required_php_snippets_txt'] = '所需 PHP 片段';
+$wb['update_sites_txt'] = '使用此指令片段更新网站';
+$wb['error_hide_snippet_active_sites'] = '无法从客户端隐藏此指令片段,因为它当前正在被现有网站使用。';
+$wb['error_disable_snippet_active_sites'] = '由于当前有网站正在使用此指令片段,因此无法禁用它。';
+$wb['error_delete_snippet_active_sites'] = '由于当前有网站正在使用此指令片段,因此无法删除它。';
diff --git a/interface/web/admin/lib/lang/cn_directive_snippets_list.lng b/interface/web/admin/lib/lang/cn_directive_snippets_list.lng
new file mode 100644
index 0000000000..95bdd03552
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_directive_snippets_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '指令片段';
+$wb['active_txt'] = '激活';
+$wb['name_txt'] = '片段名称';
+$wb['type_txt'] = '类型';
+$wb['add_new_record_txt'] = '添加指令片段';
+$wb['customer_viewable_txt'] = '客户可见';
+?>
diff --git a/interface/web/admin/lib/lang/cn_firewall.lng b/interface/web/admin/lib/lang/cn_firewall.lng
new file mode 100644
index 0000000000..d9d95c22d3
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_firewall.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['tcp_port_txt'] = '开放 TCP 端口';
+$wb['udp_port_txt'] = '开放 UDP 端口';
+$wb['tcp_port_help_txt'] = '用逗号分隔';
+$wb['udp_port_help_txt'] = '用逗号分隔';
+$wb['active_txt'] = '激活';
+$wb['firewall_error_unique'] = '该服务器已存在防火墙记录。';
+$wb['tcp_ports_error_regex'] = 'TCP 端口定义中不允许出现该字符。允许的字符有数字、冒号(:)和逗号。';
+$wb['udp_ports_error_regex'] = 'UDP 端口定义中不允许出现该字符。允许的字符有数字、冒号(:)和逗号。';
+?>
diff --git a/interface/web/admin/lib/lang/cn_firewall_list.lng b/interface/web/admin/lib/lang/cn_firewall_list.lng
new file mode 100644
index 0000000000..8145ea0f7f
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_firewall_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '防火墙';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['tcp_port_txt'] = '开放TCP端口';
+$wb['udp_port_txt'] = '开放UDP端口';
+$wb['add_new_record_txt'] = '添加防火墙记录';
+?>
diff --git a/interface/web/admin/lib/lang/cn_groups.lng b/interface/web/admin/lib/lang/cn_groups.lng
new file mode 100644
index 0000000000..9ca6eb8de0
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_groups.lng
@@ -0,0 +1,5 @@
+<?php
+$wb['description_txt'] = '描述';
+$wb['name_txt'] = '组名';
+$wb['name_err'] = '组名必须是1到30个字符。';
+?>
diff --git a/interface/web/admin/lib/lang/cn_groups_list.lng b/interface/web/admin/lib/lang/cn_groups_list.lng
new file mode 100644
index 0000000000..3ae2f8f458
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_groups_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '系统用户组';
+$wb['description_txt'] = '描述';
+$wb['name_txt'] = '用户组';
+$wb['add_new_record_txt'] = '添加新用户组';
+$wb['warning_txt'] = '<b>警告:</b>请勿在此处编辑或修改任何用户设置。请改用客户端模块中的客户端和经销商设置。在此处修改用户或组可能会导致数据丢失!';
+?>
diff --git a/interface/web/admin/lib/lang/cn_iptables.lng b/interface/web/admin/lib/lang/cn_iptables.lng
new file mode 100644
index 0000000000..f788bb9599
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_iptables.lng
@@ -0,0 +1,15 @@
+<?php
+
+$wb['server_id_txt'] = '服务器';
+$wb['multiport_txt'] = '多端口';
+$wb['singleport_txt'] = '单端口';
+$wb['protocol_txt'] = '协议';
+$wb['table_txt'] = '表';
+$wb['target_txt'] = '目标';
+$wb['state_txt'] = '状态';
+$wb['destination_ip_txt'] = '目标地址';
+$wb['source_ip_txt'] = '源地址';
+$wb['active_txt'] = '激活';
+$wb['iptables_error_unique'] = '此服务器已存在防火墙记录。';
+
+?>
diff --git a/interface/web/admin/lib/lang/cn_iptables_list.lng b/interface/web/admin/lib/lang/cn_iptables_list.lng
new file mode 100644
index 0000000000..512500b649
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_iptables_list.lng
@@ -0,0 +1,17 @@
+<?php
+
+$wb['list_head_txt'] = 'IPTables';
+$wb['add_new_rule_txt'] = '添加IPTables规则';
+$wb['server_id_txt'] = '服务器';
+$wb['multiport_txt'] = '多端口';
+$wb['singleport_txt'] = '单端口';
+$wb['protocol_txt'] = '协议';
+$wb['table_txt'] = '表格';
+$wb['target_txt'] = '目标';
+$wb['state_txt'] = '状态';
+$wb['destination_ip_txt'] = '目标地址';
+$wb['source_ip_txt'] = '源地址';
+$wb['active_txt'] = '激活';
+$wb['iptables_error_unique'] = '该服务器已存在防火墙规则。';
+
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_add.lng b/interface/web/admin/lib/lang/cn_language_add.lng
new file mode 100644
index 0000000000..717c411941
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_add.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '添加新语言';
+$wb['language_select_txt'] = '选择语言基础';
+$wb['language_new_txt'] = '新语言';
+$wb['language_new_hint_txt'] = '2 个字符的 ISO 639-1 语言代码(参见 https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)';
+$wb['btn_save_txt'] = '创建新语言文件集';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_complete.lng b/interface/web/admin/lib/lang/cn_language_complete.lng
new file mode 100644
index 0000000000..b78431d3f9
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_complete.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '合并语言文件';
+$wb['list_desc_txt'] = '将所选语言文件与英文主语言文件合并。<br />这将把英文主语言文件中缺失的字符串添加到所选语言文件中。';
+$wb['language_select_txt'] = '选择语言';
+$wb['btn_save_txt'] = '立即合并文件';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_edit.lng b/interface/web/admin/lib/lang/cn_language_edit.lng
new file mode 100644
index 0000000000..b4a0c104ec
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_edit.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '语言文件编辑器';
+$wb['language_select_txt'] = '选择语言';
+$wb['module_txt'] = '模块';
+$wb['lang_file_txt'] = '语言文件';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_export.lng b/interface/web/admin/lib/lang/cn_language_export.lng
new file mode 100644
index 0000000000..bbb3e7aee7
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_export.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['list_head_txt'] = '导出语言文件';
+$wb['language_select_txt'] = '选择语言';
+$wb['btn_save_txt'] = '导出所选语言文件集';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_import.lng b/interface/web/admin/lib/lang/cn_language_import.lng
new file mode 100644
index 0000000000..a9a2ff908d
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_import.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '导入语言文件';
+$wb['list_desc_txt'] = '警告:不要从不受信任的来源导入语言文件。';
+$wb['language_import_txt'] = '选择语言文件';
+$wb['btn_save_txt'] = '导入所选的语言文件';
+$wb['language_overwrite_txt'] = '如果存在则覆盖文件。';
+$wb['btn_cancel_txt'] = '返回';
+$wb['ignore_version_txt'] = '跳过 ISPConfig 版本检查';
+?>
diff --git a/interface/web/admin/lib/lang/cn_language_list.lng b/interface/web/admin/lib/lang/cn_language_list.lng
new file mode 100644
index 0000000000..0a33f825db
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_language_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '语言文件编辑器';
+$wb['language_select_txt'] = '选择语言';
+$wb['module_txt'] = '模块';
+$wb['lang_file_txt'] = '语言文件';
+$wb['lang_file_date_txt'] = '最后修改时间';
+?>
diff --git a/interface/web/admin/lib/lang/cn_package_install.lng b/interface/web/admin/lib/lang/cn_package_install.lng
new file mode 100644
index 0000000000..744bc8c839
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_package_install.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['repo_name_txt'] = '仓库名称';
+$wb['repo_url_txt'] = 'URL';
+$wb['repo_username_txt'] = '用户名(可选)';
+$wb['repo_password_txt'] = '密码(可选)';
+$wb['active_txt'] = '启用';
+?>
diff --git a/interface/web/admin/lib/lang/cn_remote_action.lng b/interface/web/admin/lib/lang/cn_remote_action.lng
new file mode 100644
index 0000000000..65a75fa6f1
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_remote_action.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['select_server_txt'] = '选择服务器';
+$wb['btn_do_txt'] = '执行操作';
+$wb['do_osupdate_caption'] = '在远程服务器上执行操作系统更新';
+$wb['do_osupdate_desc'] = '此操作将在所选服务器上执行 "apt -y upgrade" 命令。<br><br><strong>请自行承担风险!</strong>';
+$wb['do_ispcupdate_caption'] = '在远程服务器上执行 ISPConfig 3 更新';
+$wb['do_ispcupdate_desc'] = '此操作将在所选服务器上执行 ISPConfig3 更新。<br><br><strong>请自行承担风险!</strong>';
+$wb['action_scheduled'] = '操作已安排执行';
+$wb['select_all_server'] = '所有服务器';
+$wb['ispconfig_update_title'] = 'ISPConfig 更新说明';
+$wb['ispconfig_update_text'] = '以 root 用户身份登录服务器 shell,执行命令<br /><br /> <strong>ispconfig_update.sh</strong><br /><br />以开始 ISPConfig 更新。<br /><br /><a href="https://www.faqforge.com/linux/controlpanels/ispconfig3/how-to-update-ispconfig-3/" target="_blank">单击此处获取详细的更新说明</a>';
+?>
diff --git a/interface/web/admin/lib/lang/cn_remote_user.lng b/interface/web/admin/lib/lang/cn_remote_user.lng
new file mode 100644
index 0000000000..66552727d4
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_remote_user.lng
@@ -0,0 +1,52 @@
+<?php
+$wb['remote_user_txt'] = '远程用户';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['function_txt'] = '功能';
+$wb['username_error_unique'] = '用户名必须唯一';
+$wb['username_error_empty'] = '用户名不能为空';
+$wb['password_error_empty'] = '密码不能为空';
+$wb['password_strength_txt'] = '密码强度';
+$wb['Mail domain functions'] = '邮件域功能';
+$wb['Mail mailing list functions'] = '邮件列表功能';
+$wb['Mail user functions'] = '邮件用户功能';
+$wb['Mail alias functions'] = '邮件别名功能';
+$wb['Mail forward functions'] = '邮件转发功能';
+$wb['Mail catchall functions'] = '邮件抓取功能';
+$wb['Mail transport functions'] = '邮件传输功能';
+$wb['Mail whitelist functions'] = '邮件白名单功能';
+$wb['Mail blacklist functions'] = '邮件黑名单功能';
+$wb['Mail spamfilter user functions'] = '邮件垃圾过滤用户功能';
+$wb['Mail spamfilter policy functions'] = '邮件垃圾过滤策略功能';
+$wb['Mail fetchmail functions'] = '邮件获取功能';
+$wb['Mail user filter functions'] = '邮件用户过滤功能';
+$wb['Mail filter functions'] = '邮件过滤功能';
+$wb['Client functions'] = '客户端功能';
+$wb['Sites cron functions'] = '站点cron功能';
+$wb['Sites database functions'] = '站点数据库功能';
+$wb['Sites FTP-User functions'] = '站点FTP用户功能';
+$wb['Sites Shell-User functions'] = '站点Shell用户功能';
+$wb['Sites Domain functions'] = '站点域功能';
+$wb['Sites Aliasdomain functions'] = '站点别名域功能';
+$wb['Sites Subdomain functions'] = '站点子域功能';
+$wb['DNS zone functions'] = 'DNS区域功能';
+$wb['DNS a functions'] = 'DNS A记录功能';
+$wb['DNS aaaa functions'] = 'DNS AAAA记录功能';
+$wb['DNS alias functions'] = 'DNS别名功能';
+$wb['DNS cname functions'] = 'DNS CNAME功能';
+$wb['DNS hinfo functions'] = 'DNS HINFO功能';
+$wb['DNS mx functions'] = 'DNS MX记录功能';
+$wb['DNS naptr functions'] = 'DNS NAPTR记录功能';
+$wb['DNS ns functions'] = 'DNS NS记录功能';
+$wb['DNS ptr functions'] = 'DNS PTR记录功能';
+$wb['DNS rp functions'] = 'DNS RP记录功能';
+$wb['DNS srv functions'] = 'DNS SRV记录功能';
+$wb['DNS txt functions'] = 'DNS TXT记录功能';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['remote_access_txt'] = '远程访问';
+$wb['remote_ips_txt'] = '远程访问IP/主机名(用逗号隔开,留空为任意)';
+$wb['remote_user_error_ips'] = '输入的IP地址或主机名中存在无效的内容。';
+?>
diff --git a/interface/web/admin/lib/lang/cn_remote_user_list.lng b/interface/web/admin/lib/lang/cn_remote_user_list.lng
new file mode 100644
index 0000000000..7b90e136d0
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_remote_user_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '远程用户';
+$wb['list_desc_txt'] = '';
+$wb['add_new_record_txt'] = '添加新用户';
+$wb['parent_remote_userid_txt'] = '用户ID';
+$wb['username_txt'] = '用户名';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server.lng b/interface/web/admin/lib/lang/cn_server.lng
new file mode 100644
index 0000000000..75f0e247f2
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['config_txt'] = '配置';
+$wb['server_name_txt'] = '服务器名称';
+$wb['mail_server_txt'] = '邮件服务器';
+$wb['web_server_txt'] = 'Web 服务器';
+$wb['dns_server_txt'] = 'DNS 服务器';
+$wb['file_server_txt'] = '文件服务器';
+$wb['db_server_txt'] = '数据库服务器';
+$wb['vserver_server_txt'] = 'VServer 服务器';
+$wb['proxy_server_txt'] = '代理服务器';
+$wb['firewall_server_txt'] = '防火墙服务器';
+$wb['active_txt'] = '激活';
+$wb['mirror_server_id_txt'] = '镜像服务器';
+$wb['- None -'] = '- 空 -';
+$wb['xmpp_server_txt'] = 'XMPP 服务器';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_config.lng b/interface/web/admin/lib/lang/cn_server_config.lng
new file mode 100644
index 0000000000..5d5d6eeb25
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_config.lng
@@ -0,0 +1,354 @@
+<?php
+$wb['server_config'] = '服务器配置';
+$wb['config_for_txt'] = '针对配置';
+$wb['server_config_error_not_updated'] = '服务器配置错误:未更新';
+$wb['server_config_error_section_not_updated'] = '服务器配置错误:%s 部分未更新';
+$wb['ufw_enable_txt'] = '启用';
+$wb['ufw_manage_builtins_txt'] = '管理内置规则';
+$wb['ufw_ipv6_txt'] = '启用IPv6';
+$wb['ufw_default_input_policy_txt'] = '默认输入策略';
+$wb['ufw_default_output_policy_txt'] = '默认输出策略';
+$wb['ufw_default_forward_policy_txt'] = '默认转发策略';
+$wb['ufw_default_application_policy_txt'] = '默认应用策略';
+$wb['ufw_log_level_txt'] = '日志级别';
+$wb['jailkit_chroot_home_txt'] = 'Jailkit chroot 主目录';
+$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot 应用程序部分';
+$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chroot 应用程序';
+$wb['jailkit_chroot_cron_programs_txt'] = 'Jailkit cron chroot 应用程序';
+$wb['jailkit_chroot_authorized_keys_template_txt'] = 'Jailkit authorized_keys 模板';
+$wb['website_path_txt'] = '网站路径';
+$wb['website_symlinks_txt'] = '网站符号链接';
+$wb['website_symlinks_rel_txt'] = '创建相对符号链接';
+$wb['website_basedir_txt'] = '网站基目录';
+$wb['website_autoalias_txt'] = '网站自动别名';
+$wb['website_autoalias_note_txt'] = '占位符:';
+$wb['vhost_conf_dir_txt'] = '虚拟主机配置目录';
+$wb['vhost_conf_enabled_dir_txt'] = '虚拟主机配置启用目录';
+$wb['apache_init_script_txt'] = 'Apache init 脚本';
+$wb['apache_init_script_note_txt'] = '留空将自动检测Apache init脚本';
+$wb['apache_init_script_error_regex'] = '无效的 Apache init 脚本';
+$wb['getmail_config_dir_txt'] = 'Getmail 配置目录';
+$wb['fastcgi_starter_path_txt'] = 'FastCGI 启动路径';
+$wb['fastcgi_starter_script_txt'] = 'FastCGI 启动脚本';
+$wb['fastcgi_alias_txt'] = 'FastCGI 别名';
+$wb['fastcgi_phpini_path_txt'] = 'FastCGI php.ini 路径';
+$wb['fastcgi_children_txt'] = 'FastCGI 子进程数';
+$wb['fastcgi_max_requests_txt'] = 'FastCGI 最大请求数';
+$wb['fastcgi_bin_txt'] = 'FastCGI 可执行文件';
+$wb['module_txt'] = '模块';
+$wb['maildir_path_txt'] = 'Maildir 路径';
+$wb['maildir_format_txt'] = 'Maildir 格式';
+$wb['homedir_path_txt'] = '主目录路径';
+$wb['mailuser_uid_txt'] = '邮件用户UID';
+$wb['mailuser_gid_txt'] = '邮件用户GID';
+$wb['mailuser_name_txt'] = '邮件用户名';
+$wb['mailuser_group_txt'] = '邮件用户组';
+$wb['mailbox_virtual_uidgid_maps_txt'] = '使用网站Linux uid作为邮箱';
+$wb['mailbox_virtual_uidgid_maps_info_txt'] = '仅在单个Web和邮件服务器设置中可用';
+$wb['mailbox_virtual_uidgid_maps_error_nosingleserver'] = '在多服务器设置中无法映射UID。';
+$wb['mailbox_virtual_uidgid_maps_error_nodovecot'] = 'UID映射只能与dovecot一起使用。';
+$wb['mailbox_virtual_uidgid_maps_error_alreadyusers'] = '如果已经有邮件用户,则无法更改UID映射。';
+$wb['relayhost_txt'] = '中继主机';
+$wb['relayhost_user_txt'] = '中继主机用户名';
+$wb['relayhost_password_txt'] = '中继主机密码';
+$wb['reject_sender_login_mismatch_txt'] = '拒绝发件人和登录用户不匹配';
+$wb['reject_unknown_txt'] = '拒绝未知主机名';
+$wb['tooltip_reject_unknown_txt'] = '需要主机名通过DNS检查。对经过身份验证的用户不进行检查。';
+$wb['reject_unknown_txt'] = '拒绝未知的helo主机名';
+$wb['tooltip_reject_unknown_txt'] = '需要主机名通过DNS检测。对已认证用户不进行检查。';
+$wb['reject_unknown_helo_txt'] = '拒绝未知的 helo 主机名';
+$wb['reject_unknown_client_txt'] = '拒绝未知的客户端主机名';
+$wb['reject_unknown_client_helo_txt'] = '拒绝未知的helo和客户端主机名';
+$wb['reject_unknown_helo_txt'] = '拒绝未知的helo主机名';
+$wb['reject_unknown_client_txt'] = '拒绝未知的客户端主机名';
+$wb['reject_unknown_client_helo_txt'] = '拒绝未知的helo和客户端主机名';
+$wb['mailbox_size_limit_txt'] = '邮箱大小限制';
+$wb['message_size_limit_txt'] = '邮件大小限制';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['netmask_txt'] = '子网掩码';
+$wb['gateway_txt'] = '网关';
+$wb['hostname_txt'] = '主机名';
+$wb['nameservers_txt'] = '域名服务器';
+$wb['auto_network_configuration_txt'] = '网络配置';
+$wb['ip_address_error_wrong'] = '无效的IP地址格式。';
+$wb['netmask_error_wrong'] = '无效的子网掩码格式。';
+$wb['gateway_error_wrong'] = '无效的网关格式。';
+$wb['hostname_error_empty'] = '主机名为空。';
+$wb['hostname_error_regex'] = '无效的主机名。';
+$wb['nameservers_error_empty'] = '域名服务器为空。';
+$wb['config_dir_txt'] = '配置目录';
+$wb['init_script_txt'] = '定时任务初始化脚本名称';
+$wb['crontab_dir_txt'] = '各自的定时任务路径';
+$wb['wget_txt'] = 'wget程序路径';
+$wb['web_user_txt'] = 'Apache用户';
+$wb['web_group_txt'] = 'Apache组';
+$wb['security_level_txt'] = '安全级别';
+$wb['loglevel_txt'] = '日志级别';
+$wb['apps_vhost_port_txt'] = 'Apps-vhost端口';
+$wb['apps_vhost_ip_txt'] = 'Apps-vhost IP地址';
+$wb['apps_vhost_servername_txt'] = 'Apps-vhost域名';
+$wb['bind_user_txt'] = 'BIND用户';
+$wb['bind_group_txt'] = 'BIND用户组';
+$wb['bind_zonefiles_dir_txt'] = 'BIND区域文件目录';
+$wb['bind_keyfiles_dir_txt'] = 'BIND密钥文件目录';
+$wb['named_conf_path_txt'] = 'BIND named.conf路径';
+$wb['bind_user_error_empty'] = 'BIND用户为空。';
+$wb['bind_group_error_empty'] = 'BIND用户组为空。';
+$wb['bind_zonefiles_dir_error_empty'] = 'BIND区域文件目录为空。';
+$wb['bind_keyfiles_dir_error_empty'] = 'BIND密钥文件目录为空。';
+$wb['named_conf_path_error_empty'] = 'BIND named.conf路径为空。';
+$wb['named_conf_local_path_error_empty'] = 'BIND named.conf.local路径为空。';
+$wb['mail_filter_syntax_txt'] = '邮件过滤器语法';
+$wb['pop3_imap_daemon_txt'] = 'POP3/IMAP守护程序';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['php_open_basedir_error_empty'] = 'PHP open_basedir为空。';
+$wb['htaccess_allow_override_txt'] = '.htaccess AllowOverride';
+$wb['htaccess_allow_override_error_empty'] = '.htaccess AllowOverride为空。';
+$wb['awstats_conf_dir_txt'] = 'awstats配置文件目录';
+$wb['awstats_data_dir_txt'] = 'awstats数据文件目录';
+$wb['awstats_pl_txt'] = 'awstats.pl脚本';
+$wb['awstats_buildstaticpages_pl_txt'] = 'awstats_buildstaticpages.pl脚本';
+$wb['backup_dir_txt'] = '备份目录';
+$wb['backup_tmp_txt'] = '备份临时目录,用于压缩';
+$wb['named_conf_local_path_txt'] = 'BIND named.conf.local路径';
+$wb['php_ini_path_cgi_txt'] = 'CGI php.ini路径';
+$wb['php_ini_path_apache_txt'] = 'Apache php.ini路径';
+$wb['check_apache_config_txt'] = '重启时测试Web服务器配置';
+$wb['network_config_warning_txt'] = '网络配置选项仅适用于Debian和Ubuntu服务器。如果您的网络接口不是eth0,请不要启用此选项。';
+$wb['CA_path_txt'] = 'CA路径';
+$wb['CA_pass_txt'] = 'CA密码';
+$wb['fastcgi_config_syntax_txt'] = 'FastCGI配置语法';
+$wb['backup_mode_txt'] = '备份模式';
+$wb['backup_mode_userzip'] = '备份网站文件,以网站用户为拥有者并以 zip 格式保存';
+$wb['backup_mode_rootgz'] = '备份网站目录下所有文件,以 root 用户身份执行';
+$wb['backup_mode_borg_txt'] = 'BorgBackup:备份 vhost 目录和数据库到增量存储库';
+$wb['backup_missing_utils_txt'] = '无法使用以下备份模式,因为需要的工具未安装:';
+$wb['tmpdir_path_error_empty'] = 'tmp-dir 路径为空。';
+$wb['tmpdir_path_error_regex'] = '无效的 tmp-dir 路径。';
+$wb['backup_time_txt'] = '备份时间';
+$wb['server_type_txt'] = '服务器类型';
+$wb['nginx_vhost_conf_dir_txt'] = 'Nginx Vhost 配置目录';
+$wb['nginx_vhost_conf_enabled_dir_txt'] = 'Nginx Vhost 配置启用目录';
+$wb['nginx_user_txt'] = 'Nginx 用户';
+$wb['nginx_group_txt'] = 'Nginx 用户组';
+$wb['nginx_cgi_socket_txt'] = 'Nginx CGI Socket';
+$wb['backup_dir_error_empty'] = '备份目录为空。';
+$wb['maildir_path_error_empty'] = 'Maildir 路径为空。';
+$wb['homedir_path_error_empty'] = 'Homedir 路径为空。';
+$wb['mailuser_uid_error_empty'] = 'Mailuser UID 为空。';
+$wb['mailuser_gid_error_empty'] = 'Mailuser GID 为空。';
+$wb['mailuser_name_error_empty'] = 'Mailuser 名称为空。';
+$wb['mailuser_group_error_empty'] = 'Mailuser 用户组为空。';
+$wb['getmail_config_dir_error_empty'] = 'Getmail 配置目录为空。';
+$wb['website_basedir_error_empty'] = '网站根目录为空。';
+$wb['website_path_error_empty'] = '网站路径为空。';
+$wb['website_symlinks_error_empty'] = '网站符号链接为空。';
+$wb['vhost_conf_dir_error_empty'] = 'Vhost 配置目录为空。';
+$wb['vhost_conf_enabled_dir_error_empty'] = 'Vhost 配置启用目录为空。';
+$wb['nginx_vhost_conf_dir_error_empty'] = 'Nginx Vhost 配置目录为空。';
+$wb['nginx_vhost_conf_enabled_dir_error_empty'] = 'Nginx Vhost 配置启用目录为空。';
+$wb['apache_user_error_empty'] = 'Apache 用户为空。';
+$wb['apache_group_error_empty'] = 'Apache 用户组为空。';
+$wb['nginx_user_error_empty'] = 'Nginx 用户为空。';
+$wb['nginx_group_error_empty'] = 'Nginx 用户组为空。';
+$wb['php_ini_path_apache_error_empty'] = 'Apache php.ini 路径为空。';
+$wb['php_ini_path_cgi_error_empty'] = 'CGI php.ini 路径为空。';
+$wb['nginx_cgi_socket_empty'] = 'Nginx CGI Socket 为空。';
+$wb['apps_vhost_port_error_empty'] = 'Apps-vhost 端口为空。';
+$wb['apps_vhost_ip_error_empty'] = 'Apps-vhost IP为空。';
+$wb['fastcgi_starter_path_error_empty'] = 'FastCGI启动路径为空。';
+$wb['fastcgi_starter_script_error_empty'] = 'FastCGI启动脚本为空。';
+$wb['fastcgi_alias_error_empty'] = 'FastCGI别名为空。';
+$wb['fastcgi_phpini_path_error_empty'] = 'FastCGI php.ini路径为空。';
+$wb['fastcgi_children_error_empty'] = 'FastCGI子进程数为空。';
+$wb['fastcgi_max_requests_error_empty'] = 'FastCGI最大请求数为空。';
+$wb['fastcgi_bin_error_empty'] = 'FastCGI二进制文件路径为空。';
+$wb['jailkit_chroot_home_error_empty'] = 'Jailkit chroot主目录为空。';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit chroot应用程序部分为空。';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit chroot应用程序为空。';
+$wb['jailkit_chroot_cron_programs_error_empty'] = 'Jailkit cron chroot应用程序为空。';
+$wb['vlogger_config_dir_error_empty'] = '配置目录为空。';
+$wb['cron_init_script_error_empty'] = 'Cron init脚本名为空。';
+$wb['crontab_dir_error_empty'] = '个人crontab路径为空。';
+$wb['cron_wget_error_empty'] = 'wget程序路径为空。';
+$wb['php_fpm_init_script_txt'] = 'PHP-FPM init脚本';
+$wb['php_fpm_init_script_error_empty'] = 'PHP-FPM init脚本为空。';
+$wb['php_fpm_ini_path_txt'] = 'PHP-FPM php.ini路径';
+$wb['php_fpm_ini_path_error_empty'] = 'PHP-FPM php.ini路径为空。';
+$wb['php_fpm_pool_dir_txt'] = 'PHP-FPM池目录';
+$wb['php_fpm_pool_dir_error_empty'] = 'PHP-FPM池目录为空。';
+$wb['php_fpm_start_port_txt'] = 'PHP-FPM起始端口';
+$wb['php_fpm_start_port_error_empty'] = 'PHP-FPM起始端口为空。';
+$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM套接字目录';
+$wb['php_fpm_socket_dir_error_empty'] = 'PHP-FPM套接字目录为空。';
+$wb['try_rescue_txt'] = '启用服务监视并在失败后重启';
+$wb['do_not_try_rescue_httpd_txt'] = '禁用HTTPD监视';
+$wb['do_not_try_rescue_mongodb_txt'] = '禁用MongoDB监视';
+$wb['do_not_try_rescue_mysql_txt'] = '禁用MySQL监视';
+$wb['do_not_try_rescue_mail_txt'] = '禁用电子邮件监视';
+$wb['rescue_description_txt'] = '如果要关闭MySQL,必须选择“禁用MySQL监视”复选框,然后等待2-3分钟。如果不等待2-3分钟,救援将尝试重新启动MySQL!';
+$wb['enable_sni_txt'] = '启用SNI';
+$wb['set_folder_permissions_on_update_txt'] = '更新时设置文件夹权限';
+$wb['add_web_users_to_sshusers_group_txt'] = '将Web用户添加到-sshusers-组中';
+$wb['connect_userid_to_webid_txt'] = '将Linux用户ID连接到Web ID';
+$wb['connect_userid_to_webid_start_txt'] = '用户ID / Web ID连接的起始ID';
+$wb['realtime_blackhole_list_txt'] = '实时黑洞名单';
+$wb['realtime_blackhole_list_note_txt'] = '(使用逗号分隔RBL)';
+$wb['stress_adaptive_txt'] = '适应临时负载峰值';
+$wb['tooltip_stress_adaptive_txt'] = '启用Postfix的应力自适应行为。';
+$wb['ssl_settings_txt'] = 'SSL设置';
+$wb['permissions_txt'] = '权限';
+$wb['php_settings_txt'] = 'PHP设置';
+$wb['apps_vhost_settings_txt'] = '应用程序Vhost设置';
+$wb['awstats_settings_txt'] = 'AWStats设置';
+$wb['firewall_txt'] = '防火墙';
+$wb['mailbox_quota_stats_txt'] = '邮箱配额统计信息';
+$wb['enable_ip_wildcard_txt'] = '启用IP通配符(*)';
+$wb['web_folder_protection_txt'] = '使Web文件夹不可变(扩展属性)';
+$wb['overtraffic_notify_admin_txt'] = '向管理员发送超流量通知';
+$wb['overtraffic_notify_reseller_txt'] = '向经销商发送超流量通知';
+$wb['overtraffic_notify_client_txt'] = '向客户发送超流量通知';
+$wb['overtraffic_disable_web_txt'] = '禁用超出流量限制的网站';
+$wb['rbl_error_regex'] = '请指定有效的RBL主机名。';
+$wb['overquota_notify_threshold_txt'] = '配额警告使用水平';
+$wb['overquota_notify_threshold_error'] = '配额警告使用水平必须在0-100%之间';
+$wb['overquota_notify_admin_txt'] = '向管理员发送配额警告';
+$wb['overquota_notify_reseller_txt'] = '向经销商发送配额警告';
+$wb['overquota_notify_client_txt'] = '向客户发送配额警告';
+$wb['overquota_notify_onok_txt'] = '向客户发送配额正常消息';
+$wb['overquota_notify_freq_txt'] = '每X天发送一次配额警告';
+$wb['overquota_notify_freq_note_txt'] = '0 = 仅发送一次消息,不重复发送';
+$wb['admin_notify_events_txt'] = '从以下级别开始向管理员发送电子邮件';
+$wb['no_notifications_txt'] = '无通知';
+$wb['monit_url_txt'] = 'Monit URL';
+$wb['monit_user_txt'] = 'Monit用户';
+$wb['monit_password_txt'] = 'Monit密码';
+$wb['monit_url_error_regex'] = '无效的Monit URL';
+$wb['monit_url_note_txt'] = '占位符:';
+$wb['munin_url_txt'] = 'Munin URL';
+$wb['munin_user_txt'] = 'Munin用户';
+$wb['munin_password_txt'] = 'Munin密码';
+$wb['munin_url_error_regex'] = '无效的Munin URL';
+$wb['munin_url_note_txt'] = '占位符:';
+$wb['v6_prefix_txt'] = 'IPv6前缀';
+$wb['vhost_rewrite_v6_txt'] = '在镜像上重写IPv6';
+$wb['v6_prefix_length'] = '根据定义的IPv6,前缀太长';
+$wb['backup_dir_is_mount_txt'] = '备份目录是否挂载?';
+$wb['backup_dir_mount_cmd_txt'] = '如果备份目录未挂载,请输入挂载命令';
+$wb['backup_delete_txt'] = '在删除域名/网站时删除备份';
+$wb['overquota_db_notify_threshold_txt'] = 'DB配额警告使用水平';
+$wb['overquota_db_notify_admin_txt'] = '向管理员发送DB配额警告';
+$wb['overquota_db_notify_reseller_txt'] = '向经销商发送DB配额警告';
+$wb['overquota_db_notify_client_txt'] = '向客户发送DB配额警告';
+$wb['monitor_system_updates_txt'] = '检查Linux更新';
+$wb['php_handler_txt'] = '默认的 PHP 处理器';
+$wb['php_fpm_default_chroot_txt'] = '默认的 PHP-FPM chroot';
+$wb['php_fpm_incron_reload_txt'] = '安装 incron 触发器文件以重新加载 PHP-FPM';
+$wb['disabled_txt'] = '已禁用';
+$wb['dkim_strength_txt'] = 'DKIM 强度';
+$wb['monitor_system_updates_txt'] = '检查 Linux 更新';
+$wb['invalid_apache_user_txt'] = '无效的 Apache 用户。';
+$wb['invalid_apache_group_txt'] = '无效的 Apache 组。';
+$wb['backup_dir_error_regex'] = '无效的备份目录。';
+$wb['maildir_path_error_regex'] = '无效的 Maildir 路径。';
+$wb['homedir_path_error_regex'] = '无效的 homedir 路径。';
+$wb['mailuser_name_error_regex'] = '无效的 Mailuser 名称。';
+$wb['mailuser_group_name_error_regex'] = '无效的 Mailuser 组名。';
+$wb['mailuser_uid_error_range'] = 'Mailuser UID 必须 >= 2000。';
+$wb['mailuser_gid_error_range'] = 'Mailuser GID 必须 >= 2000。';
+$wb['getmail_config_dir_error_regex'] = '无效的 getmail 配置目录。';
+$wb['website_basedir_error_regex'] = '无效的网站基础目录路径,最小长度为 5 个字符。';
+$wb['website_symlinks_error_regex'] = '无效的网站符号链接。';
+$wb['vhost_conf_dir_error_regex'] = '无效的虚拟主机配置目录。';
+$wb['vhost_conf_enabled_dir_error_regex'] = '无效的虚拟主机启用配置目录。';
+$wb['nginx_vhost_conf_dir_error_regex'] = '无效的 Nginx 配置目录。';
+$wb['nginx_vhost_conf_enabled_dir_error_regex'] = '无效的 Nginx 启用配置目录。';
+$wb['ca_path_error_regex'] = '无效的 CA 路径。';
+$wb['invalid_nginx_user_txt'] = '无效的 Nginx 用户。';
+$wb['invalid_nginx_group_txt'] = '无效的 Nginx 组。';
+$wb['php_ini_path_apache_error_regex'] = '无效的 Apache php.ini 路径。';
+$wb['php_ini_path_cgi_error_regex'] = '无效的 CGI php.ini 路径。';
+$wb['php_fpm_init_script_error_regex'] = '无效的 PHP-FPM init 脚本。';
+$wb['php_fpm_ini_path_error_regex'] = '无效的 PHP-FPM ini 路径。';
+$wb['php_fpm_pool_dir_error_regex'] = '无效的 PHP-FPM 池目录。';
+$wb['php_fpm_socket_dir_error_regex'] = '无效的 PHP-FPM socket 目录。';
+$wb['php_open_basedir_error_regex'] = '无效的 PHP open_basedir。';
+$wb['awstats_data_dir_empty'] = 'awstats 数据目录为空';
+$wb['awstats_data_dir_error_regex'] = '无效的 awstats 数据目录。';
+$wb['awstats_pl_empty'] = 'awstats.pl设置为空。';
+$wb['awstats_pl_error_regex'] = '无效的awstats.pl路径。';
+$wb['awstats_buildstaticpages_pl_empty'] = 'awstats_buildstaticpages.pl为空。';
+$wb['awstats_buildstaticpages_pl_error_regex'] = '无效的awstats_buildstaticpages.pl路径。';
+$wb['invalid_bind_user_txt'] = '无效的BIND用户。';
+$wb['invalid_bind_group_txt'] = '无效的BIND用户组。';
+$wb['bind_zonefiles_dir_error_regex'] = '无效的BIND区域文件目录。';
+$wb['bind_keyfiles_dir_error_regex'] = '无效的BIND密钥文件目录。';
+$wb['named_conf_path_error_regex'] = '无效的named.conf路径。';
+$wb['named_conf_local_path_error_regex'] = '无效的named.conf.local路径。';
+$wb['fastcgi_starter_path_error_regex'] = '无效的FastCGI启动器路径。';
+$wb['fastcgi_starter_script_error_regex'] = '无效的FastCGI启动器脚本。';
+$wb['fastcgi_alias_error_regex'] = '无效的FastCGI别名。';
+$wb['fastcgi_phpini_path_error_regex'] = '无效的FastCGI php.ini路径。';
+$wb['fastcgi_bin_error_regex'] = '无效的FastCGI bin路径。';
+$wb['jailkit_chroot_home_error_regex'] = '无效的Jailkit chroot home路径。';
+$wb['jailkit_chroot_app_sections_error_regex'] = '无效的Jailkit chroot应用程序sections。';
+$wb['jailkit_chroot_app_programs_error_regex'] = '无效的Jailkit chroot应用程序。';
+$wb['jailkit_chroot_cron_programs_error_regex'] = '无效的Jailkit chroot计划任务程序。';
+$wb['jailkit_chroot_authorized_keys_template_error_regex'] = '无效的 jaikit chroot authorized_keys 模板文件。';
+$wb['vlogger_config_dir_error_regex'] = '无效的 vlogger 配置目录。';
+$wb['cron_init_script_error_regex'] = '无效的 cron 初始化脚本。';
+$wb['crontab_dir_error_regex'] = '无效的 crontab 目录。';
+$wb['cron_wget_error_regex'] = '无效的 cron wget 路径。';
+$wb['network_filesystem_txt'] = '网络文件系统';
+$wb['php_ini_check_minutes_txt'] = '每 X 分钟检查 php.ini 是否更改';
+$wb['php_ini_check_minutes_error_empty'] = '请指定检查 php.ini 更改的频率。';
+$wb['php_ini_check_minutes_info_txt'] = '0 = 无需检查';
+$wb['web_settings_txt'] = 'Web 服务器';
+$wb['xmpp_server_txt'] = 'XMPP 服务器';
+$wb['xmpp_use_ipv6_txt'] = '使用 IPv6';
+$wb['xmpp_bosh_max_inactivity_txt'] = '最大 BOSH 不活动时间';
+$wb['xmpp_bosh_timeout_range_wrong'] = '请输入 BOSH 超时范围介于 15-360 之间';
+$wb['xmpp_module_saslauth'] = 'saslauth';
+$wb['xmpp_server_admins_txt'] = '服务器管理员 (JIDs)';
+$wb['xmpp_modules_enabled_txt'] = '全局启用的插件(每行一个)';
+$wb['xmpp_ports_txt'] = '组件端口';
+$wb['xmpp_port_http_txt'] = 'HTTP';
+$wb['xmpp_port_https_txt'] = 'HTTPS';
+$wb['xmpp_port_pastebin_txt'] = 'Pastebin';
+$wb['xmpp_port_bosh_txt'] = 'BOSH';
+$wb['disable_bind_log_txt'] = '禁用bind9消息以进行日志级别WARN';
+$wb['apps_vhost_enabled_txt'] = '启用Apps-vhost';
+$wb['skip_le_check_txt'] = '跳过Let\'s Encrypt检查';
+$wb['migration_mode_txt'] = '服务器迁移模式';
+$wb['nginx_enable_pagespeed_txt'] = '启用Pagespeed';
+$wb['logging_txt'] = '存储网站访问和错误日志';
+$wb['logging_desc_txt'] = '使用工具>重新同步将更改应用于现有站点。对于Apache,访问和错误日志可以匿名化。对于nginx,仅访问日志会被匿名化,错误日志将包含IP地址。';
+$wb['log_retention_txt'] = '日志保留期(天)';
+$wb['log_retention_error_ispositive'] = '日志保留时间必须是大于0的数字';
+$wb['php_default_hide_txt'] = '在选择框中隐藏默认的PHP版本';
+$wb['php_default_name_txt'] = '默认PHP版本的描述';
+$wb['php_default_name_error_empty'] = '默认PHP版本的描述不能为空';
+$wb['error_mailbox_message_size_txt'] = '邮箱大小必须大于等于邮件大小';
+$wb['php_fpm_reload_mode_txt'] = 'PHP-FPM重新加载模式';
+$wb['content_filter_txt'] = '内容过滤器';
+$wb['rspamd_url_txt'] = 'Rspamd URL';
+$wb['rspamd_user_txt'] = 'Rspamd 用户名';
+$wb['rspamd_password_txt'] = 'Rspamd 密码';
+$wb['rspamd_redis_servers_txt'] = 'Redis服务器';
+$wb['tooltip_rspamd_redis_servers_txt'] = 'Rspamd将使用的Redis服务器。例如: , 或。';
+$wb['rspamd_redis_password_txt'] = 'Redis密码';
+$wb['tooltip_rspamd_redis_password_txt'] = 'Redis服务器的密码(如果未使用,请留空)。';
+$wb['rspamd_redis_bayes_servers_txt'] = 'Bayes的Redis服务器';
+$wb['tooltip_rspamd_redis_bayes_servers_txt'] = 'Rspamd将用于Bayes的Redis服务器(否则请留空)。例如: 或。';
+$wb['rspamd_redis_bayes_password_txt'] = 'Bayes Redis密码';
+$wb['tooltip_rspamd_redis_bayes_password_txt'] = 'Bayes Redis服务器的密码(如果未使用,请留空)。';
+$wb['vhost_proxy_protocol_enabled_txt'] = '启用PROXY协议';
+$wb['vhost_proxy_protocol_http_port_txt'] = 'PROXY协议HTTP端口';
+$wb['vhost_proxy_protocol_https_port_txt'] = 'PROXY协议HTTPS端口';
+$wb['jailkit_hardlinks_txt'] = 'Jailkit chroot中的硬链接';
+$wb['tooltip_jailkit_hardlinks_txt'] = '使用硬链接不安全,但可以节省磁盘空间。';
+$wb['jailkit_hardlinks_allow_txt'] = '允许狱中硬链接';
+$wb['jailkit_hardlinks_no_txt'] = '不,删除硬链接文件';
+$wb['jailkit_hardlinks_yes_txt'] = '是的,如果可能,使用硬链接';
+$wb['mailbox_soft_delete_txt'] = '邮箱软删除';
+$wb['mailbox_soft_delete_info_txt'] = '默认情况下,7天后清理。';
diff --git a/interface/web/admin/lib/lang/cn_server_config_list.lng b/interface/web/admin/lib/lang/cn_server_config_list.lng
new file mode 100644
index 0000000000..4e4694c4e1
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_config_list.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['list_head_txt'] = '服务器配置';
+$wb['server_name_txt'] = '服务器名称';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_ip.lng b/interface/web/admin/lib/lang/cn_server_ip.lng
new file mode 100644
index 0000000000..c7b1593515
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_ip.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_ip_edit_title'] = 'IP地址';
+$wb['server_ip_edit_desc'] = '编辑系统IP地址的表单';
+$wb['server_id_txt'] = '服务器';
+$wb['client_id_txt'] = '客户';
+$wb['ip_type_txt'] = '类型';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['virtualhost_txt'] = 'HTTP NameVirtualHost';
+$wb['virtualhost_port_txt'] = 'HTTP端口';
+$wb['ip_error_wrong'] = 'IP地址无效';
+$wb['ip_error_unique'] = 'IP地址必须唯一';
+$wb['error_port_syntax'] = '端口字段中有无效字符,请只输入逗号分隔的数字。例如:80,443';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_ip_list.lng b/interface/web/admin/lib/lang/cn_server_ip_list.lng
new file mode 100644
index 0000000000..49d1f0a4f0
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_ip_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'IP地址';
+$wb['server_id_txt'] = '服务器';
+$wb['client_id_txt'] = '客户';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['add_new_record_txt'] = '添加新的IP地址';
+$wb['virtualhost_txt'] = 'HTTP虚拟主机';
+$wb['virtualhost_port_txt'] = 'HTTP端口';
+$wb['ip_type_txt'] = '类型';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_ip_map.lng b/interface/web/admin/lib/lang/cn_server_ip_map.lng
new file mode 100644
index 0000000000..ff3ed0b27b
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_ip_map.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['server_ip_map_title'] = 'IPv4地址映射';
+$wb['server_ip_map_desc'] = '用于Web服务器的IPv4地址映射表单';
+$wb['server_id_txt'] = '重写服务器';
+$wb['source_txt'] = '源IP';
+$wb['destination_txt'] = '目标IP';
+$wb['active_txt'] = '启用';
+$wb['ip_error_wrong'] = '目标IP地址无效';
+$wb['destination_ip_empty'] = '目标IP为空。';
+$wb['source_ip_empty'] = '源IP为空。';
+$wb['server_empty_error'] = '服务器为空。';
+$wb['duplicate_mapping_error'] = '映射已存在。';
+$wb['ip_mapping_error'] = '源IP不能是重写服务器的IP地址';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_ip_map_list.lng b/interface/web/admin/lib/lang/cn_server_ip_map_list.lng
new file mode 100644
index 0000000000..1e28d08a77
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_ip_map_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'IP映射';
+$wb['server_id_txt'] = '服务器';
+$wb['source_ip_txt'] = '源IP';
+$wb['destination_ip_txt'] = '目标IP';
+$wb['active_txt'] = '激活';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_list.lng b/interface/web/admin/lib/lang/cn_server_list.lng
new file mode 100644
index 0000000000..1edbc95a83
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_list.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['list_head_txt'] = '服务器';
+$wb['server_name_txt'] = '名称';
+$wb['mail_server_txt'] = '邮件';
+$wb['web_server_txt'] = '网页';
+$wb['dns_server_txt'] = 'DNS';
+$wb['file_server_txt'] = '文件';
+$wb['db_server_txt'] = '数据库';
+$wb['vserver_server_txt'] = '虚拟服务器';
+$wb['proxy_server_txt'] = '代理服务器';
+$wb['firewall_server_txt'] = '防火墙';
+$wb['add_new_record_txt'] = '添加新服务器';
+$wb['xmpp_server_txt'] = 'XMPP';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_php.lng b/interface/web/admin/lib/lang/cn_server_php.lng
new file mode 100644
index 0000000000..80571fb194
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_php.lng
@@ -0,0 +1,20 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['client_id_txt'] = '客户';
+$wb['name_txt'] = 'PHP名称';
+$wb['Name'] = '名称';
+$wb['FastCGI Settings'] = 'FastCGI设置';
+$wb['PHP-FPM Settings'] = 'PHP-FPM设置';
+$wb['Additional PHP Versions'] = '附加PHP版本';
+$wb['Form to edit additional PHP versions'] = '编辑附加PHP版本的表单';
+$wb['server_php_name_error_empty'] = '名称字段不能为空。';
+$wb['php_fastcgi_binary_txt'] = 'PHP FastCGI二进制文件路径';
+$wb['php_fastcgi_ini_dir_txt'] = 'php.ini目录路径';
+$wb['php_fpm_init_script_txt'] = 'PHP-FPM初始化脚本路径';
+$wb['php_fpm_ini_dir_txt'] = 'php.ini目录路径';
+$wb['php_fpm_pool_dir_txt'] = 'PHP-FPM池目录路径';
+$wb['php_fpm_socket_dir_txt'] = 'PHP-FPM套接字目录';
+$wb['active_txt'] = '激活';
+$wb['php_in_use_error'] = '此PHP版本正在使用中。';
+$wb['php_name_in_use_error'] = '名称无法更改。';
+?>
diff --git a/interface/web/admin/lib/lang/cn_server_php_list.lng b/interface/web/admin/lib/lang/cn_server_php_list.lng
new file mode 100644
index 0000000000..94711361bf
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_server_php_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '额外的 PHP 版本';
+$wb['server_id_txt'] = '服务器';
+$wb['add_new_record_txt'] = '添加新的 PHP 版本';
+$wb['client_id_txt'] = '客户';
+$wb['name_txt'] = 'PHP 名称';
+$wb['active_txt'] = '启用';
+$wb['usage_txt'] = '使用次数';
+?>
diff --git a/interface/web/admin/lib/lang/cn_system_config.lng b/interface/web/admin/lib/lang/cn_system_config.lng
new file mode 100644
index 0000000000..694472161f
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_system_config.lng
@@ -0,0 +1,110 @@
+<?php
+$wb['system_config_title'] = '系统配置';
+$wb['system_config_desc_txt'] = '';
+$wb['smtp_missing_admin_mail_txt'] = '如果您想使用SMTP邮件发送,请输入管理员名称和管理员电子邮件地址。';
+$wb['dashboard_atom_url_admin_txt'] = '仪表板Atom源URL(管理员)';
+$wb['dashboard_atom_url_reseller_txt'] = '仪表板Atom源URL(经销商)';
+$wb['dashboard_atom_url_client_txt'] = '仪表板Atom源URL(客户端)';
+$wb['warning'] = '小心编辑这些值!对于有多个客户端的系统,请勿删除前缀。';
+$wb['tab_change_discard_txt'] = '切换选项卡时放弃更改';
+$wb['tab_change_warning_txt'] = '选项卡更改警告';
+$wb['tab_change_warning_note_txt'] = '在编辑表单中,如果用户更改了任何数据,则在切换选项卡时显示警告。';
+$wb['dbname_prefix_txt'] = '数据库名称前缀';
+$wb['dbuser_prefix_txt'] = '数据库用户前缀';
+$wb['shelluser_prefix_txt'] = 'Shell用户前缀';
+$wb['webdavuser_prefix_txt'] = 'Webdav用户前缀';
+$wb['ftpuser_prefix_txt'] = 'FTP用户前缀';
+$wb['vhost_subdomains_txt'] = '将子域名创建为网站';
+$wb['vhost_subdomains_note_txt'] = '只要系统中存在vhost子域,就无法禁用此功能!';
+$wb['vhost_aliasdomains_txt'] = '将别名域创建为网站';
+$wb['vhost_aliasdomains_note_txt'] = '只要系统中存在vhost别名域,就无法禁用此功能!';
+$wb['dbname_prefix_error_regex'] = '数据库名称前缀中不允许出现的字符。';
+$wb['dbuser_prefix_error_regex'] = '数据库用户前缀中不允许出现的字符。';
+$wb['ftpuser_prefix_error_regex'] = 'FTP用户前缀中不允许出现的字符。';
+$wb['shelluser_prefix_error_regex'] = 'Shell用户前缀中不允许出现的字符。';
+$wb['webdavuser_prefix_error_regex'] = 'Webdav用户前缀中不允许出现的字符。';
+$wb['dblist_phpmyadmin_link_txt'] = '在数据库列表中链接到phpmyadmin';
+$wb['enable_welcome_mail_txt'] = '启用欢迎邮件';
+$wb['enable_custom_login_txt'] = '允许自定义登录名';
+$wb['mailboxlist_webmail_link_txt'] = '在邮箱列表中链接到Webmail';
+$wb['webmail_url_txt'] = 'Webmail URL';
+$wb['mailmailinglist_link_txt'] = '在邮件列表列表中链接到邮件列表';
+$wb['mailmailinglist_url_txt'] = '邮件列表URL';
+$wb['phpmyadmin_url_txt'] = 'PHPMyAdmin URL';
+$wb['use_domain_module_txt'] = '在客户端模块中使用域名限制以添加新域名';
+$wb['use_domain_module_hint'] = '如果您使用域限制,您的客户只能选择管理员为他们创建的域名中的一个。他们不能自由编辑域名字段。更改此值后,您必须重新登录才能使更改生效。';
+$wb['new_domain_txt'] = 'HTML 创建新域名';
+$wb['webftp_url_txt'] = 'WebFTP 地址';
+$wb['admin_mail_txt'] = '管理员电子邮件';
+$wb['monitor_key_txt'] = '监控关键词';
+$wb['admin_name_txt'] = '管理员姓名';
+$wb['maintenance_mode_txt'] = '维护模式';
+$wb['maintenance_mode_exclude_ips_txt'] = '从维护模式排除的 IP 地址';
+$wb['maintenance_mode_exclude_ips_error_isip'] = '维护模式排除列表中有一个或多个无效的 IP 地址。必须是逗号分隔的 IPv4 和/或 IPv6 地址列表。';
+$wb['smtp_enabled_txt'] = '使用 SMTP 发送系统邮件';
+$wb['smtp_host_txt'] = 'SMTP 主机';
+$wb['smtp_port_txt'] = 'SMTP 端口';
+$wb['smtp_user_txt'] = 'SMTP 用户';
+$wb['smtp_pass_txt'] = 'SMTP 密码';
+$wb['smtp_crypt_txt'] = '使用 SSL/TLS 加密连接的 SMTP';
+$wb['phpmyadmin_url_error_regex'] = '无效的 phpMyAdmin URL';
+$wb['use_combobox_txt'] = '使用 jQuery UI Combobox';
+$wb['use_loadindicator_txt'] = '使用 Load Indicator';
+$wb['f5_to_reload_js_txt'] = '如果更改此设置,则可能需要按 F5 重新加载 JavaScript 库或清空浏览器缓存。';
+$wb['client_username_web_check_disabled_txt'] = '禁用以 "web" 为关键词的客户用户名检查。';
+$wb['backups_include_into_web_quota_txt'] = '将备份文件包括在 Web 配额中。';
+$wb['show_per_domain_relay_options_txt'] = '显示每个域的转发选项';
+$wb['mailbox_show_autoresponder_tab_txt'] = '在邮件帐户详细信息中显示自动回复选项卡';
+$wb['mailbox_show_mail_filter_tab_txt'] = '在邮件帐户详细信息中显示邮件过滤选项卡';
+$wb['mailbox_show_custom_rules_tab_txt'] = '在邮件帐户详细信息中显示自定义邮件过滤器选项卡';
+$wb['webmail_url_error_regex'] = '无效的 Webmail URL';
+$wb['phpmyadmin_url_note_txt'] = '占位符:';
+$wb['webmail_url_note_txt'] = '占位符:';
+$wb['available_dashlets_note_txt'] = '可用的小部件:';
+$wb['admin_dashlets_left_txt'] = '管理员左侧小部件';
+$wb['admin_dashlets_right_txt'] = '管理员右侧小部件';
+$wb['reseller_dashlets_left_txt'] = '经销商左侧小部件';
+$wb['reseller_dashlets_right_txt'] = '经销商右侧小部件';
+$wb['client_dashlets_left_txt'] = '客户左侧小部件';
+$wb['client_dashlets_right_txt'] = '客户右侧小部件';
+$wb['customer_no_template_txt'] = '客户编号模板';
+$wb['customer_no_template_error_regex_txt'] = '客户编号模板包含无效字符';
+$wb['customer_no_start_txt'] = '客户编号起始值';
+$wb['customer_no_counter_txt'] = '客户编号计数器';
+$wb['session_timeout_txt'] = '会话超时时间(分钟)';
+$wb['session_allow_endless_txt'] = '启用“保持登录”';
+$wb['No'] = '否';
+$wb['min_password_length_txt'] = '最小密码长度';
+$wb['min_password_strength_txt'] = '最小密码强度';
+$wb['ssh_authentication_txt'] = '允许的SSH身份验证';
+$wb['ssh_authentication_password_key'] = '密码和密钥';
+$wb['ssh_authentication_password'] = '密码';
+$wb['ssh_authentication_key'] = '密钥';
+$wb['default_mailserver_txt'] = '默认邮件服务器';
+$wb['default_webserver_txt'] = '默认Web服务器';
+$wb['default_dnsserver_txt'] = '默认DNS服务器';
+$wb['default_slave_dnsserver_txt'] = '默认次要DNS服务器';
+$wb['default_dbserver_txt'] = '默认数据库服务器';
+$wb['company_name_txt'] = '页面标题的公司名称';
+$wb['reseller_can_use_options_txt'] = '经销商可以为网站使用选项卡';
+$wb['custom_login_text_txt'] = '登录页面的自定义文本';
+$wb['custom_login_link_txt'] = '登录页面的自定义链接';
+$wb['login_link_error_regex'] = '自定义登录的链接无效';
+$wb['default_remote_dbserver_txt'] = '默认远程数据库服务器';
+$wb['disable_client_remote_dbserver_txt'] = '禁用客户的远程数据库服务器部分';
+$wb['ca_name_txt'] = '名称';
+$wb['ca_issue_txt'] = '发布';
+$wb['ca_wildcard_txt'] = '使用通配符';
+$wb['ca_iodef_txt'] = 'iodef';
+$wb['active_txt'] = '启用';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['web_php_options_txt'] = 'PHP 处理程序(仅适用于 Apache)';
+$wb['client_protection_txt'] = '客户端保护';
+$wb['show_support_messages_txt'] = '在帮助模块中显示消息功能';
+$wb['show_aps_menu_txt'] = '显示 APS 菜单';
+$wb['show_aps_menu_note_txt'] = 'APS 将在不久的将来从面板中移除。';
+$wb['show_aps_menu_note_url_txt'] = '点击这里了解更多信息。';
+$wb['dns_show_zoneexport_txt'] = '显示区域导出。';
+$wb['le_caa_autocreate_options_txt'] = '在颁发 LE 时启用 CAA 记录的自动创建';
+?>
diff --git a/interface/web/admin/lib/lang/cn_tpl_default_admin.lng b/interface/web/admin/lib/lang/cn_tpl_default_admin.lng
new file mode 100644
index 0000000000..d5f3ecd21a
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_tpl_default_admin.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['tpl_default_admin_head_txt'] = '全局默认主题设置';
+$wb['tpl_default_admin_desc_txt'] = '';
+$wb['server_id_txt'] = '服务器';
+$wb['client_id_txt'] = '客户';
+$wb['name_txt'] = 'PHP名称';
+$wb['Name'] = '名称';
+$wb['FastCGI Settings'] = 'FastCGI设置';
+$wb['PHP-FPM Settings'] = 'PHP-FPM设置';
+$wb['Additional PHP Versions'] = '其他PHP版本';
+$wb['Form to edit additional PHP versions'] = '编辑其他PHP版本的表单';
+$wb['server_php_name_error_empty'] = '名称字段不能为空。';
+$wb['php_fastcgi_binary_txt'] = 'PHP FastCGI二进制文件路径';
+$wb['php_fastcgi_ini_dir_txt'] = 'php.ini目录路径';
+$wb['php_fpm_init_script_txt'] = 'PHP-FPM init脚本路径';
+$wb['php_fpm_ini_dir_txt'] = 'php.ini目录路径';
+$wb['php_fpm_pool_dir_txt'] = 'PHP-FPM池目录路径';
+?>
diff --git a/interface/web/admin/lib/lang/cn_users.lng b/interface/web/admin/lib/lang/cn_users.lng
new file mode 100644
index 0000000000..ccb6eb12cd
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_users.lng
@@ -0,0 +1,42 @@
+<?php
+$wb['users_txt'] = '用户';
+$wb['username_txt'] = '用户名';
+$wb['username_err'] = '用户名过长或包含无效字符。';
+$wb['username_empty'] = '用户名为空。';
+$wb['username_unique'] = '已存在该用户名的用户。';
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['modules_txt'] = '模块';
+$wb['startmodule_txt'] = '起始模块';
+$wb['app_theme_txt'] = '主题';
+$wb['typ_txt'] = '类型';
+$wb['active_txt'] = '激活';
+$wb['language_txt'] = '语言';
+$wb['name_txt'] = '姓名';
+$wb['vorname_txt'] = '名字';
+$wb['unternehmen_txt'] = '公司';
+$wb['strasse_txt'] = '街道';
+$wb['ort_txt'] = '城市';
+$wb['plz_txt'] = '邮编';
+$wb['land_txt'] = '国家';
+$wb['email_txt'] = '电子邮件';
+$wb['url_txt'] = '网址';
+$wb['telefon_txt'] = '电话';
+$wb['fax_txt'] = '传真';
+$wb['groups_txt'] = '用户组';
+$wb['default_group_txt'] = '默认用户组';
+$wb['startmodule_err'] = '起始模块不在模块列表内。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['username_error_collision'] = '用户名不允许是web或web加数字。"';
+$wb['client_not_admin_err'] = '属于客户的用户不能被设置为类型:管理员';
+$wb['lost_password_function_txt'] = '忘记密码功能可用';
+$wb['no_user_insert'] = '类型为“用户”的 CP 用户会在添加客户或经销商时自动添加和更新。';
+$wb['startmodule_empty'] = '起始模块为空。';
+$wb['startmodule_regex'] = '起始模块包含无效字符。';
+$wb['app_theme_empty'] = '主题为空。';
+$wb['app_theme_regex'] = '主题包含无效字符。';
+$wb['otp_auth_txt'] = '多因子身份认证';
+?>
diff --git a/interface/web/admin/lib/lang/cn_users_list.lng b/interface/web/admin/lib/lang/cn_users_list.lng
new file mode 100644
index 0000000000..c85047fb63
--- /dev/null
+++ b/interface/web/admin/lib/lang/cn_users_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '用户列表';
+$wb['username_txt'] = '用户名';
+$wb['client_id_txt'] = '用户ID';
+$wb['active_txt'] = '激活状态';
+$wb['groups_txt'] = '用户组';
+$wb['add_new_record_txt'] = '添加新用户';
+$wb['warning_txt'] = '<b>警告:</b>不要在此处编辑或修改任何客户端用户设置。请改用客户端模块中的客户端和经销商设置。在此修改或更改客户端用户或组可能会导致数据丢失!';
+?>
diff --git a/interface/web/admin/list/firewall.list.php b/interface/web/admin/list/firewall.list.php
index 884779110a..4835cb9d4a 100644
--- a/interface/web/admin/list/firewall.list.php
+++ b/interface/web/admin/list/firewall.list.php
@@ -57,11 +57,11 @@ $liste["item"][] = array( 'field'  => "active",
 	'value'  => array('y' => $app->lng('yes_txt'), 'n' => $app->lng('no_txt')));
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/admin/list/remote_user.list.php b/interface/web/admin/list/remote_user.list.php
index 7dc0fbf430..de11f0d9a1 100644
--- a/interface/web/admin/list/remote_user.list.php
+++ b/interface/web/admin/list/remote_user.list.php
@@ -35,7 +35,7 @@ $liste['auth'] = 'yes';
 
 $liste['item'][] = array(
 	'field'      => 'remote_userid',
-	'datatype'   => 'VARCHAR',
+	'datatype'   => 'INTEGER',
 	'formtype'   => 'SELECT',
 	'op'         => '=',
 	'prefix'     => '',
diff --git a/interface/web/admin/list/server_php.list.php b/interface/web/admin/list/server_php.list.php
index a4a38901ab..4ea40bdae1 100644
--- a/interface/web/admin/list/server_php.list.php
+++ b/interface/web/admin/list/server_php.list.php
@@ -39,6 +39,9 @@ $liste['paging_tpl']  = 'templates/paging.tpl.htm';
 //* Enable auth
 $liste['auth']    = 'no';
 
+// mark columns for php sorting (no real mySQL columns)
+$liste["phpsort"] = array('usage');
+
 
 /*****************************************************
 * Suchfelder
diff --git a/interface/web/admin/server_config_edit.php b/interface/web/admin/server_config_edit.php
index 32aa270893..c19433b0e4 100644
--- a/interface/web/admin/server_config_edit.php
+++ b/interface/web/admin/server_config_edit.php
@@ -125,7 +125,7 @@ class page_action extends tform_actions {
 	function onShowEnd() {
 		global $app;
 		
-		$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ? AND ((SELECT COUNT(*) FROM server) > 1)", $this->id);
+		$tmp = $app->db->queryOneRecord("SELECT server_name FROM server WHERE server_id = ? AND ((SELECT COUNT(*) FROM server) >= 1)", $this->id);
 		$app->tpl->setVar('server_name', $app->functions->htmlentities($tmp['server_name']));
 		unset($tmp);
 
diff --git a/interface/web/client/form/client_circle.tform.php b/interface/web/client/form/client_circle.tform.php
index 64eee542d7..6916c2248b 100644
--- a/interface/web/client/form/client_circle.tform.php
+++ b/interface/web/client/form/client_circle.tform.php
@@ -112,10 +112,11 @@ $form["tabs"]['circle'] = array (
 			'default' => '',
 			'separator' => ',',
 			'datasource' => array (  'type' => 'SQL',
-				'querystring' => 'SELECT client_id,contact_name FROM client WHERE {AUTHSQL} ORDER BY contact_name',
+				'querystring' => 'SELECT client_id,CONCAT(company_name, " (",contact_firstname, " ", contact_name, ")") as contact_label FROM client WHERE {AUTHSQL} ORDER BY contact_label',
 				'keyfield'=> 'client_id',
-				'valuefield'=> 'contact_name'
+				'valuefield'=> 'contact_label'
 			),
+			'render_inline' => 'n',
 			'value'  => ''
 		),
 		'description' => array (
diff --git a/interface/web/client/lib/lang/cn.lng b/interface/web/client/lib/lang/cn.lng
new file mode 100644
index 0000000000..cefa8508e9
--- /dev/null
+++ b/interface/web/client/lib/lang/cn.lng
@@ -0,0 +1,31 @@
+<?php
+$wb['Client'] = '客户';
+$wb['Address'] = '地址';
+$wb['Limits'] = '限制';
+$wb['Add Client'] = '添加客户';
+$wb['Edit Client'] = '编辑客户';
+$wb['Clients'] = '客户';
+$wb['Templates'] = '模板';
+$wb['Limit-Templates'] = '限制模板';
+$wb['Add Reseller'] = '添加经销商';
+$wb['Edit Reseller'] = '编辑经销商';
+$wb['Resellers'] = '经销商';
+$wb['error_has_clients'] = '该经销商有客户。请先删除经销商的客户。';
+$wb['add_additional_template_txt'] = '添加附加模板';
+$wb['delete_additional_template_txt'] = '删除附加模板';
+$wb['Messaging'] = '消息';
+$wb['Send email'] = '发送电子邮件';
+$wb['Edit Client Circle'] = '编辑客户圈';
+$wb['Domains'] = '域名';
+$wb['Add Domain'] = '添加域名';
+$wb['domain_txt'] = '域名';
+$wb['client_txt'] = '客户';
+$wb['error_domain_in dnsuse'] = '该域名不能被删除,因为它正在用作DNS区域。';
+$wb['error_domain_in dnsslaveuse'] = '该域名不能被删除,因为它正在用作次要DNS区域。';
+$wb['error_domain_in mailuse'] = '该域名不能被删除,因为它正在用作邮件域名。';
+$wb['error_domain_in webuse'] = '该域名不能被删除,因为它正在用作网站域名。';
+$wb['error_client_can_not_add_domain'] = '您无法添加新域名。';
+$wb['domain_txt'] = '域名';
+$wb['error_client_group_id_empty'] = '您必须选择一个客户。';
+$wb['Email-Templates'] = '电子邮件模板';
+?>
diff --git a/interface/web/client/lib/lang/cn_client.lng b/interface/web/client/lib/lang/cn_client.lng
new file mode 100644
index 0000000000..0d477335a8
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client.lng
@@ -0,0 +1,210 @@
+<?php
+$wb['limit_maildomain_txt'] = '最大电子邮件域名数';
+$wb['limit_mailmailinglist_txt'] = '最大邮件列表数';
+$wb['limit_mailbox_txt'] = '最大邮箱数';
+$wb['limit_mailalias_txt'] = '最大邮件别名数';
+$wb['limit_mailaliasdomain_txt'] = '最大域名别名数';
+$wb['limit_mailforward_txt'] = '最大电子邮件转发器数';
+$wb['limit_mailcatchall_txt'] = '最大收件箱数';
+$wb['limit_mailrouting_txt'] = '最大邮件路由数';
+$wb['limit_mail_wblist_txt'] = '最大电子邮件白名单/黑名单条目数';
+$wb['limit_mailfilter_txt'] = '最大电子邮件过滤器数';
+$wb['limit_fetchmail_txt'] = '最大fetchmail帐户数';
+$wb['limit_mailquota_txt'] = '邮箱配额';
+$wb['limit_spamfilter_wblist_txt'] = '最大垃圾邮件过滤器白名单/黑名单数';
+$wb['limit_spamfilter_user_txt'] = '最大垃圾邮件过滤器用户数';
+$wb['limit_spamfilter_policy_txt'] = '最大垃圾邮件过滤器策略数';
+$wb['limit_mail_backup_txt'] = '可用电子邮件备份功能';
+$wb['default_mailserver_txt'] = '默认邮件服务器';
+$wb['company_name_txt'] = '公司名称';
+$wb['contact_firstname_txt'] = '联系人名字';
+$wb['contact_name_txt'] = '联系人姓氏';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['password_click_to_set_txt'] = '单击以设置';
+$wb['password_strength_txt'] = '密码强度';
+$wb['language_txt'] = '语言';
+$wb['usertheme_txt'] = '主题';
+$wb['street_txt'] = '街道';
+$wb['zip_txt'] = '邮编';
+$wb['city_txt'] = '城市';
+$wb['state_txt'] = 'å·ž';
+$wb['country_txt'] = '国家';
+$wb['telephone_txt'] = '电话';
+$wb['mobile_txt'] = '移动电话';
+$wb['fax_txt'] = '传真';
+$wb['email_txt'] = '电子邮件';
+$wb['internet_txt'] = '互联网';
+$wb['icq_txt'] = 'ICQ';
+$wb['notes_txt'] = '备注';
+$wb['company_txt'] = '公司';
+$wb['title_txt'] = '称谓';
+$wb['firstname_txt'] = '名字';
+$wb['surname_txt'] = '姓氏';
+$wb['limit_relayhost_txt'] = '显示SMTP中继主机选项';
+$wb['limit_domain_txt'] = '最大域名数量';
+$wb['limit_subdomain_txt'] = '最大子域名数量';
+$wb['limit_webquota_txt'] = '网站配额';
+$wb['limit_database_txt'] = '最大数据库数量';
+$wb['limit_cron_txt'] = '最大cron作业数量';
+$wb['limit_cron_type_txt'] = '最大允许的cron作业类型(chrooted和full意味着URL)';
+$wb['limit_cron_frequency_txt'] = '执行之间的最小延迟';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['limit_client_error_notint'] = '客户端限制不是数字。';
+$wb['firstname_error_empty'] = '名字为空。';
+$wb['contact_error_empty'] = '联系人姓名为空。';
+$wb['default_webserver_txt'] = '默认Web服务器';
+$wb['limit_web_domain_txt'] = '最大Web域名数量';
+$wb['limit_web_aliasdomain_txt'] = '最大Web别名域名数量';
+$wb['limit_web_subdomain_txt'] = '最大Web子域名数量';
+$wb['limit_ftp_user_txt'] = '最大FTP用户数量';
+$wb['default_dnsserver_txt'] = '默认DNS服务器';
+$wb['limit_dns_zone_txt'] = '最大DNS区域数量';
+$wb['limit_dns_slave_zone_txt'] = '最大DNS从区域数量';
+$wb['limit_dns_record_txt'] = '最大DNS记录数量';
+$wb['limit_shell_user_txt'] = '最大Shell用户数量';
+$wb['limit_webdav_user_txt'] = '最大Webdav用户数量';
+$wb['limit_backup_txt'] = '备份功能可用';
+$wb['limit_client_txt'] = '最大客户数';
+$wb['username_error_empty'] = '用户名为空。';
+$wb['username_error_unique'] = '用户名必须唯一。';
+$wb['limit_maildomain_error_notint'] = '电子邮件域限制必须为数字。';
+$wb['limit_mailmailinglist_error_notint'] = '邮件列表记录限制必须为数字。';
+$wb['limit_mailbox_error_notint'] = '邮箱限制必须为数字。';
+$wb['limit_mailalias_error_notint'] = '电子邮件别名限制必须为数字。';
+$wb['limit_mailaliasdomain_error_notint'] = '电子邮件域别名限制必须为数字。';
+$wb['limit_mailforward_error_notint'] = '电子邮件转发限制必须为数字。';
+$wb['limit_mailcatchall_error_notint'] = '电子邮件 catch-all 限制必须为数字。';
+$wb['limit_mailrouting_error_notint'] = '电子邮件路由限制必须为数字。';
+$wb['limit_mail_wblist_error_notint'] = '电子邮件白名单/黑名单限制必须为数字。';
+$wb['limit_mailfilter_error_notint'] = '电子邮件过滤器限制必须为数字。';
+$wb['limit_mailfetchmail_error_notint'] = 'fetchmail 限制必须为数字。';
+$wb['limit_mailquota_error_notint'] = '电子邮件配额限制必须为数字。';
+$wb['limit_spamfilter_wblist_error_notint'] = '垃圾邮件过滤器白名单/黑名单限制必须为数字。';
+$wb['limit_spamfilter_user_error_notint'] = '垃圾邮件过滤器用户限制必须为数字。';
+$wb['limit_spamfilter_policy_error_notint'] = '垃圾邮件过滤策略限制必须是一个数字。';
+$wb['limit_web_domain_error_notint'] = '网站限制必须是一个数字。';
+$wb['limit_web_aliasdomain_error_notint'] = '网站别名域限制必须是一个数字。';
+$wb['limit_web_subdomain_error_notint'] = '网站子域限制必须是一个数字。';
+$wb['limit_ftp_user_error_notint'] = 'FTP用户限制必须是一个数字。';
+$wb['limit_shell_user_error_notint'] = 'Shell用户限制必须是一个数字。';
+$wb['limit_webdav_user_error_notint'] = 'Webdav用户限制必须是一个数字。';
+$wb['limit_dns_zone_error_notint'] = 'DNS区域限制必须是一个数字。';
+$wb['limit_dns_slave_zone_error_notint'] = 'DNS从区域限制必须是一个数字。';
+$wb['limit_dns_record_error_notint'] = 'DNS记录限制必须是一个数字。';
+$wb['default_dbserver_txt'] = '默认数据库服务器';
+$wb['limit_database_txt'] = '最大数据库数量';
+$wb['limit_database_error_notint'] = '数据库限制必须是一个数字。';
+$wb['limit_cron_error_notint'] = 'Cron限制必须是一个数字。';
+$wb['limit_cron_error_frequency'] = 'Cron频率限制必须是一个数字。';
+$wb['username_error_regex'] = '用户名包含无效字符。';
+$wb['template_master_txt'] = '主模板';
+$wb['template_additional_txt'] = '附加模板';
+$wb['active_template_additional_txt'] = '活动附加模板';
+$wb['add_additional_template_txt'] = '添加附加模板';
+$wb['delete_additional_template_txt'] = '删除附加模板';
+$wb['ssh_chroot_txt'] = 'SSH-Chroot选项';
+$wb['web_php_options_txt'] = 'PHP选项';
+$wb['limit_cgi_txt'] = '可用CGI';
+$wb['limit_ssi_txt'] = '可用SSI';
+$wb['limit_perl_txt'] = '可用Perl';
+$wb['limit_ruby_txt'] = '可用Ruby';
+$wb['limit_python_txt'] = '可用Python';
+$wb['force_suexec_txt'] = '强制使用SuEXEC';
+$wb['limit_hterror_txt'] = '可用自定义错误页面';
+$wb['limit_wildcard_txt'] = '可用通配符子域名';
+$wb['limit_ssl_txt'] = '可用SSL';
+$wb['limit_ssl_letsencrypt_txt'] = '可使用Let\'s Encrypt';
+$wb['limit_client_error'] = '已达到最大客户端数量';
+$wb['limit_web_quota_txt'] = 'Web配额';
+$wb['limit_traffic_quota_txt'] = '流量配额';
+$wb['limit_trafficquota_error_notint'] = '流量配额必须为数字';
+$wb['customer_no_txt'] = '客户编号';
+$wb['vat_id_txt'] = '增值税号';
+$wb['required_fields_txt'] = '* 必填项';
+$wb['company_id_txt'] = '公司/企业ID';
+$wb['limit_openvz_vm_txt'] = '最大虚拟服务器数量';
+$wb['limit_openvz_vm_template_id_txt'] = '强制虚拟服务器模板';
+$wb['limit_openvz_vm_error_notint'] = '虚拟服务器限制必须为数字';
+$wb['web_php_options_notempty'] = '未选择PHP选项。请选择至少一个PHP选项。';
+$wb['ssh_chroot_notempty'] = '未选择SSH chroot选项。请选择至少一个选项。';
+$wb['username_error_collision'] = '用户名不能以“-web-”或“-web-”后跟一个数字开头。';
+$wb['bank_account_number_txt'] = '银行账号';
+$wb['bank_account_owner_txt'] = '银行账号持有人';
+$wb['bank_code_txt'] = '银行代码';
+$wb['bank_name_txt'] = '银行名称';
+$wb['bank_account_iban_txt'] = 'IBAN';
+$wb['bank_account_swift_txt'] = 'BIC / Swift';
+$wb['web_limits_txt'] = '网站限制';
+$wb['email_limits_txt'] = '邮件限制';
+$wb['xmpp_limits_txt'] = 'XMPP限制';
+$wb['database_limits_txt'] = '数据库限制';
+$wb['cron_job_limits_txt'] = '计划任务限制';
+$wb['dns_limits_txt'] = 'DNS限制';
+$wb['virtualization_limits_txt'] = '虚拟化限制';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['email_error_isemail'] = '请输入有效的电子邮件地址。';
+$wb['customer_no_error_unique'] = '客户编号必须唯一(或为空)。';
+$wb['paypal_email_error_isemail'] = '请输入有效的PayPal电子邮件地址。';
+$wb['paypal_email_txt'] = 'PayPal电子邮件';
+$wb['err_msg_master_tpl_set'] = '如果选择了“自定义”以外的任何主模板,则所有自定义限制设置都将被忽略。';
+$wb['aps_limits_txt'] = 'APS安装器限制';
+$wb['limit_aps_txt'] = '最大APS实例数';
+$wb['limit_aps_error_notint'] = 'APS实例限制必须是数字。';
+$wb['default_slave_dnsserver_txt'] = '默认次要DNS服务器';
+$wb['locked_txt'] = '已锁定(禁用除DNS以外的所有内容)';
+$wb['canceled_txt'] = '已取消(禁用客户端登录)';
+$wb['gender_txt'] = '称谓';
+$wb['gender_m_txt'] = '先生';
+$wb['gender_f_txt'] = '女士';
+$wb['web_servers_txt'] = 'Web服务器';
+$wb['web_servers_placeholder'] = '选择Web服务器';
+$wb['no_web_server_error'] = '必须选择至少一个Web服务器。';
+$wb['web_servers_used'] = '您试图从此客户端中删除的服务器正在用作Web服务器。在删除之前,请确保此服务器未被此客户端使用。';
+$wb['dns_servers_txt'] = 'DNS服务器';
+$wb['dns_servers_placeholder'] = '选择DNS服务器';
+$wb['no_dns_server_error'] = '至少需要选择一个DNS服务器。';
+$wb['dns_servers_used'] = '您正在尝试从此客户端中删除的服务器用作DNS服务器。请确保在删除之前该服务器未被此客户端使用。';
+$wb['db_servers_txt'] = '数据库服务器';
+$wb['db_servers_placeholder'] = '选择数据库服务器';
+$wb['no_db_server_error'] = '至少需要选择一个数据库服务器。';
+$wb['db_servers_used'] = '您正在尝试从此客户端中删除的服务器用作数据库服务器。请确保在删除之前该服务器未被此客户端使用。';
+$wb['mail_servers_txt'] = '邮件服务器';
+$wb['mail_servers_placeholder'] = '选择邮件服务器';
+$wb['no_mail_server_error'] = '至少需要选择一个邮件服务器。';
+$wb['mail_servers_used'] = '您正在尝试从此客户端中删除的服务器用作邮件服务器。请确保在删除之前该服务器未被此客户端使用。';
+
+$wb['xmpp_servers_txt'] = 'XMPP 服务器';
+$wb['xmpp_servers_placeholder'] = '选择 XMPP 服务器';
+$wb['no_xmpp_server_error'] = '至少要选择一个 XMPP 服务器。';
+$wb['xmpp_servers_used'] = '您正在尝试从此客户端中删除的服务器用作 XMPP 服务器。在删除之前,请确保此服务器未被此客户端使用。';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP 域限制必须是数字。';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP 用户限制必须是数字。';
+$wb['limit_xmpp_domain_txt'] = '最大 XMPP 域数';
+$wb['limit_xmpp_user_txt'] = '最大 XMPP 帐户数';
+$wb['limit_xmpp_muc_txt'] = '支持多用户聊天室';
+$wb['limit_xmpp_pastebin_txt'] = '支持 MUC 的 Pastebin';
+$wb['limit_xmpp_httparchive_txt'] = '支持 MUC 的 HTTP 存档';
+$wb['limit_xmpp_anon_txt'] = '匿名主机可用';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD 用户目录可用';
+$wb['limit_xmpp_proxy_txt'] = '字节流代理可用';
+$wb['limit_xmpp_status_txt'] = '状态主机可用';
+$wb['added_by_txt'] = '添加者';
+$wb['added_date_txt'] = '添加日期';
+$wb['parent_client_id_txt'] = '代理商的客户端';
+$wb['none_txt'] = 'æ— ';
+$wb['limit_database_quota_txt'] = '数据库配额';
+$wb['limit_database_quota_error_notint'] = '数据库配额限制必须是数字。';
+$wb['limit_database_user_txt'] = '最大数据库用户数';
+$wb['limit_database_user_error_notint'] = '数据库用户限制必须是数字。';
+$wb['reseller_txt'] = '代理商';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['invalid_vat_id'] = '无效的增值税号码。';
+$wb['email_error_empty'] = '电子邮件为空';
+$wb['limit_directive_snippets_txt'] = '显示 Web 服务器配置选择';
+$wb['Address'] = '地址';
+$wb['Limits'] = '限制';
diff --git a/interface/web/client/lib/lang/cn_client_circle.lng b/interface/web/client/lib/lang/cn_client_circle.lng
new file mode 100644
index 0000000000..58248c843e
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_circle.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['Client Circle'] = '客户循环';
+$wb['Circle'] = '循环';
+$wb['circle_txt'] = '循环';
+$wb['circle_name_txt'] = '循环名称';
+$wb['client_ids_txt'] = '客户/代理商';
+$wb['description_txt'] = '描述';
+$wb['active_txt'] = '激活';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_circle_list.lng b/interface/web/client/lib/lang/cn_client_circle_list.lng
new file mode 100644
index 0000000000..2fbf762682
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_circle_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '客户圈';
+$wb['circle_id_txt'] = '圈ID';
+$wb['circle_name_txt'] = '圈名';
+$wb['description_txt'] = '描述';
+$wb['add_new_record_txt'] = '添加新圈';
+$wb['filter_txt'] = '筛选';
+$wb['delete_txt'] = '删除';
+$wb['active_txt'] = '活跃';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_del.lng b/interface/web/client/lib/lang/cn_client_del.lng
new file mode 100644
index 0000000000..5598db2e34
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_del.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['confirm_action_txt'] = '确认操作';
+$wb['delete_explanation'] = '此操作将删除与此客户相关联的以下记录数量';
+$wb['btn_save_txt'] = '删除客户';
+$wb['btn_cancel_txt'] = '取消删除客户';
+$wb['confirm_client_delete_txt'] = '您确定要删除此客户吗?';
+$wb['list_head_txt'] = '删除客户';
+$wb['table_txt'] = '表格';
+$wb['data_txt'] = '数据';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_message.lng b/interface/web/client/lib/lang/cn_client_message.lng
new file mode 100644
index 0000000000..080ca70cdd
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_message.lng
@@ -0,0 +1,20 @@
+<?php
+$wb['page_head_txt'] = '向客户和经销商发送电子邮件';
+$wb['btn_send_txt'] = '发送电子邮件';
+$wb['btn_cancel_txt'] = '取消';
+$wb['sender_txt'] = '发件人电子邮件地址';
+$wb['subject_txt'] = '主题';
+$wb['message_txt'] = '信息';
+$wb['form_legend_client_txt'] = '向客户发送电子邮件。';
+$wb['form_legend_admin_txt'] = '向客户和经销商发送电子邮件。';
+$wb['sender_invalid_error'] = '发件人电子邮件无效。';
+$wb['subject_invalid_error'] = '主题为空。';
+$wb['message_invalid_error'] = '信息为空。';
+$wb['email_sent_to_txt'] = '电子邮件发送至:';
+$wb['recipient_txt'] = '收件人';
+$wb['all_clients_resellers_txt'] = '所有客户和经销商';
+$wb['all_clients_txt'] = '所有客户';
+$wb['variables_txt'] = '变量:';
+$wb['gender_m_txt'] = '先生';
+$wb['gender_f_txt'] = '女士';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_message_template.lng b/interface/web/client/lib/lang/cn_client_message_template.lng
new file mode 100644
index 0000000000..7ec95daad1
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_message_template.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['template_type_txt'] = '电子邮件类型';
+$wb['template_name_txt'] = '模板名称';
+$wb['subject_txt'] = '主题';
+$wb['message_txt'] = '消息';
+$wb['Email template'] = '电子邮件模板';
+$wb['Settings'] = '设置';
+$wb['variables_txt'] = '变量';
+$wb['variables_description_txt'] = '(用户名和密码变量仅在欢迎电子邮件中可用。)';
+$wb['duplicate_welcome_error'] = '只能有一个默认的欢迎电子邮件模板。请编辑现有模板,而不是添加新模板。';
+$wb['subject_error_empty'] = '主题为空';
+$wb['message_error_empty'] = '消息为空';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_message_template_list.lng b/interface/web/client/lib/lang/cn_client_message_template_list.lng
new file mode 100644
index 0000000000..8e6fbaf90e
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_message_template_list.lng
@@ -0,0 +1,5 @@
+<?php
+$wb['list_head_txt'] = 'Email 模板';
+$wb['template_type_txt'] = '消息类型';
+$wb['template_name_txt'] = '模板类型';
+?>
diff --git a/interface/web/client/lib/lang/cn_client_template.lng b/interface/web/client/lib/lang/cn_client_template.lng
new file mode 100644
index 0000000000..1e4eace66f
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_template.lng
@@ -0,0 +1,131 @@
+<?php
+$wb['ssh_chroot_notempty'] = '未选择SSH chroot选项。请选择至少一个选项。';
+$wb['template_type_txt'] = '模板类型';
+$wb['template_name_txt'] = '模板名称';
+$wb['limit_client_error_notint'] = '客户限制不是数字。';
+$wb['limit_mail_backup_txt'] = '可用电子邮件备份功能';
+$wb['default_mailserver_txt'] = '默认邮件服务器';
+$wb['limit_maildomain_txt'] = '最大电子邮件域名数';
+$wb['limit_mailbox_txt'] = '最大邮箱数';
+$wb['limit_mailalias_txt'] = '最大电子邮件别名数';
+$wb['limit_mailaliasdomain_txt'] = '最大域别名数';
+$wb['limit_mailmailinglist_txt'] = '最大邮件列表数';
+$wb['limit_mailforward_txt'] = '最大电子邮件转发数';
+$wb['limit_mailcatchall_txt'] = '最大电子邮件全接收账户数';
+$wb['limit_mailrouting_txt'] = '最大电子邮件路由数';
+$wb['limit_mail_wblist_txt'] = '最大电子邮件白/黑名单条目数';
+$wb['limit_mailfilter_txt'] = '最大电子邮件过滤器数';
+$wb['limit_fetchmail_txt'] = '最大fetchmail账户数';
+$wb['limit_mailquota_txt'] = '邮箱配额';
+$wb['limit_spamfilter_wblist_txt'] = '最大垃圾邮件过滤器白/黑名单数';
+$wb['limit_spamfilter_user_txt'] = '最大垃圾邮件过滤器用户数';
+$wb['limit_spamfilter_policy_txt'] = '最大垃圾邮件过滤器策略数';
+$wb['limit_relayhost_txt'] = '显示SMTP中继主机选项';
+$wb['limit_domain_txt'] = 'limit_domain';
+$wb['limit_subdomain_txt'] = 'limit_subdomain';
+$wb['limit_webquota_txt'] = 'limit_webquota';
+$wb['limit_database_txt'] = 'limit_database';
+$wb['limit_cron_txt'] = '最大计划任务数';
+$wb['limit_cron_type_txt'] = '最大的计划任务类型数量(chrooted和full表示url)';
+$wb['limit_cron_frequency_txt'] = '执行之间的最小延迟时间';
+$wb['default_webserver_txt'] = '默认Web服务器';
+$wb['limit_web_domain_txt'] = '最大的网站域名数量';
+$wb['limit_web_aliasdomain_txt'] = '最大的网站别名域名数量';
+$wb['limit_web_subdomain_txt'] = '最大的网站子域名数量';
+$wb['limit_ftp_user_txt'] = '最大的FTP用户数量';
+$wb['default_dnsserver_txt'] = '默认DNS服务器';
+$wb['limit_dns_zone_txt'] = '最大的DNS区域数量';
+$wb['default_slave_dnsserver_txt'] = '默认辅助DNS服务器';
+$wb['limit_dns_slave_zone_txt'] = '最大的辅助DNS区域数量';
+$wb['limit_dns_record_txt'] = '最大的DNS记录数量';
+$wb['limit_shell_user_txt'] = '最大的Shell用户数量';
+$wb['limit_webdav_user_txt'] = '最大的Webdav用户数量';
+$wb['limit_backup_txt'] = '可用备份功能';
+$wb['limit_client_txt'] = '最大的客户端数量';
+$wb['limit_maildomain_error_notint'] = '邮件域名限制必须是数字。';
+$wb['limit_mailmailinglist_error_notint'] = '邮件列表记录限制必须是数字。';
+$wb['limit_mailbox_error_notint'] = '邮箱限制必须是数字。';
+$wb['limit_mailalias_error_notint'] = '电子邮件别名限制必须是数字。';
+$wb['limit_mailaliasdomain_error_notint'] = '电子邮件域名别名限制必须是数字。';
+$wb['limit_mailforward_error_notint'] = '电子邮件转发限制必须是数字。';
+$wb['limit_mailcatchall_error_notint'] = '电子邮件全收件箱限制必须是数字。';
+$wb['limit_mailrouting_error_notint'] = '电子邮件路由限制必须是数字。';
+$wb['limit_mail_wblist_error_notint'] = '电子邮件白名单/黑名单限制必须是数字。';
+$wb['limit_mailfilter_error_notint'] = '电子邮件过滤器限制必须是数字。';
+$wb['limit_mailfetchmail_error_notint'] = 'fetchmail限制必须是数字。';
+$wb['limit_mailquota_error_notint'] = '电子邮件配额限制必须是数字。';
+$wb['limit_spamfilter_wblist_error_notint'] = '垃圾邮件过滤器白名单/黑名单限制必须是数字。';
+$wb['limit_spamfilter_user_error_notint'] = '垃圾邮件过滤器用户限制必须是数字。';
+$wb['limit_spamfilter_policy_error_notint'] = '垃圾邮件过滤器策略限制必须是数字。';
+$wb['limit_web_domain_error_notint'] = '网站限制必须为数字。';
+$wb['limit_web_aliasdomain_error_notint'] = '网站别名域限制必须为数字。';
+$wb['limit_web_subdomain_error_notint'] = '网站子域名限制必须为数字。';
+$wb['limit_ftp_user_error_notint'] = 'FTP用户限制必须为数字。';
+$wb['limit_shell_user_error_notint'] = 'Shell用户限制必须为数字。';
+$wb['limit_webdav_user_error_notint'] = 'Webdav用户限制必须为数字。';
+$wb['limit_dns_zone_error_notint'] = 'DNS区域限制必须为数字。';
+$wb['limit_dns_slave_zone_error_notint'] = 'DNS从属区域限制必须为数字。';
+$wb['limit_dns_record_error_notint'] = 'DNS记录限制必须为数字。';
+$wb['default_dbserver_txt'] = '默认数据库服务器';
+$wb['limit_database_txt'] = '数据库最大数量';
+$wb['limit_database_error_notint'] = '数据库限制必须为数字。';
+$wb['limit_cron_error_notint'] = 'Cron任务限制必须为数字。';
+$wb['limit_cron_error_frequency'] = 'Cron频率限制必须为数字。';
+$wb['error_template_name_empty'] = '请输入模板名称';
+$wb['limit_web_quota_txt'] = '网站配额';
+$wb['limit_traffic_quota_txt'] = '流量配额';
+$wb['limit_trafficquota_error_notint'] = '流量配额必须为数字。';
+$wb['template_del_aborted_txt'] = '删除中止。仍然有客户端选择了此模板。';
+$wb['limit_openvz_vm_txt'] = '虚拟服务器最大数量';
+$wb['limit_openvz_vm_template_id_txt'] = '强制使用虚拟服务器模板';
+$wb['limit_openvz_vm_error_notint'] = '虚拟服务器限制必须为数字。';
+$wb['ssh_chroot_txt'] = 'SSH-Chroot选项';
+$wb['web_php_options_txt'] = 'PHP选项';
+$wb['limit_cgi_txt'] = '可用CGI';
+$wb['limit_ssi_txt'] = '可用SSI';
+$wb['limit_perl_txt'] = '可用Perl';
+$wb['limit_ruby_txt'] = '可用Ruby';
+$wb['limit_python_txt'] = '可用Python';
+$wb['force_suexec_txt'] = '强制使用SuEXEC';
+$wb['limit_hterror_txt'] = '可用自定义错误文档';
+$wb['limit_wildcard_txt'] = '可用通配符子域名';
+$wb['limit_ssl_txt'] = '可用SSL';
+$wb['limit_ssl_letsencrypt_txt'] = '可用Let\'s Encrypt';
+$wb['web_limits_txt'] = '网站限制';
+$wb['email_limits_txt'] = '电子邮件限制';
+$wb['database_limits_txt'] = '数据库限制';
+$wb['cron_job_limits_txt'] = 'Cron任务限制';
+$wb['dns_limits_txt'] = 'DNS 限制';
+$wb['virtualization_limits_txt'] = '虚拟化限制';
+$wb['aps_limits_txt'] = 'APS 安装限制';
+$wb['limit_aps_txt'] = '最大 APS 实例数';
+$wb['limit_aps_error_notint'] = 'APS 实例限制必须是数字。';
+$wb['limit_domainmodule_txt'] = 'Domainmodule 限制';
+$wb['client_limits_txt'] = '客户端限制';
+$wb['limit_database_quota_txt'] = '数据库配额';
+$wb['limit_database_quota_error_notint'] = '数据库配额限制必须是数字。';
+$wb['xmpp_limits_txt'] = 'XMPP 限制';
+$wb['xmpp_servers_txt'] = 'XMPP 服务器';
+$wb['xmpp_servers_placeholder'] = '选择 XMPP 服务器';
+$wb['no_xmpp_server_error'] = '至少需要选择一个 XMPP 服务器。';
+$wb['xmpp_servers_used'] = '您正在尝试从此客户端中删除的服务器用作 XMPP 服务器。请确保在删除之前此服务器未被此客户端使用。';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP 域限制必须是数字。';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP 用户限制必须是数字。';
+$wb['limit_xmpp_domain_txt'] = '最大 XMPP 域数';
+$wb['limit_xmpp_user_txt'] = '最大 XMPP 帐户数';
+$wb['limit_xmpp_muc_txt'] = '多用户聊天可用';
+$wb['limit_xmpp_pastebin_txt'] = 'MUC 中的粘贴板可用';
+$wb['limit_xmpp_httparchive_txt'] = 'MUC 中的 HTTP 存档可用';
+$wb['limit_xmpp_anon_txt'] = '匿名主机可用';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD 用户目录可用';
+$wb['limit_xmpp_proxy_txt'] = '字节流代理可用';
+$wb['limit_xmpp_status_txt'] = '状态主机可用';
+$wb['dns_servers_txt'] = 'DNS 服务器';
+$wb['limit_directive_snippets_txt'] = '显示 Web 服务器配置选择';
+$wb['limit_database_user_txt'] = '最大数据库用户数';
+$wb['web_servers_txt'] = 'Web 服务器';
+$wb['dns_servers_txt'] = 'DNS 服务器';
+$wb['xmpp_servers_txt'] = 'XMPP 服务器';
+$wb['db_servers_txt'] = '数据库服务器';
+$wb['mail_servers_txt'] = '邮件服务器';
+$wb['Limits'] = '限制';
diff --git a/interface/web/client/lib/lang/cn_client_template_list.lng b/interface/web/client/lib/lang/cn_client_template_list.lng
new file mode 100644
index 0000000000..8fb3dccd1d
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_client_template_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '客户和分销商模板';
+$wb['template_type_txt'] = '类型';
+$wb['template_name_txt'] = '模板名称';
+$wb['template_id_txt'] = '模板ID';
+$wb['sys_groupid_txt'] = '分销商';
+?>
diff --git a/interface/web/client/lib/lang/cn_clients_list.lng b/interface/web/client/lib/lang/cn_clients_list.lng
new file mode 100644
index 0000000000..c12c0f7009
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_clients_list.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['list_head_txt'] = '客户';
+$wb['client_id_txt'] = 'ID';
+$wb['company_name_txt'] = '公司名称';
+$wb['contact_name_txt'] = '联系人姓名';
+$wb['username_txt'] = '用户名';
+$wb['city_txt'] = '城市';
+$wb['country_txt'] = '国家';
+$wb['add_new_record_txt'] = '添加新客户';
+$wb['customer_no_txt'] = '客户编号';
+$wb['locked_txt'] = '已锁定';
+$wb['yes_txt'] = '是';
+$wb['no_txt'] = '否';
+?>
diff --git a/interface/web/client/lib/lang/cn_domain.lng b/interface/web/client/lib/lang/cn_domain.lng
new file mode 100644
index 0000000000..dbdac298a6
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_domain.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['domain_error_empty'] = '域名为空';
+$wb['domain_error_unique'] = '域名已存在';
+$wb['domain_error_regex'] = '该域名不被允许';
+$wb['Domain'] = '域名';
+?>
diff --git a/interface/web/client/lib/lang/cn_domain_list.lng b/interface/web/client/lib/lang/cn_domain_list.lng
new file mode 100644
index 0000000000..8eed884ad9
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_domain_list.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['list_head_txt'] = '域名列表';
+$wb['add_new_record_txt'] = '添加新域名';
+$wb['domain_txt'] = '域名';
+$wb['user_txt'] = '客户';
+?>
diff --git a/interface/web/client/lib/lang/cn_reseller.lng b/interface/web/client/lib/lang/cn_reseller.lng
new file mode 100644
index 0000000000..0f002ddc2d
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_reseller.lng
@@ -0,0 +1,216 @@
+<?php
+$wb['limit_maildomain_txt'] = '最大邮件域名数';
+$wb['limit_mailmailinglist_txt'] = '最大邮件列表数';
+$wb['limit_mailbox_txt'] = '最大邮箱数';
+$wb['limit_mailalias_txt'] = '最大邮件别名数';
+$wb['limit_mailaliasdomain_txt'] = '最大域名别名数';
+$wb['limit_mailforward_txt'] = '最大邮件转发数';
+$wb['limit_mailcatchall_txt'] = '最大邮件全收账户数';
+$wb['limit_mailrouting_txt'] = '最大邮件路由数';
+$wb['limit_mail_wblist_txt'] = '最大邮件白名单 / 黑名单数';
+$wb['limit_mailfilter_txt'] = '最大邮件过滤器数';
+$wb['limit_fetchmail_txt'] = '最大fetchmail账户数';
+$wb['limit_mailquota_txt'] = '邮箱配额';
+$wb['limit_spamfilter_wblist_txt'] = '最大垃圾邮件过滤白名单 / 黑名单数';
+$wb['limit_spamfilter_user_txt'] = '最大垃圾邮件过滤用户数';
+$wb['limit_spamfilter_policy_txt'] = '最大垃圾邮件过滤策略数';
+$wb['limit_mail_backup_txt'] = '邮件备份功能可用';
+$wb['default_mailserver_txt'] = '默认邮件服务器';
+$wb['company_name_txt'] = '公司名称';
+$wb['contact_firstname_txt'] = '联系人名字';
+$wb['contact_name_txt'] = '联系人姓氏';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['password_click_to_set_txt'] = '点击设置';
+$wb['password_strength_txt'] = '密码强度';
+$wb['language_txt'] = '语言';
+$wb['usertheme_txt'] = '主题';
+$wb['street_txt'] = '街道';
+$wb['zip_txt'] = '邮政编码';
+$wb['city_txt'] = '城市';
+$wb['state_txt'] = '州 / 省';
+$wb['country_txt'] = '国家';
+$wb['telephone_txt'] = '电话';
+$wb['mobile_txt'] = '手机';
+$wb['fax_txt'] = '传真';
+$wb['email_txt'] = '电子邮件';
+$wb['internet_txt'] = '互联网';
+$wb['icq_txt'] = 'ICQ';
+$wb['notes_txt'] = '注释';
+$wb['company_txt'] = '公司';
+$wb['title_txt'] = '称谓';
+$wb['firstname_txt'] = '名字';
+$wb['surname_txt'] = '姓氏';
+$wb['limit_relayhost_txt'] = '显示SMTP中继主机选项';
+$wb['limit_domain_txt'] = '域名限制';
+$wb['limit_subdomain_txt'] = '子域名限制';
+$wb['limit_webquota_txt'] = 'Web配额限制';
+$wb['limit_database_txt'] = '数据库限制';
+$wb['limit_database_user_txt'] = '最大数据库用户数';
+$wb['limit_cron_txt'] = '最大cron作业数';
+$wb['limit_cron_type_txt'] = '最大cron作业类型数(chrooted和full意味着url)';
+$wb['limit_cron_frequency_txt'] = '执行之间的最小延迟';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['limit_client_error_notint'] = '客户端限制不是数字。';
+$wb['firstname_error_empty'] = '名字为空。';
+$wb['contact_error_empty'] = '联系人名字为空。';
+$wb['default_webserver_txt'] = '默认Web服务器';
+$wb['limit_web_domain_txt'] = '最大Web域数';
+$wb['limit_web_aliasdomain_txt'] = '最大Web别名域数';
+$wb['limit_web_subdomain_txt'] = '最大Web子域数';
+$wb['limit_ftp_user_txt'] = '最大FTP用户数';
+$wb['default_dnsserver_txt'] = '默认DNS服务器';
+$wb['limit_dns_zone_txt'] = '最大DNS区域数';
+$wb['limit_dns_slave_zone_txt'] = '最大DNS从属区域数';
+$wb['limit_dns_record_txt'] = '最大DNS记录数';
+$wb['limit_shell_user_txt'] = '最大Shell用户数';
+$wb['limit_webdav_user_txt'] = '最大Webdav用户数';
+$wb['limit_backup_txt'] = '备份功能可用';
+$wb['limit_client_txt'] = '最大客户端数';
+$wb['username_error_empty'] = '用户名为空。';
+$wb['username_error_unique'] = '用户名必须唯一。';
+$wb['limit_maildomain_error_notint'] = '电子邮件域名限制必须是数字。';
+$wb['limit_mailmailinglist_error_notint'] = '邮件列表记录限制必须是数字。';
+$wb['limit_mailbox_error_notint'] = '邮箱限制必须是数字。';
+$wb['limit_mailalias_error_notint'] = '邮件别名限制必须是一个数字。';
+$wb['limit_mailforward_error_notint'] = '邮件转发限制必须是一个数字。';
+$wb['limit_mailcatchall_error_notint'] = '邮件 catchall 限制必须是一个数字。';
+$wb['limit_mailrouting_error_notint'] = '邮件路由限制必须是一个数字。';
+$wb['limit_mail_wblist_error_notint'] = '邮件白名单/黑名单限制必须是一个数字。';
+$wb['limit_mailfilter_error_notint'] = '邮件过滤器限制必须是一个数字。';
+$wb['limit_mailfetchmail_error_notint'] = 'fetchmail 限制必须是一个数字。';
+$wb['limit_mailquota_error_notint'] = '邮件配额限制必须是一个数字。';
+$wb['limit_spamfilter_wblist_error_notint'] = '垃圾邮件过滤白名单/黑名单限制必须是一个数字。';
+$wb['limit_spamfilter_user_error_notint'] = '垃圾邮件过滤用户限制必须是一个数字。';
+$wb['limit_spamfilter_policy_error_notint'] = '垃圾邮件过滤策略限制必须是一个数字。';
+$wb['limit_web_domain_error_notint'] = '网站限制必须是一个数字。';
+$wb['limit_web_aliasdomain_error_notint'] = '网站别名域名限制必须是一个数字。';
+$wb['limit_web_subdomain_error_notint'] = '网站子域名限制必须是一个数字。';
+$wb['limit_ftp_user_error_notint'] = 'FTP 用户限制必须是一个数字。';
+$wb['limit_webdav_user_error_notint'] = 'WebDAV 用户限制必须是一个数字。';
+$wb['limit_shell_user_error_notint'] = 'Shell 用户限制必须是一个数字。';
+$wb['limit_dns_zone_error_notint'] = 'DNS 区域限制必须是一个数字。';
+$wb['limit_dns_slave_zone_error_notint'] = 'DNS 从区域限制必须是一个数字。';
+$wb['limit_dns_record_error_notint'] = 'DNS 记录限制必须是一个数字。';
+$wb['limit_client_error_notint'] = '子客户端限制必须是一个数字。';
+$wb['default_dbserver_txt'] = '默认数据库服务器';
+$wb['limit_database_txt'] = '最大数据库数';
+$wb['limit_database_error_notint'] = '数据库限制必须是一个数字。';
+$wb['limit_cron_error_notint'] = '计划任务限制必须是一个数字。';
+$wb['limit_cron_error_frequency'] = '计划任务频率限制必须是一个数字。';
+$wb['username_error_regex'] = '用户名包含无效字符。';
+$wb['template_master_txt'] = '主模板';
+$wb['template_additional_txt'] = '附加模板';
+$wb['add_additional_template_txt'] = '添加额外模板';
+$wb['delete_additional_template_txt'] = '删除额外模板';
+$wb['ssh_chroot_txt'] = 'SSH-Chroot选项';
+$wb['web_php_options_txt'] = 'PHP选项';
+$wb['limit_cgi_txt'] = '可用CGI';
+$wb['limit_ssi_txt'] = '可用SSI';
+$wb['limit_perl_txt'] = '可用Perl';
+$wb['limit_ruby_txt'] = '可用Ruby';
+$wb['limit_python_txt'] = '可用Python';
+$wb['force_suexec_txt'] = '强制SuEXEC';
+$wb['limit_hterror_txt'] = '自定义错误文档可用';
+$wb['limit_wildcard_txt'] = '通配符子域名可用';
+$wb['limit_ssl_txt'] = '可用SSL';
+$wb['limit_ssl_letsencrypt_txt'] = '可用Let\'s Encrypt';
+$wb['limit_client_error'] = '达到最大客户数。';
+$wb['limit_client_error_positive_or_unlimited'] = '客户数量必须> 0或-1(无限制)';
+$wb['limit_web_quota_txt'] = 'Web配额';
+$wb['limit_traffic_quota_txt'] = '流量配额';
+$wb['limit_trafficquota_error_notint'] = '流量配额必须是数字。';
+$wb['customer_no_txt'] = '客户编号';
+$wb['vat_id_txt'] = '增值税编号';
+$wb['required_fields_txt'] = '*必填字段';
+$wb['limit_openvz_vm_txt'] = '最大虚拟服务器数';
+$wb['limit_openvz_vm_template_id_txt'] = '强制虚拟服务器模板';
+$wb['limit_openvz_vm_error_notint'] = '虚拟服务器限制必须是数字。';
+$wb['web_php_options_notempty'] = '未选择PHP选项。请选择至少一个PHP选项。';
+$wb['ssh_chroot_notempty'] = '未选择SSH chroot选项。请选择至少一个选项。';
+$wb['username_error_collision'] = '用户名不能以-web-或-web-后跟数字开头。';
+$wb['web_limits_txt'] = 'Web限制';
+$wb['email_limits_txt'] = '电子邮件限制';
+$wb['database_limits_txt'] = '数据库限制';
+$wb['cron_job_limits_txt'] = '计划任务限制';
+$wb['dns_limits_txt'] = 'DNS限制';
+$wb['virtualization_limits_txt'] = '虚拟化限制';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['email_error_isemail'] = '请输入有效的电子邮件地址。';
+$wb['customer_no_error_unique'] = '客户编号必须唯一(或为空)。';
+$wb['paypal_email_error_isemail'] = '请输入有效的PayPal电子邮件地址。';
+$wb['paypal_email_txt'] = 'PayPal电子邮件';
+$wb['company_id_txt'] = '公司/企业ID';
+$wb['bank_account_number_txt'] = '银行账号';
+$wb['bank_account_owner_txt'] = '银行账户所有者';
+$wb['bank_code_txt'] = '银行代码';
+$wb['bank_name_txt'] = '银行名称';
+$wb['bank_account_iban_txt'] = 'IBAN';
+$wb['bank_account_swift_txt'] = 'BIC/Swift';
+$wb['aps_limits_txt'] = 'APS安装器限制';
+$wb['limit_aps_txt'] = '最大APS实例数';
+$wb['limit_aps_error_notint'] = 'APS实例限制必须是数字。';
+$wb['default_slave_dnsserver_txt'] = '默认次要DNS服务器';
+$wb['locked_txt'] = '已锁定';
+$wb['canceled_txt'] = '已取消';
+$wb['gender_m_txt'] = '先生';
+$wb['gender_f_txt'] = '女士';
+$wb['gender_txt'] = '称呼';
+$wb['web_servers_txt'] = 'Web服务器';
+$wb['web_servers_placeholder'] = '选择Web服务器';
+$wb['no_web_server_error'] = '至少必须选择一个Web服务器。';
+$wb['web_servers_used'] = '您正在尝试从此客户端中删除的服务器用作Web服务器。请确保在删除之前,此服务器未被此客户端使用。';
+$wb['dns_servers_txt'] = 'DNS服务器';
+$wb['dns_servers_placeholder'] = '选择DNS服务器';
+$wb['no_dns_server_error'] = '至少必须选择一个DNS服务器。';
+$wb['dns_servers_used'] = '您正在尝试从此客户端中删除的服务器用作DNS服务器。请确保在删除之前,此服务器未被此客户端使用。';
+$wb['db_servers_txt'] = '数据库服务器';
+$wb['db_servers_placeholder'] = '选择数据库服务器';
+$wb['no_db_server_error'] = '至少必须选择一个数据库服务器。';
+$wb['db_servers_used'] = '您正在尝试从此客户端中删除的服务器用作数据库服务器。请确保在删除之前,此服务器未被此客户端使用。';
+$wb['mail_servers_txt'] = '邮件服务器';
+$wb['mail_servers_placeholder'] = '选择邮件服务器';
+$wb['no_mail_server_error'] = '至少必须选择一个邮件服务器。';
+$wb['mail_servers_used'] = '您尝试从此客户端中删除的服务器正在用作邮件服务器。请确保在删除之前此服务器未被此客户端使用。';
+$wb['customer_no_template_txt'] = '客户编号模板';
+$wb['customer_no_template_error_regex_txt'] = '客户编号模板包含无效字符。';
+$wb['customer_no_start_txt'] = '客户编号起始值';
+$wb['customer_no_counter_txt'] = '客户编号计数器';
+
+$wb['xmpp_limits_txt'] = 'XMPP 限制';
+$wb['xmpp_servers_txt'] = 'XMPP 服务器';
+$wb['xmpp_servers_placeholder'] = '选择 XMPP 服务器';
+$wb['no_xmpp_server_error'] = '必须选择至少一个 XMPP 服务器。';
+$wb['xmpp_servers_used'] = '您正在尝试从此客户端中删除的服务器被用作 XMPP 服务器。在删除之前,请确保该服务器未被此客户端使用。';
+$wb['limit_xmpp_domain_error_notint'] = 'XMPP 域限制必须为数字。';
+$wb['limit_xmpp_user_error_notint'] = 'XMPP 用户限制必须为数字。';
+$wb['limit_xmpp_domain_txt'] = 'XMPP 域最大数量';
+$wb['limit_xmpp_user_txt'] = 'XMPP 帐户最大数量';
+$wb['limit_xmpp_muc_txt'] = '支持多用户聊天';
+$wb['limit_xmpp_pastebin_txt'] = '支持 MUC 的 Pastebin';
+$wb['limit_xmpp_httparchive_txt'] = '支持 MUC 的 HTTP 存档';
+$wb['limit_xmpp_anon_txt'] = '匿名主机可用';
+$wb['limit_xmpp_vjud_txt'] = 'VJUD 用户目录可用';
+$wb['limit_xmpp_proxy_txt'] = 'Bytestream 代理可用';
+$wb['limit_xmpp_status_txt'] = '状态主机可用';
+$wb['added_by_txt'] = '添加人';
+$wb['added_date_txt'] = '添加日期';
+$wb['limit_domainmodule_error_notint'] = '域模块限制必须为数字。';
+$wb['limit_domainmodule_txt'] = '域模块限制';
+$wb['client_limits_txt'] = '客户端限制';
+$wb['err_msg_master_tpl_set'] = '如果选择了除 "自定义" 之外的任何主模板,则忽略所有自定义限制设置。';
+$wb['invalid_vat_id'] = '无效的增值税号。';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['email_error_empty'] = '电子邮件为空';
+$wb['limit_directive_snippets_txt'] = '显示Web服务器配置选项';
+$wb['limit_database_user_txt'] = '最大数据库用户数';
+$wb['limit_database_user_error_notint'] = '数据库用户限制必须为数字。';
+$wb['limit_database_quota_txt'] = '数据库配额';
+$wb['limit_database_quota_error_notint'] = '数据库配额限制必须为数字。';
+$wb['Reseller'] = '经销商';
+$wb['Address'] = '地址';
+$wb['Limits'] = '限制';
diff --git a/interface/web/client/lib/lang/cn_resellers_list.lng b/interface/web/client/lib/lang/cn_resellers_list.lng
new file mode 100644
index 0000000000..b8768e3224
--- /dev/null
+++ b/interface/web/client/lib/lang/cn_resellers_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = '代理商';
+$wb['client_id_txt'] = 'ID';
+$wb['company_name_txt'] = '公司名称';
+$wb['contact_name_txt'] = '联系人姓名';
+$wb['city_txt'] = '城市';
+$wb['country_txt'] = '国家';
+$wb['add_new_record_txt'] = '添加新代理商';
+$wb['customer_no_txt'] = '客户号';
+$wb['username_txt'] = '用户名';
+?>
diff --git a/interface/web/client/list/domain.list.php b/interface/web/client/list/domain.list.php
index 8fc81eeef9..c156d857c3 100644
--- a/interface/web/client/list/domain.list.php
+++ b/interface/web/client/list/domain.list.php
@@ -86,7 +86,7 @@ $liste["item"][] = array( 'field'  => "domain",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "sys_groupid",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
 	'op'  => "=",
 	'prefix' => "",
diff --git a/interface/web/client/templates/client_circle_edit.htm b/interface/web/client/templates/client_circle_edit.htm
index 0bdf2f49a0..b497fd9509 100644
--- a/interface/web/client/templates/client_circle_edit.htm
+++ b/interface/web/client/templates/client_circle_edit.htm
@@ -9,12 +9,6 @@
             <div class="form-group">
                 <label for="circle_name" class="col-sm-3 control-label">{tmpl_var name='circle_name_txt'}*</label>
                 <div class="col-sm-9"><input type="text" name="circle_name" id="circle_name" value="{tmpl_var name='circle_name'}" class="form-control" /></div></div>
-            <div class="form-group">
-                <label class="col-sm-3 control-label">{tmpl_var name='client_ids_txt'}</label>
-                <div class="col-sm-9">
-                    {tmpl_var name='client_ids'}
-                </div>
-            </div>
             <div class="form-group">
                 <label for="description" class="col-sm-3 control-label">{tmpl_var name='description_txt'}</label>
                 <div class="col-sm-9"><textarea class="form-control" name="description" id="description" rows='10' cols='30'>{tmpl_var name='description'}</textarea></div>
@@ -25,6 +19,13 @@
                     {tmpl_var name='active'}
                 </div>
             </div>
+            <hr>
+            <div class="form-group">
+                <label class="col-sm-3 control-label">{tmpl_var name='client_ids_txt'}</label>
+                <div class="col-sm-9">
+                    {tmpl_var name='client_ids'}
+                </div>
+            </div>
             {tmpl_var name='required_fields_txt'}
         
             
@@ -33,4 +34,4 @@
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-success" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="client/client_circle_edit.php">{tmpl_var name='btn_save_txt'}</button>
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="client/client_circle_list.php">{tmpl_var name='btn_cancel_txt'}</button>
-        </div></div>
\ No newline at end of file
+        </div></div>
diff --git a/interface/web/dashboard/lib/lang/cn.lng b/interface/web/dashboard/lib/lang/cn.lng
new file mode 100644
index 0000000000..9a1b4e3bf9
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['welcome_user_txt'] = '欢迎 %s';
+$wb['available_modules_txt'] = '可用模块';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_customer.lng b/interface/web/dashboard/lib/lang/cn_dashlet_customer.lng
new file mode 100644
index 0000000000..3cc1389c37
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_customer.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['customerdata_txt'] = '我的资料';
+$wb['edit_txt'] = '编辑';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_databasequota.lng b/interface/web/dashboard/lib/lang/cn_dashlet_databasequota.lng
new file mode 100644
index 0000000000..b03712a821
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_databasequota.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['databasequota_txt'] = '数据库配额';
+$wb['database_txt'] = '数据库名称';
+$wb['used_txt'] = '已使用空间';
+$wb['quota_txt'] = '配额';
+$wb['no_database_accounts_txt'] = '未找到数据库。';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_donate.lng b/interface/web/dashboard/lib/lang/cn_dashlet_donate.lng
new file mode 100644
index 0000000000..f12fe56696
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_donate.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['donate_txt'] = 'ISPConfig Hosting控制面板是免费软件。也许您知道,开发、维护和支持这样一个复杂的软件项目需要大量的时间和精力。如果您想支持ISPConfig的进一步发展,请考虑捐赠。作为奖励,您将获得当前ISPConfig手册的副本。';
+$wb['donate2_txt'] = '捐赠金额可以为5欧元或更多,金额在结账时选择。支付方式为PayPal。您将收到来自ISPConfig UG的PDF收据。';
+$wb['hide_btn_txt'] = '隐藏';
+$wb['donate_btn_txt'] = '支持ISPConfig并获取手册';
+$wb['more_btn_txt'] = '更多';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_invoice_client_settings.lng b/interface/web/dashboard/lib/lang/cn_dashlet_invoice_client_settings.lng
new file mode 100644
index 0000000000..338c8910d2
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_invoice_client_settings.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['invoice_client_settings_txt'] = '发票客户端设置';
+$wb['edit_txt'] = '编辑';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_invoices.lng b/interface/web/dashboard/lib/lang/cn_dashlet_invoices.lng
new file mode 100644
index 0000000000..50bbf57294
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_invoices.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['invoices_txt'] = '发票';
+$wb['invoice_no_txt'] = '发票号码';
+$wb['amount_txt'] = '金额';
+$wb['date_txt'] = '日期';
+$wb['invoice_status_txt'] = '状态';
+$wb['no_invoices_txt'] = '无可用发票。';
+$wb['paid_txt'] = '已付款';
+$wb['unpaid_txt'] = '未付款';
+$wb['paynow_txt'] = '立即付款';
+$wb['proforma_txt'] = '形式发票';
+$wb['refunded_txt'] = '已退款';
+$wb['not_refunded_txt'] = '未退款';
+$wb['invoice_type_invoice_txt'] = '发票';
+$wb['invoice_type_proforma_txt'] = '形式发票';
+$wb['invoice_type_refund_txt'] = '退款';
+$wb['invoice_type_reminder_txt'] = '催款';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_limits.lng b/interface/web/dashboard/lib/lang/cn_dashlet_limits.lng
new file mode 100644
index 0000000000..29adaf9ad8
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_limits.lng
@@ -0,0 +1,34 @@
+<?php
+$wb['limits_txt'] = '账户限制';
+$wb['of_txt'] = 'çš„';
+$wb['limit_maildomain_txt'] = '电子邮件域名数量';
+$wb['limit_mailmailinglist_txt'] = '邮件列表数量';
+$wb['limit_mailbox_txt'] = '邮箱数量';
+$wb['limit_mailalias_txt'] = '邮件别名数量';
+$wb['limit_mailaliasdomain_txt'] = '电子邮件域别名数量';
+$wb['limit_mailforward_txt'] = '电子邮件转发器数量';
+$wb['limit_mailcatchall_txt'] = '邮件全接收账户数量';
+$wb['limit_mailrouting_txt'] = '电子邮件路由数量';
+$wb['limit_mailfilter_txt'] = '电子邮件过滤器数量';
+$wb['limit_fetchmail_txt'] = 'Fetchmail 账户数量';
+$wb['limit_spamfilter_wblist_txt'] = '垃圾邮件过滤器白名单 / 黑名单数量';
+$wb['limit_spamfilter_user_txt'] = '垃圾邮件过滤器用户数量';
+$wb['limit_spamfilter_policy_txt'] = '垃圾邮件过滤器策略数量';
+$wb['limit_cron_txt'] = '计划任务数量';
+$wb['limit_web_domain_txt'] = 'Web 域名数量';
+$wb['limit_web_aliasdomain_txt'] = 'Web 域名别名数量';
+$wb['limit_web_subdomain_txt'] = 'Web 子域名数量';
+$wb['limit_ftp_user_txt'] = 'FTP 用户数量';
+$wb['limit_dns_zone_txt'] = 'DNS 区域数量';
+$wb['limit_dns_slave_zone_txt'] = 'DNS 从区域数量';
+$wb['limit_dns_record_txt'] = 'DNS 记录数量';
+$wb['limit_shell_user_txt'] = 'Shell 用户数量';
+$wb['limit_webdav_user_txt'] = 'Webdav 用户数量';
+$wb['limit_client_txt'] = '客户数量';
+$wb['limit_database_txt'] = '数据库数量';
+$wb['limit_domain_txt'] = '域名数量';
+$wb['limit_mailquota_txt'] = '分配的邮箱配额';
+$wb['limit_web_quota_txt'] = '分配的 Web 配额';
+$wb['limit_database_quota_txt'] = '分配的数据库配额';
+$wb['limit_mail_wblist_txt'] = '电子邮件白名单 / 黑名单条目数量';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_mailquota.lng b/interface/web/dashboard/lib/lang/cn_dashlet_mailquota.lng
new file mode 100644
index 0000000000..4e7361a9f9
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_mailquota.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['mailquota_txt'] = '邮箱配额';
+$wb['email_txt'] = '电子邮件地址';
+$wb['name_txt'] = '名称';
+$wb['used_txt'] = '已使用空间';
+$wb['quota_txt'] = '配额';
+$wb['no_email_accounts_txt'] = '未找到电子邮件帐户。';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_modules.lng b/interface/web/dashboard/lib/lang/cn_dashlet_modules.lng
new file mode 100644
index 0000000000..0077b02676
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_modules.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['available_modules_txt'] = '可用模块';
+$wb['go_to_txt'] = '前往';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_products.lng b/interface/web/dashboard/lib/lang/cn_dashlet_products.lng
new file mode 100644
index 0000000000..f9c161934e
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_products.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['products_txt'] = '我的产品';
+$wb['name_txt'] = '名称';
+$wb['price_txt'] = 'ä»·æ ¼';
+$wb['next_payment_date_txt'] = '下一个账单日期';
+$wb['no_products_txt'] = '没有找到产品。';
+$wb['edit_txt'] = '编辑';
+$wb['cancellation_date_txt'] = '由谁取消';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_quota.lng b/interface/web/dashboard/lib/lang/cn_dashlet_quota.lng
new file mode 100644
index 0000000000..123ffc314a
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_quota.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['quota_txt'] = '网站硬盘配额';
+$wb['domain_txt'] = '域名 / 网站';
+$wb['used_txt'] = '已用空间';
+$wb['hard_txt'] = '硬限制';
+$wb['soft_txt'] = '软限制';
+$wb['no_sites_txt'] = '未找到网站。';
+?>
diff --git a/interface/web/dashboard/lib/lang/cn_dashlet_shop.lng b/interface/web/dashboard/lib/lang/cn_dashlet_shop.lng
new file mode 100644
index 0000000000..e5977b2586
--- /dev/null
+++ b/interface/web/dashboard/lib/lang/cn_dashlet_shop.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['shop_txt'] = '订单';
+$wb['name_txt'] = '名称';
+$wb['price_txt'] = 'ä»·æ ¼';
+$wb['setup_fee_txt'] = '安装费';
+$wb['no_products_txt'] = '未找到产品。';
+$wb['order_txt'] = '订购';
+?>
diff --git a/interface/web/dns/dns_import.php b/interface/web/dns/dns_import.php
index b0c19bfff0..711e237db1 100644
--- a/interface/web/dns/dns_import.php
+++ b/interface/web/dns/dns_import.php
@@ -622,7 +622,11 @@ if(isset($_FILES['file']['name']) && is_uploaded_file($_FILES['file']['tmp_name'
 		$error[] = $wb['zone_file_soa_parser'];
 $error[] = print_r( $soa, true );
 	}
-	if ($settings['use_domain_module'] == 'y' && ! $app->tools_sites->checkDomainModuleDomain($soa['name']) ) {
+
+  $tmp_soa_name = trim($soa['name'], ".");
+  $tmp_domain_id = $app->db->queryOneRecord('SELECT domain_id FROM domain where domain = ?', $tmp_soa_name);
+
+	if ($settings['use_domain_module'] == 'y' && ! $app->tools_sites->checkDomainModuleDomain($tmp_domain_id['domain_id']) ) {
 		$valid_zone_file = false;
 		$error[] = $wb['zone_not_allowed'];
 	}
diff --git a/interface/web/dns/form/dns_soa.tform.php b/interface/web/dns/form/dns_soa.tform.php
index 6259cceddb..7deb109456 100644
--- a/interface/web/dns/form/dns_soa.tform.php
+++ b/interface/web/dns/form/dns_soa.tform.php
@@ -302,6 +302,7 @@ $form["tabs"]['dns_soa'] = array (
 			'separator' => ',',
 			'default' => 'ECDSAP256SHA256',
 			'value'  => array('NSEC3RSASHA1' => '7 (NSEC3RSASHA1)','ECDSAP256SHA256' => '13 (ECDSAP256SHA256)'),
+			'data-check-fields' => 'dnssec_wanted',
 			'width'  => '30',
 			'maxlength' => '255'
 		),
diff --git a/interface/web/dns/lib/lang/ar_dns_slave.lng b/interface/web/dns/lib/lang/ar_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/ar_dns_slave.lng
+++ b/interface/web/dns/lib/lang/ar_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/ar_dns_soa.lng b/interface/web/dns/lib/lang/ar_dns_soa.lng
index 4333c3793a..ae2e022195 100644
--- a/interface/web/dns/lib/lang/ar_dns_soa.lng
+++ b/interface/web/dns/lib/lang/ar_dns_soa.lng
@@ -17,7 +17,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['mbox_error_empty'] = 'Email is empty.';
 $wb['mbox_error_regex'] = 'Email format invalid.';
diff --git a/interface/web/dns/lib/lang/bg_dns_soa.lng b/interface/web/dns/lib/lang/bg_dns_soa.lng
index c1e57edf8b..9e75200a63 100644
--- a/interface/web/dns/lib/lang/bg_dns_soa.lng
+++ b/interface/web/dns/lib/lang/bg_dns_soa.lng
@@ -17,7 +17,7 @@ $wb['no_zone_perm'] = 'Вие намате права да добавяте за
 $wb['server_id_error_empty'] = 'Няма избран сървър';
 $wb['origin_error_empty'] = 'Зоната е празна.';
 $wb['origin_error_unique'] = 'Вече има такъв запис в тази зона.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS запис ае в грешен формат.';
 $wb['mbox_error_empty'] = 'Полето с емайл е празно.';
 $wb['mbox_error_regex'] = 'Полето е емайл е в грешен формат.';
diff --git a/interface/web/dns/lib/lang/cn.lng b/interface/web/dns/lib/lang/cn.lng
new file mode 100644
index 0000000000..ec4dc6ef2d
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn.lng
@@ -0,0 +1,23 @@
+<?php
+
+$wb['DNS'] = 'DNS';
+$wb['Zones'] = '区域';
+$wb['DNS A'] = 'DNS A';
+$wb['DNS ALIAS'] = 'DNS ALIAS';
+$wb['DNS CNAME'] = 'DNS CNAME';
+$wb['DNS hinfo'] = 'DNS HINFO';
+$wb['DNS mx'] = 'DNS MX';
+$wb['DNS ns'] = 'DNS NS';
+$wb['DNS ptr'] = 'DNS PTR';
+$wb['DNS RP'] = 'DNS RP';
+$wb['DNS Zone'] = 'DNS区域';
+$wb['Records'] = '记录';
+$wb['DNS SRV'] = 'DNS SRV';
+$wb['DNS TXT Record'] = 'DNS TXT记录';
+$wb['DNS TXT'] = 'DNS TXT';
+$wb['DNS Wizard'] = 'DNS向导';
+$wb['Add DNS Zone'] = '添加DNS区域';
+$wb['Templates'] = '模板';
+$wb['Secondary Zones'] = '辅助DNS区域';
+$wb['Import Zone File'] = '导入区域文件';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_a.lng b/interface/web/dns/lib/lang/cn_dns_a.lng
new file mode 100644
index 0000000000..463e5e9760
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_a.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = 'IP地址';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '活动的';
+$wb['limit_dns_record_txt'] = '您的帐户的DNS记录的最大数量已达到。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = 'IP地址为空。';
+$wb['ip_error_wrong'] = 'IP地址格式无效。';
+$wb['data_error_duplicate'] = '重复的A、ALIAS或CNAME记录。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_a_list.lng b/interface/web/dns/lib/lang/cn_dns_a_list.lng
new file mode 100644
index 0000000000..17d90d7c40
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_a_list.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['list_head_txt'] = 'A记录';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '名称';
+$wb['data_txt'] = '数据';
+$wb['aux_txt'] = '优先级';
+$wb['ttl_txt'] = 'TTL';
+$wb['type_txt'] = '类型';
+$wb['add_new_record_txt'] = '添加新的 DNS A 记录';
+$wb['page_txt'] = '页';
+$wb['page_of_txt'] = 'å…±';
+$wb['delete_confirmation'] = '您确定要删除此记录吗?';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_aaaa.lng b/interface/web/dns/lib/lang/cn_dns_aaaa.lng
new file mode 100644
index 0000000000..265fed59b2
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_aaaa.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = 'IPv6地址';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的帐户的DNS记录数量已达到最大值。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = 'IPv6地址为空。';
+$wb['data_error_duplicate'] = '重复的AAAA,ALIAS或CNAME记录。';
+$wb['ip_error_wrong'] = 'IPv6地址格式无效。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_alias.lng b/interface/web/dns/lib/lang/cn_dns_alias.lng
new file mode 100644
index 0000000000..892325cc48
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_alias.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '目标主机名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户的DNS记录的最大数量已达到。';
+$wb['no_zone_perm'] = '您没有权限将记录添加到此DNS区域。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = '目标主机名为空';
+$wb['data_error_regex'] = '目标主机名格式不正确';
+$wb['data_error_duplicate'] = '重复的A、AAAA、ALIAS、CNAME或DNAME记录';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_caa.lng b/interface/web/dns/lib/lang/cn_dns_caa.lng
new file mode 100644
index 0000000000..d823310e38
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_caa.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['ca_list_txt'] = '认证机构';
+$wb['ca_domain_txt'] = '域名';
+$wb['ca_hostname_txt'] = '额外主机名';
+$wb['ca_hostname_note_txt'] = '(以逗号分隔的列表-留空以使用所有主机名)';
+$wb['ca_options_txt'] = '附加选项';
+$wb['ca_options_note_txt'] = '认证机构要求的选项(以逗号分隔的列表)';
+$wb['ca_wildcard_txt'] = '使用通配符 SSL';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '生效';
+$wb['select_txt'] = '选择认证机构';
+$wb['no_zone_perm'] = '您无权向此 DNS 区域添加记录。';
+$wb['limit_dns_record_txt'] = '您的账户已达到 DNS 记录的最大数量。';
+$wb['ca_error_txt'] = '未选择认证机构';
+$wb['caa_exists_error'] = 'CAA 记录已存在';
+$wb['ca_option_error'] = '附加选项的格式无效;选项=值';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_cname.lng b/interface/web/dns/lib/lang/cn_dns_cname.lng
new file mode 100644
index 0000000000..2328a23e8c
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_cname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '目标主机名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的账户已达到 DNS 记录的最大数量。';
+$wb['no_zone_perm'] = '您没有添加记录到此 DNS 区域的权限。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = '目标主机名为空。';
+$wb['data_error_regex'] = '目标主机名格式无效。';
+$wb['data_error_duplicate'] = '重复的 A、AAAA、ALIAS、CNAME 或 DNAME 记录。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_dkim.lng b/interface/web/dns/lib/lang/cn_dns_dkim.lng
new file mode 100644
index 0000000000..f584280d29
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_dkim.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['public_key_txt'] = '公钥';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['record_exists_txt'] = 'DNS 记录已存在';
+$wb['dkim_disabled_txt'] = '此邮件域名未启用 DKIM';
+$wb['limit_dns_record_txt'] = '您的帐户已达到最大 DNS 记录数';
+$wb['no_zone_perm'] = '您没有权限向此 DNS 区域添加记录';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒';
+$wb['selector_txt'] = 'DKIM 选择器';
+$wb['data_error_empty'] = '公钥缺失';
+$wb['dkim_selector_empty_txt'] = 'DKIM 选择器为空';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_dmarc.lng b/interface/web/dns/lib/lang/cn_dns_dmarc.lng
new file mode 100644
index 0000000000..074fc0d2cb
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_dmarc.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['data_txt'] = 'DMARC 记录';
+$wb['domain_txt'] = '域名';
+$wb['dmarc_policy_txt'] = '邮件接收方策略';
+$wb['dmarc_policy_note_txt'] = '邮件接收方如何处理未通过 SPF 或 DKIM(DMARC)的邮件。';
+$wb['dmarc_policy_none_txt'] = 'æ— ';
+$wb['dmarc_policy_quarantine_txt'] = '隔离';
+$wb['dmarc_policy_reject_txt'] = '拒绝';
+$wb['dmarc_rua_txt'] = '聚合数据报告地址';
+$wb['dmarc_rua_note_txt'] = '接收来自 ISPs 的关于该域名未通过 DMARC 检查的邮件的报告的电子邮件地址(以空格分隔)。';
+$wb['dmarc_ruf_txt'] = '取证数据报告地址';
+$wb['dmarc_ruf_note_txt'] = '接收未通过 DMARC 检查的样本邮件的电子邮件地址(以空格分隔)。';
+$wb['dmarc_fo_txt'] = '取证报告选项';
+$wb['dmarc_fo0_txt'] = '当所有基础身份验证机制均无法生成 DMARC “通过”结果时生成报告。';
+$wb['dmarc_fo1_txt'] = '当任何机制失败时生成报告。';
+$wb['dmarc_fod_txt'] = '当 DKIM 签名未能验证时生成报告。';
+$wb['dmarc_fos_txt'] = '当 SPF 失败时生成报告。';
+$wb['dmarc_adkim_txt'] = 'DKIM 标识符对齐';
+$wb['dmarc_adkim_note_txt'] = '“strict” 要求 DKIM 域与电子邮件的发件人完全匹配';
+$wb['dmarc_adkim_r_txt'] = '放松';
+$wb['dmarc_adkim_s_txt'] = '严格';
+$wb['dmarc_aspf_txt'] = 'SPF 标识符对齐';
+$wb['dmarc_aspf_note_txt'] = '“strict” 要求 SPF 域与电子邮件的发件人完全匹配';
+$wb['dmarc_aspf_r_txt'] = '放松';
+$wb['dmarc_aspf_s_txt'] = '严格';
+$wb['dmarc_rf_txt'] = '报告格式';
+$wb['dmarc_rf_afrf_txt'] = '身份验证失败报告格式';
+$wb['dmarc_rf_iodef_txt'] = '事件对象描述交换格式';
+$wb['dmarc_pct_txt'] = '策略适用于的百分比';
+$wb['dmarc_pct_note_txt'] = '%(默认为 100)。要求 ISPs 检查该域名邮件的百分比。';
+$wb['dmarc_ri_txt'] = '报告间隔';
+$wb['dmarc_ri_note_txt'] = '秒数(默认为86400秒),生成聚合报告的时间(86400代表1天)。';
+$wb['dmarc_sp_txt'] = '子域策略(默认与域相同)。';
+$wb['dmarc_sp_same_txt'] = '与域相同';
+$wb['dmarc_sp_none_txt'] = 'æ— ';
+$wb['dmarc_sp_quarantine_txt'] = '隔离';
+$wb['dmarc_sp_reject_txt'] = '拒绝';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['dmarc_policy_error_txt'] = '仅在使用DKIM签名电子邮件的情况下允许“无”策略。';
+$wb['dmarc_no_dkim_txt'] = '没有活动的DKIM记录。';
+$wb['dmarc_no_spf_txt'] = '没有活动的SPF记录。';
+$wb['dmarc_more_spf_txt'] = '存在多个活动的SPF记录';
+$wb['dmarc_invalid_email_txt'] = '无效的电子邮件';
+$wb['dmarc_empty_txt'] = 'DMARC记录为空-至少指定一个选项';
+$wb['record_exists_txt'] = 'DNS记录已经存在';
+$wb['limit_dns_record_txt'] = '您的帐户最多可以拥有的DNS记录数已达到上限。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_dname.lng b/interface/web/dns/lib/lang/cn_dns_dname.lng
new file mode 100644
index 0000000000..a28d9d1e32
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_dname.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '目标主机名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户的DNS记录数已达到最大值。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '目标主机名为空';
+$wb['data_error_regex'] = '目标主机名格式无效';
+$wb['data_error_duplicate'] = '重复的CNAME或DNAME记录';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_ds.lng b/interface/web/dns/lib/lang/cn_dns_ds.lng
new file mode 100644
index 0000000000..92f2a8da88
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_ds.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '数据';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户的 DNS 记录数量已达到上限。';
+$wb['no_zone_perm'] = '您没有将记录添加到此 DNS 区域的权限。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '文本为空。';
+$wb['data_error_regex'] = '文本格式无效。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+$wb['invalid_type_ds'] = 'DS 记录格式错误。';
+
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_hinfo.lng b/interface/web/dns/lib/lang/cn_dns_hinfo.lng
new file mode 100644
index 0000000000..476c0c1ab8
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_hinfo.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '主机信息';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的账户已达到最大DNS记录数。';
+$wb['no_zone_perm'] = '您没有权限在此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '主机信息为空。';
+$wb['data_error_regex'] = '主机信息格式无效。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_import.lng b/interface/web/dns/lib/lang/cn_dns_import.lng
new file mode 100644
index 0000000000..22e24db0a4
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_import.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['zone_file_import_txt'] = '导入区域文件';
+$wb['server_id_txt'] = '服务器';
+$wb['client_txt'] = '客户';
+$wb['btn_save_txt'] = '导入区域文件';
+$wb['btn_cancel_txt'] = '取消';
+$wb['domain_txt'] = '域名';
+$wb['zone_file_successfully_imported_txt'] = '区域文件已成功导入。';
+$wb['error_no_valid_zone_file_txt'] = '此区域文件无效。';
+$wb['zonefile_to_import_txt'] = '区域文件';
+$wb['domain_field_desc_txt'] = '如果为空,域名将从SOA记录中获取。';
+$wb['title'] = '导入区域文件';
+$wb['no_file_uploaded_error'] = '未上传区域文件。';
+$wb['error_no_server_id'] = '未提供服务器。';
+$wb['error_not_allowed_server_id'] = '所选服务器不允许此帐户使用。';
+$wb['zone_already_exists'] = '该区域已存在,请先删除或重命名。';
+$wb['zone_not_allowed'] = '此区域不允许此帐户使用。';
+$wb['zone_file_missing_soa'] = '区域文件必须包含SOA记录。';
+$wb['zone_file_multiple_soa'] = '区域文件不能包含多个SOA记录。';
+$wb['zone_file_soa_parser'] = '此区域文件中的SOA记录无法处理。确保SERIAL、REFRESH、RETRY、EXPIRE和MINIMUM都与其他数据分别在一行上。';
+$wb['ignore_record_not_class_in'] = '忽略DNS记录,不是IN类。';
+$wb['ignore_record_unknown_type'] = '忽略DNS记录,未知类型。';
+$wb['ignore_record_invalid_owner'] = '忽略DNS记录,无法验证所有者名称。';
+$wb['zone_file_import_fail'] = '区域文件未导入。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_loc.lng b/interface/web/dns/lib/lang/cn_dns_loc.lng
new file mode 100644
index 0000000000..2321e08771
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_loc.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '主机信息';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的账户的 DNS 记录数量已达上限。';
+$wb['no_zone_perm'] = '您没有权限向此 DNS 区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '主机信息为空。';
+$wb['data_error_regex'] = '主机信息格式无效。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_mx.lng b/interface/web/dns/lib/lang/cn_dns_mx.lng
new file mode 100644
index 0000000000..b22775cb59
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_mx.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '邮件服务器主机名';
+$wb['aux_txt'] = '优先级';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的帐户的DNS记录数量已达到上限。';
+$wb['no_zone_perm'] = '您没有向此DNS区域添加记录的权限。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = '邮件服务器主机名为空。';
+$wb['data_error_regex'] = '邮件服务器主机名格式不正确。';
+$wb['duplicate_mx_record_txt'] = '重复的MX记录。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_naptr.lng b/interface/web/dns/lib/lang/cn_dns_naptr.lng
new file mode 100644
index 0000000000..91316593cd
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_naptr.lng
@@ -0,0 +1,21 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['order_txt'] = '排序';
+$wb['pref_txt'] = '优先级';
+$wb['flags_txt'] = '标记';
+$wb['service_txt'] = '服务';
+$wb['regexp_txt'] = '正则表达式';
+$wb['replacement_txt'] = '替换';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户的 DNS 记录数量已达到最大值。';
+$wb['no_zone_perm'] = '您没有权限向此 DNS 区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = 'NAPTR 记录为空。';
+$wb['naptr_error_regex'] = '无效的 NAPTR 记录。NAPTR 记录必须包括排序,优先级以及正则表达式或替换。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+$wb['record_parse_error'] = '无法解析数据库中找到的记录。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_ns.lng b/interface/web/dns/lib/lang/cn_dns_ns.lng
new file mode 100644
index 0000000000..a632dbc500
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_ns.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '区域';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '域名服务器主机名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的账户已达到最大DNS记录数。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '区域为空。';
+$wb['name_error_regex'] = '区域格式错误。';
+$wb['data_error_empty'] = '域名服务器为空。';
+$wb['data_error_regex'] = '域名服务器格式无效。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_ptr.lng b/interface/web/dns/lib/lang/cn_dns_ptr.lng
new file mode 100644
index 0000000000..70de8c265a
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_ptr.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '名称';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '规范主机名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户已达到DNS记录的最大数量。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '名称为空。';
+$wb['name_error_regex'] = '名称格式错误。';
+$wb['data_error_empty'] = '规范主机名为空';
+$wb['data_error_regex'] = '规范主机名格式无效';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_rp.lng b/interface/web/dns/lib/lang/cn_dns_rp.lng
new file mode 100644
index 0000000000..14c7ac878c
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_rp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '域名区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '负责人';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '已达到您的帐户的DNS记录的最大数量。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = '负责人字段为空。';
+$wb['data_error_regex'] = '负责人字段格式无效。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_slave.lng b/interface/web/dns/lib/lang/cn_dns_slave.lng
new file mode 100644
index 0000000000..1a511d7138
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_slave.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = 'DNS区域';
+$wb['secondary_zone_txt'] = '从属DNS区域';
+$wb['ns_txt'] = 'NS(IP地址)';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_slave_zone_txt'] = '您的帐户的从属DNS区域数量已达到上限。';
+$wb['client_txt'] = '客户';
+$wb['xfer_txt'] = '允许区域转移到这些IP(以逗号分隔的列表)<br />';
+$wb['server_id_error_empty'] = '未选择服务器';
+$wb['origin_error_empty'] = '区域为空。';
+$wb['origin_error_unique'] = '此区域已存在记录。';
+$wb['origin_error_regex'] = '区域格式无效。';
+$wb['ns_error_regex'] = 'NS格式无效。';
+$wb['eg_domain_tld'] = '例如:domain.tld。';
+$wb['ipv4_form_txt'] = '用逗号分隔多个IP。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_slave_admin_list.lng b/interface/web/dns/lib/lang/cn_dns_slave_admin_list.lng
new file mode 100644
index 0000000000..fe03211936
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_slave_admin_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '次要 DNS 区域';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = '区域';
+$wb['ns_txt'] = 'NS';
+$wb['add_new_record_txt'] = '添加新的次要 DNS 区域';
+$wb['eg_domain_tld'] = '例如:domain.tld。';
+$wb['sys_groupid_txt'] = '客户';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_slave_list.lng b/interface/web/dns/lib/lang/cn_dns_slave_list.lng
new file mode 100644
index 0000000000..24c365e579
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_slave_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '次要 DNS 区域';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = '区域';
+$wb['ns_txt'] = 'NS';
+$wb['add_new_record_txt'] = '添加新的次要 DNS 区域';
+$wb['eg_domain_tld'] = '例如:domain.tld。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_soa.lng b/interface/web/dns/lib/lang/cn_dns_soa.lng
new file mode 100644
index 0000000000..86a7f78b47
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_soa.lng
@@ -0,0 +1,47 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = '区域 (SOA)';
+$wb['ns_txt'] = 'NS';
+$wb['mbox_txt'] = '电子邮件';
+$wb['serial_txt'] = '序列号';
+$wb['refresh_txt'] = '刷新';
+$wb['retry_txt'] = '重试';
+$wb['expire_txt'] = '过期';
+$wb['minimum_txt'] = '最小值 (负缓存 TTL)';
+$wb['ttl_txt'] = 'TTL';
+$wb['xfer_txt'] = '允许区域传输到这些 IP (逗号分隔的列表)';
+$wb['active_txt'] = '活动';
+$wb['dnssec_info_txt'] = 'DNSSEC DS-Data 注册信息';
+$wb['dnssec_wanted_txt'] = '签署区域 (DNSSEC)';
+$wb['dnssec_wanted_info'] = '禁用 DNSSEC 后,如果之前启用过 DNSSEC 并且已经生成了密钥,则不会删除密钥,但是该区域不再以签名格式提供。如果您使用 PowerDNS,则将删除密钥!';
+$wb['limit_dns_zone_txt'] = '已达到您的帐户的 DNS 区域的最大数量。';
+$wb['client_txt'] = '客户';
+$wb['no_zone_perm'] = '您无权向此 DNS 区域添加记录。';
+$wb['server_id_error_empty'] = '未选择服务器';
+$wb['origin_error_empty'] = '区域为空。';
+$wb['origin_error_unique'] = '此区域已经存在记录。';
+$wb['origin_error_regex'] = '区域格式无效。';
+$wb['ns_error_regex'] = 'NS 格式无效。';
+$wb['mbox_error_empty'] = '邮箱为空。';
+$wb['mbox_error_regex'] = '邮箱格式无效。';
+$wb['also_notify_txt'] = '同时通知';
+$wb['also_notify_error_regex'] = '同时通知:请使用有效的 IP 范围、一个或多个以逗号分隔的 IP 地址,或使用关键字:any。';
+$wb['xfer_error_regex'] = '区域传输:请使用有效的 IP 范围、一个或多个以逗号分隔的 IP 地址,或使用关键字:any。';
+$wb['update_acl_txt'] = 'æ›´æ–° ACL';
+$wb['seconds_txt'] = '秒';
+$wb['eg_domain_tld'] = '例如 domain.tld';
+$wb['eg_ns1_domain_tld'] = '例如 ns1.domain.tld';
+$wb['eg_webmaster_domain_tld'] = '例如 webmaster@domain.tld';
+$wb['The Domain can not be changed. Please ask your Administrator if you want to change the domain name.'] = '域名无法更改。如果您想更改域名,请咨询管理员。';
+$wb['refresh_range_error'] = '最小刷新时间为 60 秒。';
+$wb['retry_range_error'] = '最小重试时间为 60 秒。';
+$wb['expire_range_error'] = '最小过期时间为 60 秒。';
+$wb['minimum_range_error'] = '最小最短时间为 60 秒。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+$wb['error_not_allowed_server_id'] = '所选服务器不允许此帐户。';
+$wb['soa_cannot_be_changed_txt'] = '区域 (SOA) 无法更改。请联系管理员更改区域。';
+$wb['configuration_error_txt'] = '配置错误';
+$wb['dnssec_algo_txt'] = 'DNSSEC 算法';
+$wb['rendered_zone_txt'] = '绑定区域格式,用于参考和导出。';
+$wb['rendered_zone_unavailable_txt'] = '抱歉,暂时没有可用数据。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_soa_admin_list.lng b/interface/web/dns/lib/lang/cn_dns_soa_admin_list.lng
new file mode 100644
index 0000000000..35ee4306d4
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_soa_admin_list.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['list_head_txt'] = 'DNS区域';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = '区域';
+$wb['ns_txt'] = 'NS';
+$wb['mbox_txt'] = '邮箱';
+$wb['add_new_record_wizard_txt'] = '使用向导添加新的DNS区域';
+$wb['add_new_record_txt'] = '手动添加新的DNS区域';
+$wb['import_zone_file_txt'] = '导入区域文件';
+$wb['sys_groupid_txt'] = '客户';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_soa_list.lng b/interface/web/dns/lib/lang/cn_dns_soa_list.lng
new file mode 100644
index 0000000000..a6c0876a45
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_soa_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = 'DNS区域';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['origin_txt'] = '区域';
+$wb['ns_txt'] = 'NS';
+$wb['mbox_txt'] = '电子邮件';
+$wb['add_new_record_wizard_txt'] = '使用向导添加新的 DNS 区域';
+$wb['add_new_record_txt'] = '手动添加新的 DNS 区域';
+$wb['import_zone_file_txt'] = '导入区域文件';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_spf.lng b/interface/web/dns/lib/lang/cn_dns_spf.lng
new file mode 100644
index 0000000000..9c09e4881e
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_spf.lng
@@ -0,0 +1,30 @@
+<?php
+$wb['data_txt'] = 'SPF记录';
+$wb['name_txt'] = '主机名';
+$wb['spf_mechanism_txt'] = 'SPF机制';
+$wb['spf_mechanism_pass_txt'] = '通过 - 允许其他发件人发送邮件';
+$wb['spf_mechanism_fail_txt'] = '失败 - 拒绝其他发件人发送邮件';
+$wb['spf_mechanism_softfail_txt'] = 'SoftFail - 允许其他发件人发送邮件但标记邮件';
+$wb['spf_mechanism_neutral_txt'] = '中性 - 不做任何事情';
+$wb['spf_mx_txt'] = '允许列为MX的服务器发送此域的电子邮件';
+$wb['spf_a_txt'] = '允许此域的当前IP地址发送电子邮件';
+$wb['spf_ip_txt'] = '以CIDR格式提供或中继此域邮件的其他IP地址';
+$wb['spf_ip_note_txt'] = '(用空格分隔IP)';
+$wb['spf_invalid_ip_txt'] = '无效的IP地址';
+$wb['spf_hostname_txt'] = '可能传递或中继此域邮件的任何其他服务器主机名';
+$wb['spf_hostname_note_txt'] = '(用空格分隔主机名)';
+$wb['spf_invalid_hostname_txt'] = '无效的主机名';
+$wb['spf_domain_txt'] = '可能传递或中继此域邮件的任何域名';
+$wb['spf_domain_note_txt'] = '(用空格分隔域名)';
+$wb['spf_invalid_domain_txt'] = '无效的域名';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['record_exists_txt'] = 'DNS记录已存在';
+$wb['spf_record_exists_txt'] = '主机名"{hostname}"已存在SPF记录。您要<a href="#" data-load-content="dns/dns_spf_edit.php?id={existing_record_id}">编辑现有记录</a>吗?';
+$wb['spf_record_exists_multiple_txt'] = '主机名"{hostname}"存在多个SPF记录。这会导致收件人拒绝您的邮件!删除或合并重复的现有记录,然后重试。';
+$wb['limit_dns_record_txt'] = '您的帐户达到了DNS记录的最大数量。';
+$wb['no_zone_perm'] = '您无权向此DNS区域添加记录。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['btn_edit_as_txt_record_txt'] = '作为TXT记录编辑';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_srv.lng b/interface/web/dns/lib/lang/cn_dns_srv.lng
new file mode 100644
index 0000000000..82a585890f
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_srv.lng
@@ -0,0 +1,20 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['target_txt'] = '目标';
+$wb['weight_txt'] = '权重';
+$wb['port_txt'] = '端口';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['aux_txt'] = '优先级';
+$wb['limit_dns_record_txt'] = '您的帐户的 DNS 记录已达到最大数量。';
+$wb['no_zone_perm'] = '您没有向此 DNS 区域添加记录的权限。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '服务器记录为空。';
+$wb['data_error_regex'] = '服务器记录格式无效。';
+$wb['srv_error_regex'] = '无效的服务器记录格式。服务器记录必须包含由空格分隔的 3 个文本字符串。';
+$wb['ttl_range_error'] = '最小 TTL 时间为 60 秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_sshfp.lng b/interface/web/dns/lib/lang/cn_dns_sshfp.lng
new file mode 100644
index 0000000000..e056f69265
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_sshfp.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '数据';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的账户已达到最大DNS记录数量。';
+$wb['no_zone_perm'] = '您无权向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式不正确。';
+$wb['data_error_empty'] = '文本为空。';
+$wb['data_error_regex'] = '文本格式不正确。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_template.lng b/interface/web/dns/lib/lang/cn_dns_template.lng
new file mode 100644
index 0000000000..f0993a4cde
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_template.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['name_txt'] = '名称';
+$wb['fields_txt'] = '字段';
+$wb['template_txt'] = '模板';
+$wb['visible_txt'] = '可见';
+$wb['placeholder_txt'] = '占位符';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_template_list.lng b/interface/web/dns/lib/lang/cn_dns_template_list.lng
new file mode 100644
index 0000000000..e0d37c8dc9
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_template_list.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['list_head_txt'] = 'DNS-Wizard 模板';
+$wb['visible_txt'] = '可见';
+$wb['name_txt'] = '名称';
+$wb['add_new_record_txt'] = '添加新记录';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_tlsa.lng b/interface/web/dns/lib/lang/cn_dns_tlsa.lng
new file mode 100644
index 0000000000..3544350e56
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_tlsa.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '服务描述符';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = 'TLSA数据';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '激活';
+$wb['limit_dns_record_txt'] = '您的帐户已达到最大DNS记录数。';
+$wb['no_zone_perm'] = '您没有权限向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。正确格式:_&lt;端口&gt;._(tcp|udp).&lt;主机名&gt;';
+$wb['data_error_empty'] = 'TLSA数据为空。';
+$wb['data_error_regex'] = 'TLSA数据格式不正确。正确格式:n n n HASH';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_txt.lng b/interface/web/dns/lib/lang/cn_dns_txt.lng
new file mode 100644
index 0000000000..33fda2069c
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_txt.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['zone_txt'] = '区域';
+$wb['name_txt'] = '主机名';
+$wb['type_txt'] = '类型';
+$wb['data_txt'] = '文本';
+$wb['ttl_txt'] = 'TTL';
+$wb['active_txt'] = '启用';
+$wb['limit_dns_record_txt'] = '您的帐户已达到DNS记录的最大数量。';
+$wb['no_zone_perm'] = '您无权向此DNS区域添加记录。';
+$wb['name_error_empty'] = '主机名为空。';
+$wb['name_error_regex'] = '主机名格式错误。';
+$wb['data_error_empty'] = '文本为空。';
+$wb['data_error_regex'] = '文本格式无效。';
+$wb['ttl_range_error'] = '最小TTL时间为60秒。';
+$wb['invalid_type_dkim'] = '不允许使用DKIM。请使用DKIM按钮。';
+$wb['invalid_type_dmarc'] = '不允许使用DMARC。请使用DMARC按钮。';
+$wb['invalid_type_spf'] = '不允许使用SPF。请使用SPF按钮。';
+?>
diff --git a/interface/web/dns/lib/lang/cn_dns_wizard.lng b/interface/web/dns/lib/lang/cn_dns_wizard.lng
new file mode 100644
index 0000000000..e14da5c7a9
--- /dev/null
+++ b/interface/web/dns/lib/lang/cn_dns_wizard.lng
@@ -0,0 +1,45 @@
+<?php
+$wb['list_head_txt'] = 'DNS区域向导';
+$wb['list_desc_txt'] = '通过向导创建DNS区域';
+$wb['dns_zone_txt'] = 'DNS区域';
+$wb['template_id_txt'] = '模板';
+$wb['server_id_txt'] = '服务器';
+$wb['client_txt'] = '客户';
+$wb['btn_save_txt'] = '创建新的DNS区域';
+$wb['btn_cancel_txt'] = '取消';
+$wb['domain_txt'] = '域名';
+$wb['email_txt'] = '邮箱';
+$wb['dkim_txt'] = 'DKIM';
+$wb['dnssec_txt'] = '签名区域(DNSSEC)';
+$wb['ns1_txt'] = 'NS1';
+$wb['ns2_txt'] = 'NS2';
+$wb['ip_txt'] = 'IP地址';
+$wb['ipv6_txt'] = 'IPv6地址';
+$wb['error_origin_empty'] = '原点为空。';
+$wb['error_ns_empty'] = 'NS为空。';
+$wb['error_mbox_empty'] = '邮箱为空。';
+$wb['error_refresh_empty'] = '刷新为空。';
+$wb['error_retry_empty'] = '重试为空。';
+$wb['error_expire_empty'] = '过期为空。';
+$wb['error_minimum_empty'] = '最小值为空。';
+$wb['error_ttl_empty'] = 'TTL为空。';
+$wb['error_domain_empty'] = '域名为空';
+$wb['error_ip_empty'] = 'IP为空。';
+$wb['error_ipv6_empty'] = 'IPv6为空。';
+$wb['error_ns1_empty'] = 'NS1为空。';
+$wb['error_ns2_empty'] = 'NS2为空。';
+$wb['error_email_empty'] = '邮箱为空。';
+$wb['error_domain_regex'] = '域名包含无效字符。';
+$wb['error_ns1_regex'] = 'NS1包含无效字符。';
+$wb['error_ns2_regex'] = 'NS2包含无效字符。';
+$wb['error_email_regex'] = '电子邮件不包含有效的电子邮件地址。';
+$wb['globalsearch_resultslimit_of_txt'] = 'çš„';
+$wb['globalsearch_resultslimit_results_txt'] = '结果';
+$wb['globalsearch_noresults_text_txt'] = '没有结果。';
+$wb['globalsearch_noresults_limit_txt'] = '0个结果';
+$wb['globalsearch_searchfield_watermark_txt'] = '搜索';
+$wb['globalsearch_suggestions_text_txt'] = '建议';
+$wb['error_no_server_id'] = '未提供服务器。';
+$wb['error_not_allowed_server_id'] = '所选服务器不允许此帐户使用。';
+$wb['limit_dns_zone_txt'] = '已达到您帐户的DNS区域最大数量。';
+?>
diff --git a/interface/web/dns/lib/lang/en_dns_slave.lng b/interface/web/dns/lib/lang/en_dns_slave.lng
index 4de10b2769..3cc0aec72c 100644
--- a/interface/web/dns/lib/lang/en_dns_slave.lng
+++ b/interface/web/dns/lib/lang/en_dns_slave.lng
@@ -10,7 +10,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/en_dns_soa.lng b/interface/web/dns/lib/lang/en_dns_soa.lng
index a5f1adfae5..95a007fcd6 100644
--- a/interface/web/dns/lib/lang/en_dns_soa.lng
+++ b/interface/web/dns/lib/lang/en_dns_soa.lng
@@ -20,7 +20,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['mbox_error_empty'] = 'Email is empty.';
 $wb['mbox_error_regex'] = 'Email format invalid.';
diff --git a/interface/web/dns/lib/lang/fi_dns_slave.lng b/interface/web/dns/lib/lang/fi_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/fi_dns_slave.lng
+++ b/interface/web/dns/lib/lang/fi_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/hu_dns_slave.lng b/interface/web/dns/lib/lang/hu_dns_slave.lng
index 7bc27e3a51..64174c0fc2 100644
--- a/interface/web/dns/lib/lang/hu_dns_slave.lng
+++ b/interface/web/dns/lib/lang/hu_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/hu_dns_soa.lng b/interface/web/dns/lib/lang/hu_dns_soa.lng
index fdabdd99c2..81c730de76 100644
--- a/interface/web/dns/lib/lang/hu_dns_soa.lng
+++ b/interface/web/dns/lib/lang/hu_dns_soa.lng
@@ -17,7 +17,7 @@ $wb['no_zone_perm'] = 'You do not have the permission to add a record to this DN
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['mbox_error_empty'] = 'Email is empty.';
 $wb['mbox_error_regex'] = 'Email format invalid.';
diff --git a/interface/web/dns/lib/lang/ja_dns_slave.lng b/interface/web/dns/lib/lang/ja_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/ja_dns_slave.lng
+++ b/interface/web/dns/lib/lang/ja_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/pt_dns_slave.lng b/interface/web/dns/lib/lang/pt_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/pt_dns_slave.lng
+++ b/interface/web/dns/lib/lang/pt_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/ro_dns_slave.lng b/interface/web/dns/lib/lang/ro_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/ro_dns_slave.lng
+++ b/interface/web/dns/lib/lang/ro_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/se_dns_slave.lng b/interface/web/dns/lib/lang/se_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/se_dns_slave.lng
+++ b/interface/web/dns/lib/lang/se_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/lib/lang/sk_dns_slave.lng b/interface/web/dns/lib/lang/sk_dns_slave.lng
index 416e3d6e72..9e8aaa17f9 100644
--- a/interface/web/dns/lib/lang/sk_dns_slave.lng
+++ b/interface/web/dns/lib/lang/sk_dns_slave.lng
@@ -9,7 +9,7 @@ $wb['xfer_txt'] = 'Allow zone transfers to <br />these IPs (comma separated list
 $wb['server_id_error_empty'] = 'No server selected';
 $wb['origin_error_empty'] = 'Zone empty.';
 $wb['origin_error_unique'] = 'There is already a record for this zone.';
-$wb['origin_error_regex'] = 'Zone has a invalid format.';
+$wb['origin_error_regex'] = 'Zone has an invalid format.';
 $wb['ns_error_regex'] = 'NS has a invalid format.';
 $wb['eg_domain_tld'] = 'e.g. domain.tld.';
 $wb['ipv4_form_txt'] = 'Separate multiple IPs with commas';
diff --git a/interface/web/dns/list/dns_a.list.php b/interface/web/dns/list/dns_a.list.php
index 169ec4af06..ad21dce219 100644
--- a/interface/web/dns/list/dns_a.list.php
+++ b/interface/web/dns/list/dns_a.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/dns/list/dns_slave.list.php b/interface/web/dns/list/dns_slave.list.php
index de0fd3a211..0483373c08 100644
--- a/interface/web/dns/list/dns_slave.list.php
+++ b/interface/web/dns/list/dns_slave.list.php
@@ -63,11 +63,11 @@ $liste["item"][] = array(   'field'     => "active",
 
 
 $liste["item"][] = array(   'field' => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op' => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op' => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource'=> array (  'type' => 'CUSTOM',
 		'class' => 'custom_datasource',
 		'function' => 'slave_dns_servers'
diff --git a/interface/web/dns/list/dns_soa.list.php b/interface/web/dns/list/dns_soa.list.php
index c08a3802cb..4eb1adb593 100644
--- a/interface/web/dns/list/dns_soa.list.php
+++ b/interface/web/dns/list/dns_soa.list.php
@@ -61,13 +61,23 @@ $liste["item"][] = array( 'field'  => "active",
 	'width'  => "",
 	'value'  => array('Y' => $app->lng('yes_txt'), 'N' => $app->lng('no_txt')));
 
+$liste["item"][] = array( 'field'  => "dnssec_initialized",
+	'datatype' => "VARCHAR",
+	'formtype' => "TEXT",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
+	'width'  => "",
+	'value' => '',
+);
+
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'CUSTOM',
 		'class'=> 'custom_datasource',
 		'function'=> 'dns_servers'
diff --git a/interface/web/dns/templates/dns_soa_admin_list.htm b/interface/web/dns/templates/dns_soa_admin_list.htm
index fe381eaac3..72450a3518 100644
--- a/interface/web/dns/templates/dns_soa_admin_list.htm
+++ b/interface/web/dns/templates/dns_soa_admin_list.htm
@@ -57,7 +57,7 @@
             <tbody>
                 <tmpl_loop name="records">
                     <tr>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}</td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}<tmpl_if name="dnssec_initialized" op="==" value="Y"> <i class="fa fa-key" aria-hidden="true"></i></tmpl_if></td>
 						<td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="sys_groupid"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
diff --git a/interface/web/dns/templates/dns_soa_list.htm b/interface/web/dns/templates/dns_soa_list.htm
index ec23975175..0d8af18338 100644
--- a/interface/web/dns/templates/dns_soa_list.htm
+++ b/interface/web/dns/templates/dns_soa_list.htm
@@ -55,7 +55,7 @@
             <tbody>
                 <tmpl_loop name="records">
                     <tr>
-                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}</td>
+                        <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records">{tmpl_var name="active"}<tmpl_if name="dnssec_initialized" op="==" value="Y"> <i class="fa fa-key" aria-hidden="true"></i></tmpl_if></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='server_id'}">{tmpl_var name="server_id"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='origin'}">{tmpl_var name="origin"}</a></td>
                         <td><a href="#" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='id'}&next_tab=dns_records" data-toggle="tooltip" data-placement="bottom" title="{tmpl_var name='ns'}">{tmpl_var name="ns"}</a></td>
diff --git a/interface/web/help/lib/lang/cn.lng b/interface/web/help/lib/lang/cn.lng
new file mode 100644
index 0000000000..e4de48539a
--- /dev/null
+++ b/interface/web/help/lib/lang/cn.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['Support Message'] = '支持信息';
+$wb['Message'] = '信息';
+$wb['Send message'] = '发送消息';
+$wb['View messages'] = '查看消息';
+$wb['Support'] = '支持';
+$wb['About ISPConfig'] = '关于ISPConfig';
+$wb['Version'] = '版本';
+$wb['Frequently Asked Questions'] = '常见问题';
+$wb['FAQ Sections'] = 'FAQ部分';
+$wb['Manage Sections'] = '管理部分';
+$wb['Add a Question & Answer Pair'] = '添加问题和答案对';
+$wb['Manage Questions'] = '管理问题';
+
+?>
diff --git a/interface/web/help/lib/lang/cn_faq_form.lng b/interface/web/help/lib/lang/cn_faq_form.lng
new file mode 100644
index 0000000000..8b40ce148b
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_faq_form.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['faq_faq_txt'] = '常见问题';
+$wb['faq_question_txt'] = '问题';
+$wb['faq_answer_txt'] = '答案';
+$wb['faq_section_txt'] = '章节';
+?>
diff --git a/interface/web/help/lib/lang/cn_faq_manage_questions_list.lng b/interface/web/help/lib/lang/cn_faq_manage_questions_list.lng
new file mode 100644
index 0000000000..4250c1d314
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_faq_manage_questions_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['faq_question_txt'] = '问题';
+$wb['faq_section_name_txt'] = '部分';
+$wb['faq_delete_txt'] = '删除';
+$wb['faq_edit_txt'] = '编辑';
+$wb['faq_sections_txt'] = '部分';
+$wb['faq_faq_questions_txt'] = '常见问题';
+$wb['faq_new_question_txt'] = '添加新的问题和答案对';
+?>
diff --git a/interface/web/help/lib/lang/cn_faq_sections_form.lng b/interface/web/help/lib/lang/cn_faq_sections_form.lng
new file mode 100644
index 0000000000..0f79ab5898
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_faq_sections_form.lng
@@ -0,0 +1,3 @@
+<?php
+$wb['faq_section_name_txt'] = '章节名称';
+?>
diff --git a/interface/web/help/lib/lang/cn_help_faq_list.lng b/interface/web/help/lib/lang/cn_help_faq_list.lng
new file mode 100644
index 0000000000..5d779fddcb
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_help_faq_list.lng
@@ -0,0 +1,3 @@
+<?php
+$wb['edit_txt'] = '编辑';
+?>
diff --git a/interface/web/help/lib/lang/cn_help_faq_sections_list.lng b/interface/web/help/lib/lang/cn_help_faq_sections_list.lng
new file mode 100644
index 0000000000..4d9c30efa3
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_help_faq_sections_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['faq_section_name_txt'] = '部分名称';
+$wb['faq_delete_txt'] = '删除';
+$wb['faq_edit_txt'] = '编辑';
+$wb['faq_sections_txt'] = '部分';
+$wb['faq_faq_sections_txt'] = '常见问题解答部分';
+$wb['faq_new_section_txt'] = '添加新的部分';
+?>
diff --git a/interface/web/help/lib/lang/cn_support_message.lng b/interface/web/help/lib/lang/cn_support_message.lng
new file mode 100644
index 0000000000..8385513637
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_support_message.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['recipient_id_txt'] = '收件人ID';
+$wb['sender_id_txt'] = '发件人ID';
+$wb['subject_txt'] = '主题';
+$wb['message_txt'] = '消息';
+$wb['tstamp_txt'] = '时间戳';
+$wb['reply_txt'] = '回复';
+$wb['date_txt'] = '日期';
+$wb['support_request_subject_txt'] = '支持请求';
+$wb['support_request_txt'] = '您收到了一个支持请求。请不要回复此邮件,而是在ISPConfig内处理支持请求。';
+$wb['answer_to_support_request_txt'] = '您收到了对您的支持请求的回复。请不要回复此邮件,而是在ISPConfig内处理消息。';
+$wb['answer_to_support_request_sent_txt'] = '您的对支持请求的回复已发送。请不要回复此邮件。';
+$wb['support_request_sent_txt'] = '您的支持请求已发送。请不要回复此邮件。';
+$wb['recipient_or_sender_email_address_not_valid_txt'] = '由于收件人和/或发件人的电子邮件地址无效,因此无法发送消息。';
+$wb['subject_is_empty'] = '主题不能为空。';
+?>
diff --git a/interface/web/help/lib/lang/cn_support_message_list.lng b/interface/web/help/lib/lang/cn_support_message_list.lng
new file mode 100644
index 0000000000..36aecdbdac
--- /dev/null
+++ b/interface/web/help/lib/lang/cn_support_message_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '支持消息';
+$wb['sender_id_txt'] = '发件人';
+$wb['subject_txt'] = '主题';
+$wb['add_new_record_txt'] = '创建新的支持消息';
+$wb['date_txt'] = '日期';
+?>
diff --git a/interface/web/help/list/support_message.list.php b/interface/web/help/list/support_message.list.php
index efb24322e7..d92160eb35 100644
--- a/interface/web/help/list/support_message.list.php
+++ b/interface/web/help/list/support_message.list.php
@@ -36,7 +36,7 @@ $liste['auth']    = 'yes';
 *****************************************************/
 
 $liste['item'][] = array( 'field'  => 'sender_id',
-	'datatype' => 'VARCHAR',
+	'datatype' => 'INTEGER',
 	'formtype' => 'SELECT',
 	'op'  => '=',
 	'prefix' => '',
diff --git a/interface/web/login/lib/lang/cn.lng b/interface/web/login/lib/lang/cn.lng
new file mode 100644
index 0000000000..07e89c2ab5
--- /dev/null
+++ b/interface/web/login/lib/lang/cn.lng
@@ -0,0 +1,43 @@
+<?php
+$wb['error_user_password_empty'] = '用户名或密码为空。';
+$wb['error_user_password_incorrect'] = '用户名或密码错误。';
+$wb['error_user_blocked'] = '用户已被阻止。';
+$wb['error_user_too_many_logins'] = '登录尝试过多。请在15分钟后重试。';
+$wb['pass_reset_txt'] = '如果下面输入的电子邮件地址与您的客户端设置中的电子邮件地址匹配,则将生成一个新密码并发送到您的电子邮件地址。';
+$wb['pw_reset'] = '密码已重置并发送到您的电子邮件地址。';
+$wb['pw_reset_act'] = '您已收到密码重置链接。请访问链接确认您的密码重置请求。';
+$wb['pw_error'] = '用户名或电子邮件地址不匹配。';
+$wb['pw_error_noinput'] = '请输入电子邮件地址和用户名。';
+$wb['pw_reset_error_smtp_connection'] = '尝试发送有关密码重置请求的电子邮件时发生连接问题。';
+$wb['pw_reset_mail_msg'] = '您的ISPConfig 3控制面板帐户密码已重置。新密码为:';
+$wb['pw_reset_mail_title'] = 'ISPConfig 3控制面板密码已重置';
+$wb['pw_reset_act_mail_title'] = '确认ISPConfig 3控制面板密码重置';
+$wb['pw_reset_act_mail_msg'] = '请通过访问以下激活链接确认您要重置ISPConfig 3控制面板帐户密码的请求:';
+$wb['user_regex_error'] = '用户名包含未允许的字符或超过64个字符。';
+$wb['pw_error_length'] = '密码长度小于1或大于256个字符。';
+$wb['email_error'] = '电子邮件包含未允许的字符或格式无效。';
+$wb['login_txt'] = '登录';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['login_button_txt'] = '登录';
+$wb['pw_lost_txt'] = '忘记密码';
+$wb['pw_reset_txt'] = '密码重置';
+$wb['pw_button_txt'] = '重新发送密码';
+$wb['email_txt'] = 'Email';
+$wb['back_txt'] = '返回';
+$wb['error_maintenance_mode'] = '此 ISPConfig 安装当前正在维护中。我们很快就会回来。感谢您的耐心等待。';
+$wb['theme_not_compatible'] = '选择的主题与当前的 ISPConfig 版本不兼容。请检查主题的新版本。<br />默认主题已自动激活。';
+$wb['stay_logged_in_txt'] = '保持登录状态';
+$wb['lost_password_function_disabled_txt'] = '此用户不可用于找回密码功能。';
+$wb['lost_password_function_wait_txt'] = '您还不能请求新密码。请等待几分钟。';
+$wb['lost_password_function_expired_txt'] = '此激活链接已过期。请请求新的链接。';
+$wb['lost_password_function_denied_txt'] = '此激活链接无效。';
+$wb['otp_code_txt'] = '双因素身份验证';
+$wb['otp_code_desc_txt'] = '输入您从身份验证器应用或通过电子邮件获得的代码。';
+$wb['otp_code_placeholder_txt'] = 'OTP代码';
+$wb['otp_code_email_sent_txt'] = '电子邮件已发送至';
+$wb['otp_code_email_subject_txt'] = 'ISPConfig 登录验证';
+$wb['otp_code_resend_txt'] = '请求新代码';
+$wb['otp_code_email_sent_failed_txt'] = '向 %s 发送电子邮件失败';
+$wb['otp_code_email_sent_wait_txt'] = '请稍等,重新发送代码只能在 %s 秒后才能进行。';
+?>
diff --git a/interface/web/login/lib/lang/cn_login_as.lng b/interface/web/login/lib/lang/cn_login_as.lng
new file mode 100644
index 0000000000..5b84baa68c
--- /dev/null
+++ b/interface/web/login/lib/lang/cn_login_as.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['login_1_txt'] = '您是否要登录为用户';
+$wb['login_2_txt'] = '如果您这样做,可以通过点击注销来“返回”。';
+$wb['btn_yes_txt'] = '是的,作为客户端登录';
+$wb['btn_back_txt'] = '否,返回列表';
+$wb['udp_port_help_txt'] = '用逗号分隔';
+$wb['active_txt'] = '激活';
+$wb['firewall_error_unique'] = '此服务器已有防火墙记录。';
+$wb['active_txt'] = '激活';
+$wb['tcp_ports_error_regex'] = 'tcp端口定义中不允许使用该字符。允许使用的字符包括数字、":"和","。';
+$wb['udp_ports_error_regex'] = 'udp端口定义中不允许使用该字符。允许使用的字符包括数字、":"和","。';
+$wb['login_as_or_logout_txt'] = '您是否要重新登录为 {UTYPE} 或注销?';
+$wb['btn_reloginas_txt'] = '是的,作为 %s 重新登录';
+$wb['btn_nologout_txt'] = '否,注销';
+?>
diff --git a/interface/web/login/otp.php b/interface/web/login/otp.php
index 53490318d0..e44c08d26b 100644
--- a/interface/web/login/otp.php
+++ b/interface/web/login/otp.php
@@ -175,13 +175,25 @@ if($_SESSION['otp']['type'] == 'email') {
 				$app->ispcmail->setOptions($mail_config);
 			}
 
-			$clientuser = $app->db->queryOneRecord('SELECT email FROM sys_user u LEFT JOIN client c ON (u.client_id=c.client_id) WHERE u.userid = ?', $_SESSION['s_pending']['user']['userid']);
-			if (!empty($clientuser['email'])) {
-				$email_to = $clientuser['email'];
+			$sys_user = $app->db->queryOneRecord('SELECT otp_data FROM sys_user WHERE userid = ?', $_SESSION['s_pending']['user']['userid']);
+			$data = json_decode($sys_user['otp_data'], TRUE);
+
+			if (!empty($data['otp_email_override'] )) {
+				// Handle otp_email_override.
+				$email_to = $data['otp_email_override'];
 			}
 			else {
-				// Admin users are not related to a client, thus use the globally configured email address.
-				$email_to = $mail_config['admin_mail'];
+				$clientuser = $app->db->queryOneRecord('SELECT email FROM sys_user u LEFT JOIN client c ON (u.client_id=c.client_id) WHERE u.userid = ?', $_SESSION['s_pending']['user']['userid']);
+				if (!empty($clientuser['email'])) {
+					$email_to = $clientuser['email'];
+				}
+				elseif(!empty($mail_config['admin_mail'])) {
+					// Admin users are not related to a client, thus use the globally configured email address.
+					$email_to = $mail_config['admin_mail'];
+				}
+				else {
+					$app->error('No mail address available to sent an OTP code to.', 'index.php');
+				}
 			}
 
 			$app->ispcmail->setSender($mail_config['admin_mail'], $mail_config['admin_name']);
diff --git a/interface/web/mail/form/mail_domain.tform.php b/interface/web/mail/form/mail_domain.tform.php
index 6e768193e0..4a042abf2e 100644
--- a/interface/web/mail/form/mail_domain.tform.php
+++ b/interface/web/mail/form/mail_domain.tform.php
@@ -132,7 +132,7 @@ $form["tabs"]['domain'] = array (
 			'width'  => '20',
 			'maxlength' => '63',
 			'validators' => array (  0 => array (   'type' => 'REGEX',
-					'regex' => '/^[a-z0-9]{0,63}$/',
+					'regex' => '/^(?=.*[a-z])[a-z0-9]{1,63}$/',
 					'errmsg'=> 'dkim_selector_error'),
 			),
 		),
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 32e58686e2..f513aeb9d3 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -166,7 +166,7 @@ $form["tabs"]['mailuser'] = array(
 					'regex' => '/^([0-9]{1,})$/',
 					'errmsg'=> 'quota_error_value'),
 			),
-			'default' => '-1',
+			'default' => '0',
 			'value'  => '',
 			'width'  => '30',
 			'maxlength' => '255'
diff --git a/interface/web/mail/lib/lang/ar.lng b/interface/web/mail/lib/lang/ar.lng
index 3d15a518a1..0139aab017 100644
--- a/interface/web/mail/lib/lang/ar.lng
+++ b/interface/web/mail/lib/lang/ar.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/bg.lng b/interface/web/mail/lib/lang/bg.lng
index c117c863a2..bc55f2cd31 100644
--- a/interface/web/mail/lib/lang/bg.lng
+++ b/interface/web/mail/lib/lang/bg.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/br.lng b/interface/web/mail/lib/lang/br.lng
index 4fafa1b507..f48798198f 100644
--- a/interface/web/mail/lib/lang/br.lng
+++ b/interface/web/mail/lib/lang/br.lng
@@ -51,3 +51,4 @@ $wb['Relay Recipients'] = 'Destinatários de retransmissão';
 $wb['Mailbox quota'] = 'Cotas das contas de email';
 $wb['add_header_txt'] = 'Cabeçalho (adicionar "X-Spam: Yes")';
 $wb['rewrite_subject_txt'] = 'Assunto (adicionar "***SPAM***" no início)';
+$wb['inactive'] = 'inactive';
diff --git a/interface/web/mail/lib/lang/ca.lng b/interface/web/mail/lib/lang/ca.lng
index 0531f19bd0..568f82afeb 100644
--- a/interface/web/mail/lib/lang/ca.lng
+++ b/interface/web/mail/lib/lang/ca.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Destinataires de relais';
 $wb['Mailbox quota'] = 'Quota courriel';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/cn.lng b/interface/web/mail/lib/lang/cn.lng
new file mode 100644
index 0000000000..6066c08b9e
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn.lng
@@ -0,0 +1,52 @@
+<?php
+$wb['Email Alias'] = '电子邮件别名';
+$wb['Email Blacklist'] = '电子邮件黑名单';
+$wb['Blacklist'] = '黑名单';
+$wb['Mail Content Filter'] = '邮件内容过滤器';
+$wb['Filter'] = '过滤器';
+$wb['Mail Domain'] = '邮件域名';
+$wb['Domain'] = '域名';
+$wb['Email Catchall'] = '邮件默认收件箱';
+$wb['Email Forward'] = '邮件转发';
+$wb['Get Email'] = '获取电子邮件';
+$wb['Spamfilter'] = '垃圾邮件过滤器';
+$wb['Email Routing'] = '电子邮件路由';
+$wb['Email transport'] = '电子邮件传输';
+$wb['Mailbox'] = '邮箱';
+$wb['Autoresponder'] = '自动回复';
+$wb['Mail Filter'] = '邮件过滤器';
+$wb['Custom Rules'] = '自定义规则';
+$wb['Email filter'] = '电子邮件过滤器';
+$wb['Email Whitelist'] = '电子邮件白名单';
+$wb['Whitelist'] = '白名单';
+$wb['Spamfilter blacklist'] = '垃圾邮件过滤器黑名单';
+$wb['Blacklist'] = '黑名单';
+$wb['Spamfilter Config'] = '垃圾邮件过滤器配置';
+$wb['Server'] = '服务器';
+$wb['Spamfilter policy'] = '垃圾邮件过滤器策略';
+$wb['Policy'] = 'ç­–ç•¥';
+$wb['Quarantine'] = '隔离';
+$wb['Tag-Level'] = '标签级别';
+$wb['Other'] = '其他';
+$wb['Spamfilter users'] = '垃圾邮件过滤器用户';
+$wb['Users'] = '用户';
+$wb['Spamfilter Whitelist'] = '垃圾邮件过滤器白名单';
+$wb['Whitelist'] = '白名单';
+$wb['Email'] = '电子邮件';
+$wb['Email Mailbox'] = '电子邮件邮箱';
+$wb['Email Accounts'] = '电子邮件账户';
+$wb['User / Domain'] = '用户 / 域名';
+$wb['Server Settings'] = '服务器设置';
+$wb['Spamfilter'] = '垃圾邮件过滤器';
+$wb['Fetchmail'] = '邮件获取工具';
+$wb['Mailbox traffic'] = '邮箱流量';
+$wb['Statistics'] = '统计';
+$wb['Postfix Whitelist'] = 'Postfix 白名单';
+$wb['Postfix Blacklist'] = 'Postfix 黑名单';
+$wb['Content Filter'] = '内容过滤器';
+$wb['Global Filters'] = '全局过滤器';
+$wb['Domain Alias'] = '域名别名';
+$wb['Relay Recipients'] = '转发收件人';
+$wb['Mailbox quota'] = '邮箱配额';
+$wb['add_header_txt'] = '头部(添加 "X-Spam: Yes")';
+$wb['rewrite_subject_txt'] = '主题(在开头添加 "***SPAM***")';
diff --git a/interface/web/mail/lib/lang/cn_backup_stats_list.lng b/interface/web/mail/lib/lang/cn_backup_stats_list.lng
new file mode 100644
index 0000000000..c45a878de7
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_backup_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '备份统计';
+$wb['active_txt'] = '激活';
+$wb['domain_txt'] = '邮件';
+$wb['backup_count_txt'] = '备份次数';
+$wb['backup_server_txt'] = '服务器';
+$wb['backup_interval_txt'] = '备份间隔 / 次数';
+$wb['backup_size_txt'] = '备份大小';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_alias.lng b/interface/web/mail/lib/lang/cn_mail_alias.lng
new file mode 100644
index 0000000000..76075bb651
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_alias.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['email_txt'] = '电子邮件';
+$wb['destination_txt'] = '目的地';
+$wb['active_txt'] = '激活的';
+$wb['email_error_isemail'] = '电子邮件地址无效。';
+$wb['email_error_unique'] = '重复的电子邮件地址。';
+$wb['no_domain_perm'] = '您没有此域的权限。';
+$wb['destination_error_isemail'] = '目标电子邮件地址无效。';
+$wb['limit_mailalias_txt'] = '已达到您的帐户的电子邮件别名的最大数量。';
+$wb['duplicate_mailbox_txt'] = '已经存在一个使用此电子邮件地址的邮箱。';
+$wb['domain_txt'] = '域名';
+$wb['duplicate_email_alias_txt'] = '此电子邮件别名已经存在。';
+$wb['source_txt'] = '别名';
+$wb['send_as_txt'] = '以...的名义发送';
+$wb['send_as_exp'] = '允许目标使用此别名作为发件人发送邮件';
+$wb['greylisting_txt'] = '启用灰名单';
diff --git a/interface/web/mail/lib/lang/cn_mail_alias_list.lng b/interface/web/mail/lib/lang/cn_mail_alias_list.lng
new file mode 100644
index 0000000000..809edd00f6
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_alias_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Email别名';
+$wb['active_txt'] = '激活';
+$wb['source_txt'] = '来源';
+$wb['destination_txt'] = '目标';
+$wb['email_txt'] = 'Email';
+$wb['add_new_record_txt'] = '添加新的Email别名';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_aliasdomain.lng b/interface/web/mail/lib/lang/cn_mail_aliasdomain.lng
new file mode 100644
index 0000000000..0f331158dc
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_aliasdomain.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['source_txt'] = '源';
+$wb['destination_txt'] = '目标';
+$wb['active_txt'] = '激活';
+$wb['no_domain_perm'] = '您没有此域名的权限。';
+$wb['limit_mailaliasdomain_txt'] = '您的帐户已达到电子邮件别名域的最大数量。';
+$wb['source_destination_identical_txt'] = '源域和目标域相同。';
+$wb['source_error_empty'] = '源域为空。';
+$wb['source_error_unique'] = '源域重复。';
+$wb['source_error_regex'] = '无效的源域名。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_aliasdomain_list.lng b/interface/web/mail/lib/lang/cn_mail_aliasdomain_list.lng
new file mode 100644
index 0000000000..e237380179
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_aliasdomain_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '域名别名';
+$wb['active_txt'] = '激活';
+$wb['source_txt'] = '源';
+$wb['destination_txt'] = '目的地';
+$wb['source_txt'] = '源';
+$wb['add_new_record_txt'] = '添加新的域名别名';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_backup_list.lng b/interface/web/mail/lib/lang/cn_mail_backup_list.lng
new file mode 100644
index 0000000000..41eaefce85
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_backup_list.lng
@@ -0,0 +1,16 @@
+<?php
+$wb['list_head_txt'] = '现有备份';
+$wb['date_txt'] = '日期';
+$wb['backup_type_txt'] = '类型';
+$wb['filename_txt'] = '备份文件';
+$wb['restore_backup_txt'] = '恢复';
+$wb['restore_info_txt'] = '已开始还原备份。此操作需要几分钟才能完成。';
+$wb['restore_confirm_txt'] = '还原可能会覆盖您邮箱中的现有文件。您确定要还原此备份吗?';
+$wb['download_pending_txt'] = '已有一个待处理的备份下载作业。';
+$wb['restore_pending_txt'] = '已有一个待处理的备份还原作业。';
+$wb['delete_backup_txt'] = '删除备份';
+$wb['delete_info_txt'] = '已开始删除备份。此操作需要几分钟才能完成。';
+$wb['delete_confirm_txt'] = '确定要删除此备份吗?';
+$wb['delete_pending_txt'] = '已有一个待处理的备份删除作业。';
+$wb['filesize_txt'] = '文件大小';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_blacklist.lng b/interface/web/mail/lib/lang/cn_mail_blacklist.lng
new file mode 100644
index 0000000000..f257dc38c0
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_blacklist.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '黑名单地址';
+$wb['recipient_txt'] = '收件人';
+$wb['active_txt'] = '启用';
+$wb['source_error_notempty'] = '地址为空。';
+$wb['type_txt'] = '类型';
+$wb['limit_mailfilter_txt'] = '您的帐户已达到电子邮件过滤器的最大数量限制。';
+$wb['limit_mail_wblist_txt'] = '您的帐户已达到电子邮件白名单 / 黑名单的最大数量限制。';
+$wb['mail_access_unique'] = '黑名单地址已经在使用中。';
+$wb['client_txt'] = '客户';
+$wb['sender_txt'] = '发件人';
diff --git a/interface/web/mail/lib/lang/cn_mail_blacklist_list.lng b/interface/web/mail/lib/lang/cn_mail_blacklist_list.lng
new file mode 100644
index 0000000000..217aaf60c1
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_blacklist_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'Email黑名单';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '被列入黑名单的地址';
+$wb['type_txt'] = '类型';
+$wb['recipient_txt'] = '收件人';
+$wb['add_new_record_txt'] = '添加新的黑名单记录';
+$wb['access_txt'] = '访问';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_content_filter.lng b/interface/web/mail/lib/lang/cn_mail_content_filter.lng
new file mode 100644
index 0000000000..c319a94317
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_content_filter.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['type_txt'] = '过滤器';
+$wb['pattern_txt'] = '正则表达式模式';
+$wb['data_txt'] = '数据';
+$wb['action_txt'] = '操作';
+$wb['active_txt'] = '启用';
+$wb['pattern_error_empty'] = '模式为空。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_content_filter_list.lng b/interface/web/mail/lib/lang/cn_mail_content_filter_list.lng
new file mode 100644
index 0000000000..2fa02087ad
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_content_filter_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Postfix 头和正文检查';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['pattern_txt'] = '模式';
+$wb['action_txt'] = '动作';
+$wb['add_new_record_txt'] = '添加新内容过滤器';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_domain.lng b/interface/web/mail/lib/lang/cn_mail_domain.lng
new file mode 100644
index 0000000000..279e9a3bf7
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_domain.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['type_txt'] = '类型';
+$wb['active_txt'] = '启用';
+$wb['dkim_txt'] = '启用 DKIM';
+$wb['dkim_private_txt'] = 'DKIM 私钥';
+$wb['dkim_public_txt'] = 'DKIM 公钥' . "\n" . '仅供参考';
+$wb['dkim_generate_txt'] = '生成 DKIM 私钥';
+$wb['dkim_dns_txt'] = 'DNS 记录';
+$wb['dkim_private_key_error'] = '无效的 DKIM 私钥';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '重复的域名。';
+$wb['domain_error_regex'] = '无效的域名。';
+$wb['dkim_settings_txt'] = '域名密钥识别邮件(DKIM)';
+$wb['client_txt'] = '客户';
+$wb['limit_maildomain_txt'] = '您的帐户已达到电子邮件域的最大数量。';
+$wb['policy_txt'] = '垃圾邮件过滤器';
+$wb['no_policy'] = '- 未启用 -';
+$wb['error_not_allowed_server_id'] = '此帐户不允许选择此服务器。';
+$wb['dkim_selector_txt'] = 'DKIM 选择器';
+$wb['dkim_selector_error'] = '无效的 DKIM 选择器。仅使用小写字母数字字符(a-z或0-9),最多63个字符';
+$wb['relayhost_txt'] = 'Relayhost';
+$wb['relayhost_user_txt'] = 'Relayhost 用户';
+$wb['relayhost_password_txt'] = 'Relayhost 密码';
diff --git a/interface/web/mail/lib/lang/cn_mail_domain_admin_list.lng b/interface/web/mail/lib/lang/cn_mail_domain_admin_list.lng
new file mode 100644
index 0000000000..b3894ed510
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_domain_admin_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Email 域';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新域名';
+$wb['active_txt'] = '激活';
+$wb['sys_groupid_txt'] = '客户';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_domain_catchall.lng b/interface/web/mail/lib/lang/cn_mail_domain_catchall.lng
new file mode 100644
index 0000000000..adf71b00b1
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_domain_catchall.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['domain_txt'] = '域名';
+$wb['destination_txt'] = '目标邮箱';
+$wb['active_txt'] = '激活';
+$wb['domain_error_unique'] = '此域名已经存在一个Catchall记录。';
+$wb['no_domain_perm'] = '您没有此域名的权限。';
+$wb['domain_error_regex'] = '无效的域名或域名包含无效字符。';
+$wb['limit_mailcatchall_txt'] = '您的帐户的邮件catchall帐户数量已达到最大限制。';
+$wb['domain_txt'] = '域名';
+$wb['source_txt'] = '来源';
+$wb['destination_error_isemail'] = '目标不是有效的电子邮件地址。';
+$wb['greylisting_txt'] = '启用灰名单';
+$wb['send_as_txt'] = '发送为';
+$wb['send_as_exp'] = '允许目标从此域中的电子邮件地址发送。';
diff --git a/interface/web/mail/lib/lang/cn_mail_domain_catchall_list.lng b/interface/web/mail/lib/lang/cn_mail_domain_catchall_list.lng
new file mode 100644
index 0000000000..1f7dec8e7a
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_domain_catchall_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '邮件 Catchall';
+$wb['active_txt'] = '启用';
+$wb['source_txt'] = '源';
+$wb['destination_txt'] = '目标电子邮件地址';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新 Catchall';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_domain_list.lng b/interface/web/mail/lib/lang/cn_mail_domain_list.lng
new file mode 100644
index 0000000000..4865d56fa1
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '邮件域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新域名';
+$wb['active_txt'] = '启用';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_forward.lng b/interface/web/mail/lib/lang/cn_mail_forward.lng
new file mode 100644
index 0000000000..9e9d8906f2
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_forward.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['email_txt'] = '电子邮件';
+$wb['destination_txt'] = '目标电子邮件';
+$wb['active_txt'] = '启用';
+$wb['limit_mailforward_txt'] = '您的帐户的电子邮件转发器数量已达到上限。';
+$wb['duplicate_mailbox_txt'] = '已经存在使用该电子邮件地址的邮箱';
+$wb['domain_txt'] = '域名';
+$wb['source_txt'] = '源电子邮件';
+$wb['destination_error_empty'] = '目标电子邮件不能为空。';
+$wb['destination_error_isemail'] = '目标电子邮件包含至少一个无效的电子邮件地址。';
+$wb['email_error_isemail'] = '请输入有效的电子邮件地址。';
+$wb['email_error_unique'] = '重复的电子邮件地址。';
+$wb['send_as_txt'] = '发送人';
+$wb['send_as_exp'] = '允许目标使用此地址作为来源发送邮件(如果目标是内部的)。';
+$wb['greylisting_txt'] = '启用灰名单';
diff --git a/interface/web/mail/lib/lang/cn_mail_forward_list.lng b/interface/web/mail/lib/lang/cn_mail_forward_list.lng
new file mode 100644
index 0000000000..c8686da3ef
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_forward_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '邮件转发';
+$wb['active_txt'] = '激活';
+$wb['source_txt'] = '源';
+$wb['destination_txt'] = '目的地';
+$wb['email_txt'] = '电子邮件';
+$wb['add_new_record_txt'] = '添加新的电子邮件转发';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_get.lng b/interface/web/mail/lib/lang/cn_mail_get.lng
new file mode 100644
index 0000000000..20ad473996
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_get.lng
@@ -0,0 +1,19 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['type_txt'] = '类型';
+$wb['source_server_txt'] = 'Pop3/Imap服务器';
+$wb['source_username_txt'] = '用户名';
+$wb['source_password_txt'] = '密码';
+$wb['source_delete_txt'] = '检索后删除邮件';
+$wb['source_delete_note_txt'] = '在启用此选项之前,请先检查电子邮件检索是否有效。';
+$wb['source_read_all_txt'] = '检索所有邮件(包括已读邮件)';
+$wb['destination_txt'] = '目的地';
+$wb['active_txt'] = '启用';
+$wb['limit_fetchmail_txt'] = '您的帐户的最大Fetchmail记录数已达到。';
+$wb['source_server_error_isempty'] = '服务器为空。';
+$wb['source_username_error_isempty'] = '用户名为空。';
+$wb['source_password_error_isempty'] = '密码为空。';
+$wb['destination_error_isemail'] = '未选择目的地。';
+$wb['source_server_error_regex'] = 'Pop3/Imap服务器不是有效的域名。';
+$wb['error_delete_read_all_combination'] = '选项组合不合法。您不能同时使用“检索后删除邮件”= no和“检索所有邮件”= yes';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_get_list.lng b/interface/web/mail/lib/lang/cn_mail_get_list.lng
new file mode 100644
index 0000000000..529c4c3618
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_get_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '从外部POP3/IMAP服务器获取电子邮件';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['source_server_txt'] = '外部服务器';
+$wb['source_username_txt'] = '用户名';
+$wb['destination_txt'] = '目的地';
+$wb['add_new_record_txt'] = '添加新帐户';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_mailinglist.lng b/interface/web/mail/lib/lang/cn_mail_mailinglist.lng
new file mode 100644
index 0000000000..cb08db4821
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_mailinglist.lng
@@ -0,0 +1,23 @@
+<?php
+$wb['mailinglist_txt'] = '邮件列表';
+$wb['limit_mailmailinglist_txt'] = '已达到限制';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['listname_error_empty'] = '列表名称为空。';
+$wb['listname_error_regex'] = '列表名称无效。最小长度为2个字符(允许使用:[a-z 1-9 - _])。';
+$wb['domain_error_regex'] = '无效的域名。';
+$wb['email_in_use_txt'] = '电子邮件已被使用';
+$wb['no_domain_perm'] = '您没有此域名的权限。';
+$wb['password_strength_txt'] = '密码强度';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['listname_txt'] = '列表名称';
+$wb['client_txt'] = '客户';
+$wb['email_txt'] = '电子邮件';
+$wb['password_txt'] = '密码';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['listname_error_unique'] = '服务器上已存在同名的邮件列表。请换一个列表名称。';
+$wb['email_error_isemail'] = '电子邮件地址无效。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_mailinglist_list.lng b/interface/web/mail/lib/lang/cn_mail_mailinglist_list.lng
new file mode 100644
index 0000000000..d185267944
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_mailinglist_list.lng
@@ -0,0 +1,5 @@
+<?php
+$wb['list_head_txt'] = '邮件列表';
+$wb['domain_txt'] = '域名';
+$wb['listname_txt'] = '列表名';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_relay_domain.lng b/interface/web/mail/lib/lang/cn_mail_relay_domain.lng
new file mode 100644
index 0000000000..6c6144e2e3
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_relay_domain.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['mail_relay_domain_title'] = 'Email 中转域';
+$wb['tab_relay_domain_title'] = '中转域';
+$wb['server_id_txt'] = '服务器';
+$wb['active_txt'] = '启用';
+$wb['domain_txt'] = '域名';
+$wb['domain_error_regex'] = '无效的域名。';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '该域名已存在于此服务器上作为邮件中继域。';
diff --git a/interface/web/mail/lib/lang/cn_mail_relay_domain_list.lng b/interface/web/mail/lib/lang/cn_mail_relay_domain_list.lng
new file mode 100644
index 0000000000..f49dd8e96a
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_relay_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '中转域';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新的中转域';
+$wb['access_txt'] = '访问';
diff --git a/interface/web/mail/lib/lang/cn_mail_relay_recipient.lng b/interface/web/mail/lib/lang/cn_mail_relay_recipient.lng
new file mode 100644
index 0000000000..ff72944f41
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_relay_recipient.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '中继接收者';
+$wb['recipient_txt'] = '收件人';
+$wb['active_txt'] = '激活';
+$wb['source_error_notempty'] = '地址不能为空。';
+$wb['type_txt'] = '类型';
+$wb['limit_mailfilter_txt'] = '已达到您的账户的电子邮件过滤器的最大数量。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_relay_recipient_list.lng b/interface/web/mail/lib/lang/cn_mail_relay_recipient_list.lng
new file mode 100644
index 0000000000..bb0e05eddf
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_relay_recipient_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '中转收件人';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '收件人地址';
+$wb['recipient_txt'] = '转发到';
+$wb['add_new_record_txt'] = '添加新的中转收件人';
+$wb['access_txt'] = '访问';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_spamfilter.lng b/interface/web/mail/lib/lang/cn_mail_spamfilter.lng
new file mode 100644
index 0000000000..207d99b565
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_spamfilter.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['email_txt'] = '电子邮件';
+$wb['spam_rewrite_score_int_txt'] = '重写得分';
+$wb['spam_redirect_score_int_txt'] = '重定向得分';
+$wb['spam_delete_score_int_txt'] = '删除得分';
+$wb['spam_rewrite_subject_txt'] = '重写主题';
+$wb['spam_redirect_maildir_txt'] = '重定向邮箱';
+$wb['active_txt'] = '启用';
+$wb['spam_rewrite_txt'] = '当得分高于此值时,重写电子邮件主题。';
+$wb['spam_redirect_txt'] = '当得分高于此值时,将电子邮件重定向到选择的邮箱。';
+$wb['spam_delete_txt'] = '当得分高于此值时,删除电子邮件。';
+$wb['disable_txt'] = '提示:要禁用过滤选项,请将分数设置为 0.00。';
+$wb['email_error_isemail'] = '电子邮件地址无效。';
+$wb['email_error_unique'] = '此电子邮件地址已经存在 Spamfilter 记录。';
+$wb['spam_redirect_maildir_purge_txt'] = '重定向后清除 Maildir 时间';
+$wb['days_txt'] = '天。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_spamfilter_list.lng b/interface/web/mail/lib/lang/cn_mail_spamfilter_list.lng
new file mode 100644
index 0000000000..b53ab02a7d
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_spamfilter_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '垃圾邮件过滤器';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['server_name_txt'] = '服务器名称';
+$wb['email_txt'] = '电子邮件';
+$wb['add_new_record_txt'] = '添加新的垃圾邮件过滤记录';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_transport.lng b/interface/web/mail/lib/lang/cn_mail_transport.lng
new file mode 100644
index 0000000000..17fa0ac760
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_transport.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['destination_txt'] = '目的地';
+$wb['type_txt'] = '类型';
+$wb['mx_txt'] = '无 MX 查询';
+$wb['sort_order_txt'] = '排序';
+$wb['active_txt'] = '激活';
+$wb['limit_mailrouting_txt'] = '您的帐户的路由最大数量已达到。';
+$wb['transport_txt'] = '传输';
+$wb['domain_error_unique'] = '此域名的邮件传输已存在于此服务器上。';
diff --git a/interface/web/mail/lib/lang/cn_mail_transport_list.lng b/interface/web/mail/lib/lang/cn_mail_transport_list.lng
new file mode 100644
index 0000000000..c0b3b6bcc4
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_transport_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '高级电子邮件路由';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['transport_txt'] = '传输';
+$wb['sort_order_txt'] = '排序';
+$wb['add_new_record_txt'] = '添加新传输';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_user.lng b/interface/web/mail/lib/lang/cn_mail_user.lng
new file mode 100644
index 0000000000..9461e25228
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_user.lng
@@ -0,0 +1,77 @@
+<?php
+$wb['custom_mailfilter_txt'] = '自定义邮件过滤规则';
+$wb['email_txt'] = '邮箱';
+$wb['cryptpwd_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['active_txt'] = '启用';
+$wb['email_error_isemail'] = '邮箱地址无效。';
+$wb['email_error_unique'] = '重复的邮箱地址。';
+$wb['autoresponder_subject_txt'] = '邮件主题';
+$wb['autoresponder_subject'] = '自动回复';
+$wb['autoresponder_text_txt'] = '内容';
+$wb['autoresponder_txt'] = '启用';
+$wb['autoresponder_start_date_txt'] = '开始日期';
+$wb['autoresponder_start_date_ispast'] = '开始日期不能为过去时间。';
+$wb['autoresponder_end_date_txt'] = '截止日期';
+$wb['autoresponder_end_date_isgreater'] = '截止日期必须晚于开始日期。';
+$wb['no_domain_perm'] = '您没有此域的权限。';
+$wb['error_no_pwd'] = '密码为空。';
+$wb['quota_error_isint'] = '邮箱大小必须为数字。';
+$wb['quota_txt'] = '邮箱容量 (0 为无限制)';
+$wb['server_id_txt'] = '服务 ID';
+$wb['password_txt'] = '密码';
+$wb['password_click_to_set_txt'] = '点击设置';
+$wb['maildir_txt'] = 'Maildir';
+$wb['postfix_txt'] = '启用接收邮件';
+$wb['tooltip_postfix_txt'] = '允许此邮箱接收邮件。';
+$wb['greylisting_txt'] = '启用灰名单';
+$wb['access_txt'] = '启用访问';
+$wb['policy_txt'] = '垃圾邮件过滤策略';
+$wb['inherit_policy'] = '- 继承域名设置 -';
+$wb['limit_mailbox_txt'] = '您的帐户的邮箱数量已达到最大值。';
+$wb['limit_mailquota_txt'] = '您的帐户的邮箱空间已满。最大可用空间为 MB。';
+$wb['disablesmtp_txt'] = '禁用发送邮件';
+$wb['tooltip_disablesmtp_txt'] = '禁止此邮箱发送邮件。';
+$wb['disabledeliver_txt'] = '禁用(本地)传递';
+$wb['tooltip_disabledeliver_txt'] = '禁止传递到收件箱,并通过邮件过滤器和筛选器脚本进行处理。邮件转发到\'发送副本\'地址。';
+$wb['disableimap_txt'] = '禁用 IMAP';
+$wb['disablepop3_txt'] = '禁用 POP3';
+$wb['duplicate_alias_or_forward_txt'] = '已存在相同的别名或转发地址。';
+$wb['quota_error_value'] = '无效的邮箱容量值。允许的值为:0 表示无限制,大于 1 的数字。';
+$wb['move_junk_txt'] = '将垃圾邮件移至垃圾箱。';
+$wb['move_junk_y_txt'] = '在自定义筛选器之前移动。';
+$wb['move_junk_a_txt'] = '在自定义筛选器之后移动。';
+$wb['move_junk_n_txt'] = '不要将垃圾邮件移至垃圾箱。';
+$wb['name_txt'] = '名称';
+$wb['name_optional_txt'] = '(可选)';
+$wb['autoresponder_active'] = '启用自动回复';
+$wb['cc_txt'] = '发送副本至';
+$wb['cc_error_isemail'] = '“发送副本至”字段中不包含有效的电子邮件地址。';
+$wb['forward_in_lda_txt'] = '交付过程中复制';
+$wb['tooltip_forward_in_lda_txt'] = '控制邮件复制是否在交付之前或之中进行。';
+$wb['sender_cc_txt'] = '发送出站密件副本至';
+$wb['sender_cc_error_isemail'] = '“发送出站密件副本至”字段中不包含有效的电子邮件地址。';
+$wb['domain_txt'] = '域名';
+$wb['now_txt'] = '现在';
+$wb['login_error_unique'] = '登录名已存在。';
+$wb['login_error_regex'] = '有效字符包括 A-Z、a-z、0-9、.、_ 和 -。';
+$wb['login_txt'] = '登录名';
+$wb['error_login_email_txt'] = '此登录名不允许使用。请使用不同的登录名或使用电子邮件地址作为登录名。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份副本数量';
+$wb['no_backup_txt'] = '不备份';
+$wb['daily_backup_txt'] = '每日';
+$wb['weekly_backup_txt'] = '每周';
+$wb['monthly_backup_txt'] = '每月';
+$wb['email_error_isascii'] = '请勿在密码中使用特殊的 Unicode 字符。这可能会导致您的邮件客户端出现问题。';
+$wb['cc_note_txt'] = '(使用逗号分隔多个电子邮件地址)';
+$wb['sender_cc_note_txt'] = '(仅限一个电子邮件地址)';
+$wb['purge_trash_days_txt'] = '自动在 X 天后清空垃圾箱';
+$wb['tooltip_purge_trash_days_txt'] = '0 = 禁用';
+$wb['purge_junk_days_txt'] = '自动在 X 天后清空垃圾邮件';
+$wb['tooltip_purge_junk_days_txt'] = '0 = 禁用';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_user_filter.lng b/interface/web/mail/lib/lang/cn_mail_user_filter.lng
new file mode 100644
index 0000000000..c898708dce
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_user_filter.lng
@@ -0,0 +1,31 @@
+<?php
+$wb['rulename_txt'] = '名称';
+$wb['action_txt'] = '操作';
+$wb['target_txt'] = '文件夹';
+$wb['active_txt'] = '启用';
+$wb['rulename_error_empty'] = '名称为空。';
+$wb['searchterm_is_empty'] = '搜索条件为空。';
+$wb['source_txt'] = '来源';
+$wb['target_error_regex'] = '目标只能包含以下字符:a-z,0-9,-,.,_,&,/,和{space}。';
+$wb['limit_mailfilter_txt'] = '邮件过滤器的最大数量已达到。';
+$wb['subject_txt'] = '主题';
+$wb['from_txt'] = '发件人';
+$wb['to_txt'] = '收件人';
+$wb['list_id_txt'] = '列表ID';
+$wb['contains_txt'] = '包含';
+$wb['is_txt'] = '为';
+$wb['begins_with_txt'] = '开头为';
+$wb['ends_with_txt'] = '结尾为';
+$wb['regex_txt'] = '匹配正则表达式';
+$wb['move_stop_txt'] = '移动到';
+$wb['delete_txt'] = '删除';
+$wb['header_txt'] = '邮件头';
+$wb['size_over_txt'] = '邮件大小超过(KB)';
+$wb['size_under_txt'] = '邮件大小低于(KB)';
+$wb['localpart_txt'] = '用户名';
+$wb['domain_txt'] = '域名';
+$wb['keep_txt'] = '保留';
+$wb['reject_txt'] = '拒绝';
+$wb['stop_txt'] = '停止';
+$wb['move_to_txt'] = '移动到';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_user_filter_list.lng b/interface/web/mail/lib/lang/cn_mail_user_filter_list.lng
new file mode 100644
index 0000000000..d847c7006d
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_user_filter_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['rulename_txt'] = '名称';
+$wb['add_new_record_txt'] = '添加新过滤器';
+$wb['page_txt'] = '页';
+$wb['page_of_txt'] = 'çš„';
+$wb['delete_confirmation'] = '您确定要删除邮件过滤器吗?';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_user_list.lng b/interface/web/mail/lib/lang/cn_mail_user_list.lng
new file mode 100644
index 0000000000..cc27e6d1f4
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_user_list.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['list_head_txt'] = '邮箱';
+$wb['email_txt'] = '邮箱';
+$wb['autoresponder_txt'] = '自动回复';
+$wb['add_new_record_txt'] = '添加新邮箱';
+$wb['name_txt'] = '真实姓名';
+$wb['login_txt'] = '登录名';
+$wb['postfix_txt'] = '接收';
+$wb['disablesmtp_txt'] = 'SMTP(发送)';
+$wb['disabledeliver_txt'] = 'INBOX';
+$wb['disableimap_txt'] = 'IMAP';
+$wb['disablepop3_txt'] = 'POP3';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_user_stats_list.lng b/interface/web/mail/lib/lang/cn_mail_user_stats_list.lng
new file mode 100644
index 0000000000..ee06c753cf
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_user_stats_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '邮件流量';
+$wb['email_txt'] = '电子邮件';
+$wb['this_month_txt'] = '本月';
+$wb['last_month_txt'] = '上月';
+$wb['this_year_txt'] = '今年';
+$wb['last_year_txt'] = '去年';
+?>
diff --git a/interface/web/mail/lib/lang/cn_mail_whitelist.lng b/interface/web/mail/lib/lang/cn_mail_whitelist.lng
new file mode 100644
index 0000000000..9b3c847b6f
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_whitelist.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '白名单地址';
+$wb['recipient_txt'] = '收件人';
+$wb['active_txt'] = '启用';
+$wb['source_error_notempty'] = '地址不能为空。';
+$wb['type_txt'] = '类型';
+$wb['limit_mailfilter_txt'] = '您的帐户已达到电子邮件过滤器的最大数量。';
+$wb['limit_mail_wblist_txt'] = '您的帐户已达到电子邮件白名单/黑名单的最大数量。';
+$wb['mail_access_unique'] = '白名单地址已被使用。';
+$wb['client_txt'] = '客户';
+$wb['sender_txt'] = '发件人';
diff --git a/interface/web/mail/lib/lang/cn_mail_whitelist_list.lng b/interface/web/mail/lib/lang/cn_mail_whitelist_list.lng
new file mode 100644
index 0000000000..39bbd3e3df
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_mail_whitelist_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '邮件白名单';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['source_txt'] = '白名单地址';
+$wb['type_txt'] = '类型';
+$wb['recipient_txt'] = '收件人';
+$wb['add_new_record_txt'] = '添加新的白名单记录';
+$wb['access_txt'] = '访问';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_blacklist.lng b/interface/web/mail/lib/lang/cn_spamfilter_blacklist.lng
new file mode 100644
index 0000000000..0f4aba4762
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_blacklist.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['wb_txt'] = 'wb';
+$wb['rid_txt'] = '用户';
+$wb['email_txt'] = '邮箱';
+$wb['priority_txt'] = '优先级';
+$wb['active_txt'] = '启用';
+$wb['limit_spamfilter_wblist_txt'] = '您的帐户的白名单或黑名单记录已达到上限。';
+$wb['10 - highest'] = '10 - 最高';
+$wb['5 - medium'] = '5 - 中等';
+$wb['1 - lowest'] = '1 - 最低';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_blacklist_list.lng b/interface/web/mail/lib/lang/cn_spamfilter_blacklist_list.lng
new file mode 100644
index 0000000000..4210f64125
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_blacklist_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '垃圾邮件过滤黑名单';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['priority_txt'] = '优先级';
+$wb['rid_txt'] = '用户';
+$wb['email_txt'] = '黑名单邮箱';
+$wb['add_new_record_txt'] = '添加黑名单记录';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_config.lng b/interface/web/mail/lib/lang/cn_spamfilter_config.lng
new file mode 100644
index 0000000000..a0eab985a4
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_config.lng
@@ -0,0 +1,20 @@
+<?php
+$wb['getmail_config_dir_txt'] = 'Getmail配置路径';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['netmask_txt'] = '子网掩码';
+$wb['gateway_txt'] = '网关';
+$wb['hostname_txt'] = '主机名';
+$wb['nameservers_txt'] = '名称服务器';
+$wb['module_txt'] = '服务器模块';
+$wb['maildir_path_txt'] = 'Maildir路径';
+$wb['homedir_path_txt'] = 'Home目录路径';
+$wb['mailuser_uid_txt'] = 'Mailuser UID';
+$wb['mailuser_gid_txt'] = 'Mailuser GID';
+$wb['mailuser_name_txt'] = 'Mailuser名称';
+$wb['mailuser_group_txt'] = 'Mailuser组';
+$wb['relayhost_txt'] = 'Relayhost';
+$wb['relayhost_user_txt'] = 'Relayhost用户';
+$wb['relayhost_password_txt'] = 'Relayhost密码';
+$wb['mailbox_size_limit_txt'] = '邮箱大小限制';
+$wb['message_size_limit_txt'] = '邮件大小限制';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_config_list.lng b/interface/web/mail/lib/lang/cn_spamfilter_config_list.lng
new file mode 100644
index 0000000000..70e49e22b8
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_config_list.lng
@@ -0,0 +1,5 @@
+<?php
+$wb['list_head_txt'] = 'Server Configuration';
+$wb['server_name_txt'] = 'Server';
+$wb['server_id_txt'] = 'server_id';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_policy.lng b/interface/web/mail/lib/lang/cn_spamfilter_policy.lng
new file mode 100644
index 0000000000..27ddf9b060
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_policy.lng
@@ -0,0 +1,51 @@
+<?php
+$wb['policy_name_txt'] = '策略名称';
+$wb['virus_lover_txt'] = '病毒爱好者';
+$wb['spam_lover_txt'] = '垃圾邮件爱好者';
+$wb['banned_files_lover_txt'] = '违禁文件爱好者';
+$wb['bad_header_lover_txt'] = '不良标题爱好者';
+$wb['bypass_virus_checks_txt'] = '跳过病毒检测';
+$wb['bypass_banned_checks_txt'] = '跳过违禁检测';
+$wb['bypass_header_checks_txt'] = '跳过标题检测';
+$wb['virus_quarantine_to_txt'] = '转发病毒邮件至邮箱';
+$wb['spam_quarantine_to_txt'] = '转发垃圾邮件至邮箱';
+$wb['banned_quarantine_to_txt'] = '转发违禁文件至邮箱';
+$wb['bad_header_quarantine_to_txt'] = '转发不良标题至邮箱';
+$wb['clean_quarantine_to_txt'] = '转发清洁邮件至邮箱';
+$wb['other_quarantine_to_txt'] = '转发其他邮件至邮箱';
+$wb['spam_tag_level_txt'] = '垃圾邮件标签等级';
+$wb['spam_tag2_level_txt'] = '垃圾邮件标签等级2';
+$wb['spam_kill_level_txt'] = '垃圾邮件删除等级';
+$wb['spam_dsn_cutoff_level_txt'] = '垃圾邮件 DSN 截止等级';
+$wb['spam_quarantine_cutoff_level_txt'] = '垃圾邮件隔离截止等级';
+$wb['spam_modifies_subj_txt'] = '垃圾邮件更改主题';
+$wb['spam_subject_tag_txt'] = '垃圾邮件主题标记';
+$wb['spam_subject_tag2_txt'] = '垃圾邮件主题标记2';
+$wb['addr_extension_virus_txt'] = '病毒地址扩展';
+$wb['addr_extension_spam_txt'] = '垃圾邮件地址扩展';
+$wb['addr_extension_banned_txt'] = '违禁文件地址扩展';
+$wb['addr_extension_bad_header_txt'] = '不良标题地址扩展';
+$wb['warnvirusrecip_txt'] = '警告病毒收件人';
+$wb['warnbannedrecip_txt'] = '警告违禁文件收件人';
+$wb['warnbadhrecip_txt'] = '警告不良标题收件人';
+$wb['newvirus_admin_txt'] = '新病毒管理者';
+$wb['virus_admin_txt'] = '病毒管理者';
+$wb['banned_admin_txt'] = '违禁文件管理者';
+$wb['bad_header_admin_txt'] = '不良标题管理者';
+$wb['spam_admin_txt'] = '垃圾邮件管理者';
+$wb['message_size_limit_txt'] = '邮件大小限制';
+$wb['banned_rulenames_txt'] = '禁止规则名称';
+$wb['rspamd_greylisting_txt'] = '使用灰名单';
+$wb['rspamd_spam_greylisting_level_txt'] = '灰名单级别';
+$wb['rspamd_spam_tag_level_txt'] = '标记为垃圾邮件级别';
+$wb['rspamd_spam_tag_method_txt'] = '标记为垃圾邮件的方式';
+$wb['rspamd_spam_kill_level_txt'] = '标记为垃圾邮件的拒绝级别';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+
+$wb['amavis_settings_txt'] = '设置';
+$wb['amavis_taglevel_txt'] = '标记级别';
+$wb['amavis_quarantine_txt'] = '隔离';
+$wb['amavis_other_txt'] = '其他';
+$wb['add_header_txt'] = '添加邮件头';
+$wb['rewrite_subject_txt'] = '重写主题';
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_policy_list.lng b/interface/web/mail/lib/lang/cn_spamfilter_policy_list.lng
new file mode 100644
index 0000000000..356d7321ed
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_policy_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '垃圾邮件过滤策略';
+$wb['policy_name_txt'] = '名称';
+$wb['virus_lover_txt'] = '病毒爱好者';
+$wb['spam_lover_txt'] = '垃圾邮件爱好者';
+$wb['banned_files_lover_txt'] = '违禁文件爱好者';
+$wb['bad_header_lover_txt'] = '不良标题爱好者';
+$wb['add_new_record_txt'] = '添加策略记录';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_users.lng b/interface/web/mail/lib/lang/cn_spamfilter_users.lng
new file mode 100644
index 0000000000..c2e285cffe
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_users.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['priority_txt'] = '优先级';
+$wb['policy_id_txt'] = 'ç­–ç•¥';
+$wb['email_txt'] = '邮件(模式)';
+$wb['fullname_txt'] = '名称';
+$wb['local_txt'] = '本地';
+$wb['email_error_notempty'] = '邮件地址不能为空。';
+$wb['fullname_error_notempty'] = '名称不能为空。';
+$wb['10 - highest'] = '10 - 最高';
+$wb['5 - medium'] = '5 - 中等';
+$wb['1 - lowest'] = '1 - 最低';
+$wb['inherit_policy'] = '- 继承域设置 -';
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_users_list.lng b/interface/web/mail/lib/lang/cn_spamfilter_users_list.lng
new file mode 100644
index 0000000000..62bc4568d3
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_users_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '垃圾邮件过滤用户';
+$wb['local_txt'] = '本地';
+$wb['server_id_txt'] = '服务器';
+$wb['priority_txt'] = '优先级';
+$wb['policy_id_txt'] = 'ç­–ç•¥';
+$wb['fullname_txt'] = '姓名';
+$wb['email_txt'] = '电子邮件';
+$wb['add_new_record_txt'] = '添加垃圾邮件过滤用户';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_whitelist.lng b/interface/web/mail/lib/lang/cn_spamfilter_whitelist.lng
new file mode 100644
index 0000000000..0f4aba4762
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_whitelist.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['wb_txt'] = 'wb';
+$wb['rid_txt'] = '用户';
+$wb['email_txt'] = '邮箱';
+$wb['priority_txt'] = '优先级';
+$wb['active_txt'] = '启用';
+$wb['limit_spamfilter_wblist_txt'] = '您的帐户的白名单或黑名单记录已达到上限。';
+$wb['10 - highest'] = '10 - 最高';
+$wb['5 - medium'] = '5 - 中等';
+$wb['1 - lowest'] = '1 - 最低';
+?>
diff --git a/interface/web/mail/lib/lang/cn_spamfilter_whitelist_list.lng b/interface/web/mail/lib/lang/cn_spamfilter_whitelist_list.lng
new file mode 100644
index 0000000000..1f4af55127
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_spamfilter_whitelist_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '垃圾邮件过滤白名单';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['priority_txt'] = '优先级';
+$wb['rid_txt'] = '用户';
+$wb['email_txt'] = '加入白名单的邮件';
+$wb['add_new_record_txt'] = '添加白名单记录';
+?>
diff --git a/interface/web/mail/lib/lang/cn_user_quota_stats_list.lng b/interface/web/mail/lib/lang/cn_user_quota_stats_list.lng
new file mode 100644
index 0000000000..91f58605ae
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_user_quota_stats_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '邮箱配额';
+$wb['quota_txt'] = '配额';
+$wb['name_txt'] = '名称';
+$wb['email_txt'] = '电子邮件地址';
+$wb['used_txt'] = '已使用空间';
+$wb['percentage_txt'] = '已用 %';
+?>
diff --git a/interface/web/mail/lib/lang/cn_xmpp_domain.lng b/interface/web/mail/lib/lang/cn_xmpp_domain.lng
new file mode 100644
index 0000000000..b094c92862
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_xmpp_domain.lng
@@ -0,0 +1,62 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['client_group_id_txt'] = '客户';
+$wb['domain_txt'] = '域名';
+$wb['type_txt'] = '类型';
+$wb['active_txt'] = '激活';
+$wb['client_txt'] = '客户';
+$wb['management_method_txt'] = '用户账户管理';
+$wb['public_registration_txt'] = '启用公共注册';
+$wb['registration_url_txt'] = '注册 URL';
+$wb['registration_message_txt'] = '注册信息';
+$wb['domain_admins_txt'] = '域管理员 (JIDs)';
+$wb['use_pubsub_txt'] = '启用发布/订阅';
+$wb['use_proxy_txt'] = '启用字节流代理';
+$wb['use_anon_host_txt'] = '启用匿名主机';
+$wb['use_vjud_txt'] = '启用 VJUD 用户目录';
+$wb['vjud_opt_mode_txt'] = 'VJUD Opt 模式';
+$wb['use_muc_host_txt'] = '启用多用户聊天室';
+$wb['muc_name_txt'] = 'MUC 服务发现中的名称';
+$wb['muc_restrict_room_creation_txt'] = '创建聊天室的权限';
+$wb['muc_admins_txt'] = 'MUC 管理员 (JIDs)';
+$wb['use_pastebin_txt'] = '启用 Pastebin';
+$wb['pastebin_expire_after_txt'] = '过期时间 (小时)';
+$wb['pastebin_trigger_txt'] = 'Pastebin 触发';
+$wb['use_http_archive_txt'] = '启用 HTTP 聊天室存档';
+$wb['http_archive_show_join_txt'] = '在存档中显示加入信息';
+$wb['http_archive_show_status_txt'] = '在存档中显示状态变化';
+$wb['use_status_host_txt'] = '启用 XML 状态主机';
+$wb['cant_change_domainname_txt'] = '现有的 XMPP 域名不能更改域名。';
+$wb['about_registration_url_txt'] = '链接到您的注册表格。';
+$wb['about_registration_message_txt'] = '关于您的账户注册流程的说明。';
+$wb['no_corresponding_maildomain_txt'] = '找不到与用户管理相对应的邮件域。请先创建邮件域。';
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_key_txt'] = 'SSL 密钥';
+$wb['ssl_request_txt'] = 'SSL 请求';
+$wb['ssl_cert_txt'] = 'SSL 证书';
+$wb['ssl_bundle_txt'] = 'SSL 中间证书链';
+$wb['ssl_action_txt'] = 'SSL 操作';
+$wb['ssl_email_txt'] = '电子邮件地址';
+$wb['ssl_txt'] = 'SSL';
+$wb['error_ssl_state_empty'] = '省份/州为空。';
+$wb['error_ssl_locality_empty'] = '城市为空。';
+$wb['error_ssl_organisation_empty'] = 'SSL组织为空。';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL组织单位为空。';
+$wb['error_ssl_country_empty'] = 'SSL国家为空。';
+$wb['error_ssl_cert_empty'] = 'SSL证书字段为空。';
+$wb['ssl_state_error_regex'] = '无效的SSL状态。有效字符为:a-z、0-9和.,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = '无效的SSL位置。有效字符为:a-z、0-9和.,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = '无效的SSL组织。有效字符为:a-z、0-9和.,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = '无效的SSL组织单位。有效字符为:a-z、0-9和.,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = '无效的SSL国家。有效字符为:A-Z';
+$wb['none_txt'] = 'æ— ';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['ssl_error_isemail'] = '请为SSL证书生成输入一个有效的电子邮件地址';
+$wb['limit_xmppdomain_txt'] = '您的帐户的XMPP域的最大数量已达到。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_xmpp_domain_admin_list.lng b/interface/web/mail/lib/lang/cn_xmpp_domain_admin_list.lng
new file mode 100644
index 0000000000..ed06bd1387
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_xmpp_domain_admin_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'XMPP域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新域名';
+$wb['active_txt'] = '激活';
+$wb['sys_groupid_txt'] = '客户';
+?>
diff --git a/interface/web/mail/lib/lang/cn_xmpp_domain_list.lng b/interface/web/mail/lib/lang/cn_xmpp_domain_list.lng
new file mode 100644
index 0000000000..ba5e21824c
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_xmpp_domain_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'XMPP域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新域名';
+$wb['active_txt'] = '激活';
+?>
diff --git a/interface/web/mail/lib/lang/cn_xmpp_user.lng b/interface/web/mail/lib/lang/cn_xmpp_user.lng
new file mode 100644
index 0000000000..5b88ff175f
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_xmpp_user.lng
@@ -0,0 +1,15 @@
+<?php
+$wb['list_head_txt'] = 'XMPP 用户账户';
+$wb['jid_txt'] = 'Jabber ID';
+$wb['active_txt'] = '启用';
+$wb['cryptpwd_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['error_no_pwd'] = '密码为空。';
+$wb['password_txt'] = '密码';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['no_domain_perm'] = '您没有该域名的权限。';
+$wb['limit_xmpp_user_txt'] = '您的账户已达到最大 XMPP 账户数。';
+?>
diff --git a/interface/web/mail/lib/lang/cn_xmpp_user_list.lng b/interface/web/mail/lib/lang/cn_xmpp_user_list.lng
new file mode 100644
index 0000000000..60de5e2579
--- /dev/null
+++ b/interface/web/mail/lib/lang/cn_xmpp_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'XMPP 用户账号';
+$wb['jid_txt'] = 'Jabber ID';
+$wb['is_domain_admin_txt'] = '域管理员';
+$wb['is_muc_admin_txt'] = 'MUC 管理员';
+$wb['add_new_record_txt'] = '添加新用户';
+$wb['active_txt'] = '激活';
+?>
diff --git a/interface/web/mail/lib/lang/cz.lng b/interface/web/mail/lib/lang/cz.lng
index b393f56798..6f0d48ebd2 100644
--- a/interface/web/mail/lib/lang/cz.lng
+++ b/interface/web/mail/lib/lang/cz.lng
@@ -47,3 +47,4 @@ $wb['Statistics'] = 'Statistiky';
 $wb['Mailbox quota'] = 'Kvóty pro e-mailové schránky';
 $wb['add_header_txt'] = 'Do záhlaví (přidat \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Do předmětu (přidat \"***SPAM***\" na začátek)';
+$wb['inactive'] = 'inactive';
diff --git a/interface/web/mail/lib/lang/de.lng b/interface/web/mail/lib/lang/de.lng
index e0f1e7cd3b..69067b5a52 100644
--- a/interface/web/mail/lib/lang/de.lng
+++ b/interface/web/mail/lib/lang/de.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Empfänger';
 $wb['Mailbox quota'] = 'E-Mail Konto Speichernutzung';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/dk.lng b/interface/web/mail/lib/lang/dk.lng
index 3fe8d568ae..2c0789a3d0 100644
--- a/interface/web/mail/lib/lang/dk.lng
+++ b/interface/web/mail/lib/lang/dk.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Modtagere';
 $wb['Mailbox quota'] = 'Postboks kvota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/el.lng b/interface/web/mail/lib/lang/el.lng
index cb873eac2a..3374233feb 100644
--- a/interface/web/mail/lib/lang/el.lng
+++ b/interface/web/mail/lib/lang/el.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Παραλήπτες Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/en.lng b/interface/web/mail/lib/lang/en.lng
index c251fc1b2b..d90e575be1 100644
--- a/interface/web/mail/lib/lang/en.lng
+++ b/interface/web/mail/lib/lang/en.lng
@@ -50,3 +50,4 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds "X-Spam: Yes")';
 $wb['rewrite_subject_txt'] = 'Subject (adds "***SPAM***" at the beginning)';
+$wb['inactive'] = 'inactive';
diff --git a/interface/web/mail/lib/lang/es.lng b/interface/web/mail/lib/lang/es.lng
index fdf4e5b00d..982a51d567 100644
--- a/interface/web/mail/lib/lang/es.lng
+++ b/interface/web/mail/lib/lang/es.lng
@@ -47,4 +47,5 @@ $wb['Users'] = 'Usuarios';
 $wb['Whitelist'] = 'Lista blanca';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/fi.lng b/interface/web/mail/lib/lang/fi.lng
index 78a4328336..dc5314a38f 100644
--- a/interface/web/mail/lib/lang/fi.lng
+++ b/interface/web/mail/lib/lang/fi.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Välityksen vastaanottajat';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/fr.lng b/interface/web/mail/lib/lang/fr.lng
index a70f080295..539c2a3c53 100644
--- a/interface/web/mail/lib/lang/fr.lng
+++ b/interface/web/mail/lib/lang/fr.lng
@@ -47,4 +47,5 @@ $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Email'] = 'Email';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/hr.lng b/interface/web/mail/lib/lang/hr.lng
index 877f8827f5..14649665cd 100644
--- a/interface/web/mail/lib/lang/hr.lng
+++ b/interface/web/mail/lib/lang/hr.lng
@@ -47,4 +47,5 @@ $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['Domain'] = 'Domain';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/hu.lng b/interface/web/mail/lib/lang/hu.lng
index f3ffa4aef0..688d6d0c25 100644
--- a/interface/web/mail/lib/lang/hu.lng
+++ b/interface/web/mail/lib/lang/hu.lng
@@ -47,4 +47,5 @@ $wb['Server'] = 'Server';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/id.lng b/interface/web/mail/lib/lang/id.lng
index 3a2b5dfe45..8a6931ce70 100644
--- a/interface/web/mail/lib/lang/id.lng
+++ b/interface/web/mail/lib/lang/id.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Penerima Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/it.lng b/interface/web/mail/lib/lang/it.lng
index 15bc87ea3f..fcd15c2b1b 100644
--- a/interface/web/mail/lib/lang/it.lng
+++ b/interface/web/mail/lib/lang/it.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Destinatari inoltro';
 $wb['Mailbox quota'] = 'Quota Casella di Posta';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/ja.lng b/interface/web/mail/lib/lang/ja.lng
index 818a3ed126..dddd49c87b 100644
--- a/interface/web/mail/lib/lang/ja.lng
+++ b/interface/web/mail/lib/lang/ja.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/nl.lng b/interface/web/mail/lib/lang/nl.lng
index 6664809b46..19272584bd 100644
--- a/interface/web/mail/lib/lang/nl.lng
+++ b/interface/web/mail/lib/lang/nl.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay ontvangers';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/pl.lng b/interface/web/mail/lib/lang/pl.lng
index 17b7701992..c6050a6fe2 100644
--- a/interface/web/mail/lib/lang/pl.lng
+++ b/interface/web/mail/lib/lang/pl.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Odbiorcy przekierowania';
 $wb['Mailbox quota'] = 'Użycie skrzynek email';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/pt.lng b/interface/web/mail/lib/lang/pt.lng
index d47eb6183b..1fbc55240a 100644
--- a/interface/web/mail/lib/lang/pt.lng
+++ b/interface/web/mail/lib/lang/pt.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Recipientes de Relay';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/ro.lng b/interface/web/mail/lib/lang/ro.lng
index 0c0e85995e..51c4bdbdc2 100644
--- a/interface/web/mail/lib/lang/ro.lng
+++ b/interface/web/mail/lib/lang/ro.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/ru.lng b/interface/web/mail/lib/lang/ru.lng
index 1b7995e024..8c8a0c3c54 100644
--- a/interface/web/mail/lib/lang/ru.lng
+++ b/interface/web/mail/lib/lang/ru.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay получатели';
 $wb['Mailbox quota'] = 'Квота почтового ящика';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/se.lng b/interface/web/mail/lib/lang/se.lng
index 7a415aa901..88689b0d79 100644
--- a/interface/web/mail/lib/lang/se.lng
+++ b/interface/web/mail/lib/lang/se.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/sk.lng b/interface/web/mail/lib/lang/sk.lng
index 7b00f9d52c..ddef1ae73d 100644
--- a/interface/web/mail/lib/lang/sk.lng
+++ b/interface/web/mail/lib/lang/sk.lng
@@ -47,4 +47,5 @@ $wb['Relay Recipients'] = 'Relay Recipients';
 $wb['Mailbox quota'] = 'Mailbox quota';
 $wb['add_header_txt'] = 'Header (adds \"X-Spam: Yes\")';
 $wb['rewrite_subject_txt'] = 'Subject (adds \"***SPAM***\" at the beginning)';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/lib/lang/tr.lng b/interface/web/mail/lib/lang/tr.lng
index 52d1868b3e..e574f999d1 100644
--- a/interface/web/mail/lib/lang/tr.lng
+++ b/interface/web/mail/lib/lang/tr.lng
@@ -48,4 +48,5 @@ $wb['Global Filters'] = 'Genel Süzgeçler';
 $wb['Domain Alias'] = 'Takma Etki Alanı';
 $wb['Relay Recipients'] = 'Aktarılan Alıcılar';
 $wb['Mailbox quota'] = 'E-posta Kutusu Kotası';
+$wb['inactive'] = 'inactive';
 ?>
diff --git a/interface/web/mail/list/mail_blacklist.list.php b/interface/web/mail/list/mail_blacklist.list.php
index d51f31a7d8..bd6403092e 100644
--- a/interface/web/mail/list/mail_blacklist.list.php
+++ b/interface/web/mail/list/mail_blacklist.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_content_filter.list.php b/interface/web/mail/list/mail_content_filter.list.php
index 53767a153c..b5c1e09690 100644
--- a/interface/web/mail/list/mail_content_filter.list.php
+++ b/interface/web/mail/list/mail_content_filter.list.php
@@ -60,11 +60,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_domain.list.php b/interface/web/mail/list/mail_domain.list.php
index 5304ab6226..dd6067bb3c 100644
--- a/interface/web/mail/list/mail_domain.list.php
+++ b/interface/web/mail/list/mail_domain.list.php
@@ -83,7 +83,7 @@ if($_SESSION['s']['user']['typ'] == 'admin') {
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
diff --git a/interface/web/mail/list/mail_get.list.php b/interface/web/mail/list/mail_get.list.php
index 0a8c0dcc88..71f5fd16fd 100644
--- a/interface/web/mail/list/mail_get.list.php
+++ b/interface/web/mail/list/mail_get.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_relay_domain.list.php b/interface/web/mail/list/mail_relay_domain.list.php
index a6ff783482..70b744d004 100644
--- a/interface/web/mail/list/mail_relay_domain.list.php
+++ b/interface/web/mail/list/mail_relay_domain.list.php
@@ -86,11 +86,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_relay_recipient.list.php b/interface/web/mail/list/mail_relay_recipient.list.php
index af00d7c90c..e26a9a632c 100644
--- a/interface/web/mail/list/mail_relay_recipient.list.php
+++ b/interface/web/mail/list/mail_relay_recipient.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_spamfilter.list.php b/interface/web/mail/list/mail_spamfilter.list.php
index 09d3292bc7..5203a81515 100644
--- a/interface/web/mail/list/mail_spamfilter.list.php
+++ b/interface/web/mail/list/mail_spamfilter.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_transport.list.php b/interface/web/mail/list/mail_transport.list.php
index 3dd87e1710..a88676ba4a 100644
--- a/interface/web/mail/list/mail_transport.list.php
+++ b/interface/web/mail/list/mail_transport.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/mail_whitelist.list.php b/interface/web/mail/list/mail_whitelist.list.php
index b4c97f493f..f6aace0b74 100644
--- a/interface/web/mail/list/mail_whitelist.list.php
+++ b/interface/web/mail/list/mail_whitelist.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/spamfilter_blacklist.list.php b/interface/web/mail/list/spamfilter_blacklist.list.php
index 33e0b433a3..b873c88796 100644
--- a/interface/web/mail/list/spamfilter_blacklist.list.php
+++ b/interface/web/mail/list/spamfilter_blacklist.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/mail/list/spamfilter_users.list.php b/interface/web/mail/list/spamfilter_users.list.php
index d952640283..9279f05c46 100644
--- a/interface/web/mail/list/spamfilter_users.list.php
+++ b/interface/web/mail/list/spamfilter_users.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "local",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -82,11 +82,11 @@ $liste["item"][] = array( 'field'  => "priority",
 	'value'  => array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10));
 
 $liste["item"][] = array( 'field'  => "policy_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT id,policy_name FROM spamfilter_policy WHERE {AUTHSQL} ORDER BY policy_name',
 		'keyfield'=> 'id',
diff --git a/interface/web/mail/list/spamfilter_whitelist.list.php b/interface/web/mail/list/spamfilter_whitelist.list.php
index 0cd3333e69..d85ffc1914 100644
--- a/interface/web/mail/list/spamfilter_whitelist.list.php
+++ b/interface/web/mail/list/spamfilter_whitelist.list.php
@@ -58,11 +58,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -82,11 +82,11 @@ $liste["item"][] = array( 'field'  => "priority",
 	'value'  => array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, 10 => 10));
 
 $liste["item"][] = array( 'field'  => "rid",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT id,email FROM spamfilter_users WHERE {AUTHSQL} ORDER BY email',
 		'keyfield'=> 'id',
diff --git a/interface/web/mail/list/xmpp_domain.list.php b/interface/web/mail/list/xmpp_domain.list.php
index 191508db39..f0a29a043b 100644
--- a/interface/web/mail/list/xmpp_domain.list.php
+++ b/interface/web/mail/list/xmpp_domain.list.php
@@ -82,7 +82,7 @@ if($_SESSION['s']['user']['typ'] == 'admin') {
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
diff --git a/interface/web/mail/mail_user_edit.php b/interface/web/mail/mail_user_edit.php
index 8856ccc8d8..e435f6ab96 100644
--- a/interface/web/mail/mail_user_edit.php
+++ b/interface/web/mail/mail_user_edit.php
@@ -91,14 +91,15 @@ class page_action extends tform_actions {
 
 		// Getting Domains of the user
 		// $sql = "SELECT domain, server_id FROM mail_domain WHERE ".$app->tform->getAuthSQL('r').' ORDER BY domain';
-		$sql = "SELECT domain, server_id FROM mail_domain WHERE (".$app->tform->getAuthSQL('r').") AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain') ORDER BY domain";
+               $sql = "SELECT domain, server_id, active FROM mail_domain WHERE (".$app->tform->getAuthSQL('r').") AND domain NOT IN (SELECT SUBSTR(source,2) FROM mail_forwarding WHERE type = 'aliasdomain') ORDER BY domain";
 		$domains = $app->db->queryAllRecords($sql);
 		$domain_select = '';
 		if(is_array($domains)) {
 			foreach( $domains as $domain) {
 				$domain['domain'] = $app->functions->idn_decode($domain['domain']);
 				$selected = ($domain["domain"] == @$email_parts[1])?'SELECTED':'';
-				$domain_select .= "<option value='" . $app->functions->htmlentities($domain['domain']) . "' $selected>" . $app->functions->htmlentities($domain['domain']) . "</option>\r\n";
+				$domain_select .= "<option value='" . $app->functions->htmlentities($domain['domain']) . "' $selected>" . $app->functions->htmlentities($domain['domain']) .
+					($domain['active'] == 'n' ? ' (' . $app->lng('inactive') . ')': '') . "</option>\r\n";
 			}
 		}
 		$app->tpl->setVar("email_domain", $domain_select);
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index 97c85ba2ef..88d2fb0e23 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -6,7 +6,7 @@
                 <label class="col-sm-3 control-label"><em>*</em> {tmpl_var name='email_txt'}</label>
                 <div class="col-sm-9">
 				    <div class='input-group'>
-						<input type="text" id="email_local_part" name="email_local_part" value="{tmpl_var name='email_local_part'}" class="form-control" />
+                                               <input type="text" id="email_local_part" name="email_local_part" value="{tmpl_var name='email_local_part'}" class="form-control" onPaste="javascript: e = this; setTimeout(function(){if (/@/.test(e.value)) { parts = e.value.split('@'); $('#email_domain').val(parts.pop()); $('#email_domain').trigger('change'); e.value=parts.pop(); } }, 4);" onChange="javascript: if (/@/.test(this.value)) { parts = this.value.split('@'); $('#email_domain').val(parts.pop()); $('#email_domain').trigger('change'); this.value=parts.pop(); } " />
 						<span class='input-group-addon'>@</span>
                         <div class='input-group-field'>
 							<select name="email_domain" id="email_domain" class="form-control" style="height:50px;min-width:170px;">{tmpl_var name='email_domain'}</select>
diff --git a/interface/web/mailuser/lib/lang/cn.lng b/interface/web/mailuser/lib/lang/cn.lng
new file mode 100644
index 0000000000..71df9e621b
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['Email Account'] = '邮件账号';
+$wb['Overview'] = '概览';
+$wb['Password'] = '密码';
+$wb['Autoresponder'] = '自动回复';
+$wb['Send copy'] = '抄送';
+$wb['Spamfilter'] = '垃圾邮件过滤';
+$wb['Email Filters'] = '邮件过滤器';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_index.lng b/interface/web/mailuser/lib/lang/cn_index.lng
new file mode 100644
index 0000000000..1bfe800b81
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_index.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['page_head_txt'] = '邮箱设置';
+$wb['page_desc_txt'] = '在这里,您可以编辑电子邮件帐户的设置。';
+$wb['email_txt'] = '电子邮件地址';
+$wb['login_txt'] = '登录名';
+$wb['server_address_txt'] = '邮件服务器地址';
+$wb['cc_txt'] = '抄送到(CC)';
+$wb['quota_txt'] = '邮箱大小';
+$wb['unlimited_txt'] = '无限制';
+$wb['mb_txt'] = 'MB';
+$wb['none_txt'] = 'æ— ';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_autoresponder.lng b/interface/web/mailuser/lib/lang/cn_mail_user_autoresponder.lng
new file mode 100644
index 0000000000..93481f658f
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_autoresponder.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['mailbox_autoresponder_txt'] = '自动回复';
+$wb['autoresponder_subject'] = '外出办公回复';
+$wb['autoresponder_text_txt'] = '正文';
+$wb['autoresponder_txt'] = '启用';
+$wb['autoresponder_start_date_txt'] = '开始时间';
+$wb['autoresponder_start_date_isfuture'] = '开始时间不能为过去时间。';
+$wb['autoresponder_end_date_txt'] = '结束时间';
+$wb['autoresponder_end_date_isgreater'] = '必须设置结束时间,并且结束时间必须晚于开始时间。';
+$wb['autoresponder_active'] = '启用自动回复';
+$wb['now_txt'] = '立即';
+$wb['autoresponder_subject_txt'] = '主题';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_cc.lng b/interface/web/mailuser/lib/lang/cn_mail_user_cc.lng
new file mode 100644
index 0000000000..05b24f8674
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_cc.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['mailbox_cc_txt'] = '抄送邮件地址';
+$wb['cc_txt'] = '抄送给';
+$wb['email_txt'] = '邮件';
+$wb['cc_error_isemail'] = '抄送邮件地址无效';
+$wb['email_is_cc_error'] = '邮件地址和抄送邮件地址不能相同。';
+$wb['name_optional_txt'] = '(可选)';
+$wb['cc_note_txt'] = '(多个邮件地址请用逗号隔开)';
+$wb['forward_in_lda_txt'] = '邮件投递时抄送';
+$wb['tooltip_forward_in_lda_txt'] = '控制是否在投递到邮箱之前或之后将邮件副本转发。';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_filter.lng b/interface/web/mailuser/lib/lang/cn_mail_user_filter.lng
new file mode 100644
index 0000000000..83d1d7a3d5
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_filter.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['rulename_txt'] = '规则名称';
+$wb['action_txt'] = '操作';
+$wb['target_txt'] = '目标文件夹';
+$wb['active_txt'] = '启用';
+$wb['rulename_error_empty'] = '规则名称为空。';
+$wb['searchterm_is_empty'] = '搜索条件为空。';
+$wb['source_txt'] = '来源';
+$wb['target_error_regex'] = '目标文件夹只能包含以下字符:a-z、0-9、-、.、_、&、/ 和{space}';
+$wb['limit_mailfilter_txt'] = '已达到最大邮箱过滤器数量。';
+$wb['mailbox_filter_txt'] = '邮箱过滤器';
+$wb['subject_txt'] = '主题';
+$wb['from_txt'] = '发件人';
+$wb['to_txt'] = '收件人';
+$wb['list_id_txt'] = '列表ID';
+$wb['contains_txt'] = '包含';
+$wb['is_txt'] = '是';
+$wb['begins_with_txt'] = '以...开始';
+$wb['ends_with_txt'] = '以...结束';
+$wb['move_to_txt'] = '移动到';
+$wb['regex_txt'] = '正则匹配';
+$wb['delete_txt'] = '删除';
+$wb['header_txt'] = '邮件头';
+$wb['size_over_txt'] = '邮件大小超过(KB)';
+$wb['size_under_txt'] = '邮件大小小于(KB)';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_filter_list.lng b/interface/web/mailuser/lib/lang/cn_mail_user_filter_list.lng
new file mode 100644
index 0000000000..097ed94f1c
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_filter_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '邮件过滤规则';
+$wb['rulename_txt'] = '名称';
+$wb['add_new_record_txt'] = '添加新过滤器';
+$wb['page_txt'] = '页数';
+$wb['page_of_txt'] = '/';
+$wb['delete_confirmation'] = '确定要删除该邮件过滤器吗?';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_password.lng b/interface/web/mailuser/lib/lang/cn_mail_user_password.lng
new file mode 100644
index 0000000000..f1d7a78c1d
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_password.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['mailbox_password_txt'] = '邮箱密码';
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['email_txt'] = '邮件地址';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['password_click_to_set_txt'] = '点击设置';
+?>
diff --git a/interface/web/mailuser/lib/lang/cn_mail_user_spamfilter.lng b/interface/web/mailuser/lib/lang/cn_mail_user_spamfilter.lng
new file mode 100644
index 0000000000..0fb4c8d83b
--- /dev/null
+++ b/interface/web/mailuser/lib/lang/cn_mail_user_spamfilter.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['mailbox_spamfilter_txt'] = '垃圾邮件过滤器';
+$wb['spamfilter_txt'] = '垃圾邮件过滤器';
+$wb['email_txt'] = '电子邮件';
+$wb['inherit_policy'] = '- 继承域设置 -';
+$wb['policy_txt'] = 'ç­–ç•¥';
+?>
diff --git a/interface/web/monitor/lib/lang/cn.lng b/interface/web/monitor/lib/lang/cn.lng
new file mode 100644
index 0000000000..4300e454ec
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn.lng
@@ -0,0 +1,168 @@
+<?php
+$wb['Server online since'] = '服务器在线时间';
+$wb['Users online'] = '在线用户数';
+$wb['System load 1 minute'] = '系统负载 1 分钟';
+$wb['System load 5 minutes'] = '系统负载 5 分钟';
+$wb['System load 15 minutes'] = '系统负载 15 分钟';
+$wb['Server Load'] = '服务器负载';
+$wb['Disk usage'] = '磁盘使用情况';
+$wb['Memory usage'] = '内存使用情况';
+$wb['no_data_serverload_txt'] = '暂无服务器负载数据,请稍后再查看。';
+$wb['no_data_memusage_txt'] = '暂无内存使用情况数据,请稍后再查看。';
+$wb['no_data_diskusage_txt'] = '暂无磁盘使用情况数据,请稍后再查看。';
+$wb['no_data_database_size_txt'] = '暂无数据库使用情况数据,请稍后再查看。';
+$wb['no_data_cpuinfo_txt'] = '暂无 CPU 数据,请稍后再查看。';
+$wb['no_data_services_txt'] = '暂无服务状态数据,请稍后再查看。';
+$wb['no_data_updates_txt'] = '暂无更新数据,请稍后再查看。';
+$wb['no_data_raid_txt'] = '暂无 RAID 数据,请稍后再查看。';
+$wb['no_data_rkhunter_txt'] = '暂无 RKHunter 数据,请稍后再查看。';
+$wb['no_data_mailq_txt'] = '暂无邮件队列数据,请稍后再查看。';
+$wb['no_logdata_txt'] = '暂无日志数据,请稍后再查看。';
+$wb['Monitoring'] = '监控';
+$wb['Server to Monitor'] = '要监控的服务器';
+$wb['Logfiles'] = '日志文件';
+$wb['Status of services'] = '服务状态';
+$wb['No Refresh'] = '不刷新';
+$wb['minutes'] = '分钟';
+$wb['Overview'] = '总览';
+$wb['System State (All Servers)'] = '系统状态(所有服务器)';
+$wb['Hardware-Information'] = '硬件信息';
+$wb['CPU info'] = 'CPU 信息';
+$wb['Server State'] = '服务器状态';
+$wb['Update State'] = '更新状态';
+$wb['RAID state'] = 'RAID 状态';
+$wb['Server load'] = '服务器负载';
+$wb['Disk usage'] = '磁盘使用情况';
+$wb['Memory usage'] = '内存使用情况';
+$wb['Services'] = '服务';
+$wb['Mail-Queue'] = '邮件队列';
+$wb['Mail-Log'] = '邮件日志';
+$wb['Mail warn-Log'] = '邮件警告日志';
+$wb['Mail err-Log'] = '邮件错误日志';
+$wb['System-Log'] = '系统日志';
+$wb['ISPC Cron-Log'] = 'ISPC Cron 日志';
+$wb['Freshclam-Log'] = 'Freshclam 日志';
+$wb['Clamav-Log'] = 'Clamav 日志';
+$wb['ISPConfig-Log'] = 'ISPConfig日志';
+$wb['RKHunter-Log'] = 'RKHunter日志';
+$wb['Jobqueue'] = '作业队列';
+$wb['Data Log History'] = '数据日志历史记录';
+$wb['fail2ban-Log'] = 'fail2ban日志';
+$wb['MongoDB-Log'] = 'MongoDB日志';
+$wb['IPTables'] = 'IPTables';
+$wb['OpenVz VE BeanCounter'] = 'OpenVz VE BeanCounter';
+$wb['monitor_general_serverstate_txt'] = '服务器状态';
+$wb['monitor_general_systemstate_txt'] = '系统状态';
+$wb['monitor_diskusage_filesystem_txt'] = '文件系统';
+$wb['monitor_diskusage_type_txt'] = '类型';
+$wb['monitor_diskusage_size_txt'] = '大小';
+$wb['monitor_diskusage_used_txt'] = '已用';
+$wb['monitor_diskusage_available_txt'] = '可用';
+$wb['monitor_diskusage_usage_txt'] = '使用率%';
+$wb['monitor_diskusage_mounted_txt'] = '挂载到';
+$wb['monitor_database_name_txt'] = '数据库';
+$wb['monitor_database_size_txt'] = '大小';
+$wb['monitor_database_client_txt'] = '客户';
+$wb['monitor_database_domain_txt'] = '域名';
+$wb['monitor_logs_mail_txt'] = '邮件 - 日志';
+$wb['monitor_logs_mailwarn_txt'] = '邮件 - 警告日志';
+$wb['monitor_logs_mailerr_txt'] = '邮件 - 错误日志';
+$wb['monitor_logs_messages_txt'] = '系统消息 - 日志';
+$wb['monitor_logs_ispccron_txt'] = 'ISPConfig计划任务 - 日志';
+$wb['monitor_logs_letsencrypt_txt'] = 'Let\'s Encrypt - 日志';
+$wb['monitor_logs_freshclam_txt'] = 'Freshclam - 日志';
+$wb['monitor_logs_clamav_txt'] = 'ClamAV - 日志';
+$wb['monitor_logs_ispc_txt'] = 'ISPConfig - 日志';
+$wb['monitor_nosupportedraid1_txt'] = '目前我们支持"mdadm"或"mpt-status"来监控RAID。<br>在您的服务器上我们找不到任何一个。<br><br>这意味着我们现在无法支持您的RAID。';
+$wb['monitor_norkhunter_txt'] = 'RKHunter未安装,因此没有日志数据';
+$wb['monitor_serverstate_server_txt'] = '服务器';
+$wb['monitor_serverstate_kernel_txt'] = '内核';
+$wb['monitor_serverstate_state_txt'] = '状态';
+$wb['monitor_serverstate_unknown_txt'] = '未知';
+$wb['monitor_serverstate_info_txt'] = '信息';
+$wb['monitor_serverstate_warning_txt'] = '警告';
+$wb['monitor_serverstate_critical_txt'] = '严重';
+$wb['monitor_serverstate_error_txt'] = '错误';
+$wb['monitor_serverstate_moreinfo_txt'] = '更多信息...';
+$wb['monitor_serverstate_more_txt'] = '更多...';
+$wb['monitor_serverstate_fclamok_txt'] = '您的病毒防护正常';
+$wb['monitor_serverstate_fclamoutdated_txt'] = '您的病毒防护已过时!';
+$wb['monitor_serverstate_fclamunknown_txt'] = 'Freshclam:???';
+$wb['monitor_serverstate_hdok_txt'] = '您的硬盘空间状态正常';
+$wb['monitor_serverstate_hdgoingfull_txt'] = '您的硬盘空间即将满';
+$wb['monitor_serverstate_hdnearlyfull_txt'] = '您的硬盘空间接近满';
+$wb['monitor_serverstate_hdveryfull_txt'] = '您的硬盘空间已经非常满';
+$wb['monitor_serverstate_hdfull_txt'] = '您的硬盘已没有可用空间';
+$wb['monitor_serverstate_hdunknown_txt'] = '硬盘:???';
+$wb['monitor_serverstate_listok_txt'] = '正常';
+$wb['monitor_serverstate_listinfo_txt'] = '信息';
+$wb['monitor_serverstate_listwarning_txt'] = '警告';
+$wb['monitor_serverstate_listcritical_txt'] = '严重';
+$wb['monitor_serverstate_listerror_txt'] = '错误';
+$wb['monitor_serverstate_listunknown_txt'] = '未知';
+$wb['monitor_serverstate_loadok_txt'] = '您的服务器负载正常';
+$wb['monitor_serverstate_loadheavy_txt'] = '您的服务器负载较重';
+$wb['monitor_serverstate_loadhigh_txt'] = '您的服务器负载高';
+$wb['monitor_serverstate_loaghigher_txt'] = '您的服务器负载更高';
+$wb['monitor_serverstate_loadhighest_txt'] = '您的服务器负载最高';
+$wb['monitor_serverstate_loadunknown_txt'] = '服务器负载:???';
+$wb['monitor_serverstate_mailqok_txt'] = '您的邮件队列负载正常';
+$wb['monitor_serverstate_mailqheavy_txt'] = '您的邮件队列负载较重';
+$wb['monitor_serverstate_mailqhigh_txt'] = '您的邮件队列负载高';
+$wb['monitor_serverstate_mailqhigher_txt'] = '您的邮件队列负载更高';
+$wb['monitor_serverstate_mailqhighest_txt'] = '您的邮件队列负载最高';
+$wb['monitor_serverstate_mailqunknown_txt'] = '邮件队列:???';
+$wb['monitor_serverstate_raidok_txt'] = '您的 RAID 正常';
+$wb['monitor_serverstate_raidresync_txt'] = '您的 RAID 正在重新同步';
+$wb['monitor_serverstate_raidfault_txt'] = '您的 RAID 有一个故障磁盘,请尽快更换!';
+$wb['monitor_serverstate_raiderror_txt'] = '您的 RAID 已经无法工作';
+$wb['monitor_serverstate_raidunknown_txt'] = 'RAID 状态: ???';
+$wb['monitor_serverstate_servicesonline_txt'] = '所有需要的服务都已上线';
+$wb['monitor_serverstate_servicesoffline_txt'] = '一个或多个需要的服务已下线';
+$wb['monitor_serverstate_servicesunknown_txt'] = '服务: ???';
+$wb['monitor_serverstate_syslogok_txt'] = '系统日志状态良好';
+$wb['monitor_serverstate_syslogwarning_txt'] = '您的系统日志中有一些警告';
+$wb['monitor_serverstate_syslogerror_txt'] = '您的系统日志中有错误';
+$wb['monitor_serverstate_syslogunknown_txt'] = '系统日志: ???';
+$wb['monitor_serverstate_updatesok_txt'] = '您的系统已是最新的';
+$wb['monitor_serverstate_updatesneeded_txt'] = '有一个或多个组件需要更新';
+$wb['monitor_serverstate_updatesunknown_txt'] = '系统更新: ???';
+$wb['monitor_serverstate_beancounterok_txt'] = 'beancounter 状态良好';
+$wb['monitor_serverstate_beancounterinfo_txt'] = 'beancounter 中有一些故障';
+$wb['monitor_serverstate_beancounterwarning_txt'] = 'beancounter 中有一些故障';
+$wb['monitor_serverstate_beancountercritical_txt'] = 'beancounter 中有很多故障';
+$wb['monitor_serverstate_beancountererror_txt'] = 'beancounter 中有太多故障';
+$wb['monitor_services_online_txt'] = '上线';
+$wb['monitor_services_offline_txt'] = '下线';
+$wb['monitor_services_web_txt'] = 'Web 服务器:';
+$wb['monitor_services_ftp_txt'] = 'FTP 服务器:';
+$wb['monitor_services_smtp_txt'] = 'SMTP 服务器:';
+$wb['monitor_services_pop_txt'] = 'POP3 服务器:';
+$wb['monitor_services_imap_txt'] = 'IMAP 服务器:';
+$wb['monitor_services_mydns_txt'] = 'DNS-服务器:';
+$wb['monitor_services_mongodb_txt'] = 'MongoDB 服务器:';
+$wb['monitor_services_mysql_txt'] = 'MySQL 服务器:';
+$wb['monitor_settings_datafromdate_txt'] = '数据来自: ';
+$wb['monitor_settings_datetimeformat_txt'] = 'Y-m-d H:i';
+$wb['monitor_settings_refreshsq_txt'] = '刷新顺序:';
+$wb['monitor_settings_server_txt'] = '服务器';
+$wb['monitor_title_cpuinfo_txt'] = 'CPU 信息';
+$wb['monitor_title_updatestate_txt'] = '更新状态';
+$wb['monitor_title_mailq_txt'] = '邮件队列';
+$wb['monitor_title_raidstate_txt'] = 'RAID 状态';
+$wb['monitor_title_rkhunterlog_txt'] = 'RKHunter 日志';
+$wb['monitor_title_fail2ban_txt'] = 'Fail2Ban 日志';
+$wb['monitor_title_mongodb_txt'] = 'MongoDB 日志';
+$wb['monitor_title_iptables_txt'] = 'IPTables 规则';
+$wb['monitor_title_beancounter_txt'] = 'OpenVz VE BeanCounter';
+$wb['monitor_updates_nosupport_txt'] = '不支持此监控的 Linux 发行版';
+$wb['monitor_beancounter_nosupport_txt'] = '此服务器不是 OpenVz VE,没有 BeanCounter 信息';
+$wb['Monit'] = '监控';
+$wb['no_monit_url_defined_txt'] = '未定义 监控 URL。';
+$wb['no_permissions_to_view_monit_txt'] = '您没有访问 监控 的权限。';
+$wb['Munin'] = 'Munin';
+$wb['no_munin_url_defined_txt'] = '未定义 监控 URL。';
+$wb['no_permissions_to_view_munin_txt'] = '您没有访问 监控 的权限。';
+$wb['Database size'] = '数据库大小';
+$wb['MySQL Database size'] = 'MySQL 数据库大小';
+?>
diff --git a/interface/web/monitor/lib/lang/cn_datalog_list.lng b/interface/web/monitor/lib/lang/cn_datalog_list.lng
new file mode 100644
index 0000000000..3e2c3a8a7a
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn_datalog_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '任务队列';
+$wb['tstamp_txt'] = '日期';
+$wb['server_id_txt'] = '服务器';
+$wb['dbtable_txt'] = '数据库表';
+$wb['action_txt'] = '操作';
+$wb['status_txt'] = '状态';
+?>
diff --git a/interface/web/monitor/lib/lang/cn_dataloghistory_list.lng b/interface/web/monitor/lib/lang/cn_dataloghistory_list.lng
new file mode 100644
index 0000000000..3ca9c90a5a
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn_dataloghistory_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['list_head_txt'] = '数据日志历史记录';
+$wb['tstamp_txt'] = '日期';
+$wb['server_id_txt'] = '服务器';
+$wb['dbtable_txt'] = '数据库表';
+$wb['action_txt'] = '操作';
+$wb['status_txt'] = '状态';
+$wb['user_txt'] = '用户';
+?>
diff --git a/interface/web/monitor/lib/lang/cn_dataloghistory_undo.lng b/interface/web/monitor/lib/lang/cn_dataloghistory_undo.lng
new file mode 100644
index 0000000000..6004ed62e7
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn_dataloghistory_undo.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '数据日志历史记录条目';
+$wb['success_txt'] = '撤销成功';
+$wb['error_txt'] = '撤销期间出错:记录不再存在';
+$wb['error_undelete_txt'] = '撤销期间出错:具有主键的记录已存在。';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/monitor/lib/lang/cn_dataloghistory_view.lng b/interface/web/monitor/lib/lang/cn_dataloghistory_view.lng
new file mode 100644
index 0000000000..e640c2bd02
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn_dataloghistory_view.lng
@@ -0,0 +1,27 @@
+<?php
+$wb['i'] = '插入';
+$wb['u'] = 'æ›´æ–°';
+$wb['d'] = '删除';
+$wb['list_head_txt'] = '数据日志历史记录';
+$wb['id_txt'] = 'ID';
+$wb['timestamp_txt'] = '时间戳';
+$wb['table_txt'] = '表格';
+$wb['action_txt'] = '操作';
+$wb['session_id_txt'] = '会话ID';
+$wb['fields_txt'] = '字段';
+$wb['fields_inserted_txt'] = '插入的字段';
+$wb['fields_updated_txt'] = '更新的字段';
+$wb['fields_deleted_txt'] = '删除的字段';
+$wb['no_changes_txt'] = '没有变化(重新同步)';
+$wb['is_diff_txt'] = '差异已标出';
+$wb['is_diff_inserts_txt'] = '插入';
+$wb['is_diff_deletes_txt'] = '删除';
+$wb['field_txt'] = '字段';
+$wb['value_txt'] = '值';
+$wb['old_txt'] = 'æ—§';
+$wb['new_txt'] = 'æ–°';
+$wb['btn_cancel_txt'] = '返回';
+$wb['undo_txt'] = '撤销操作';
+$wb['undo_confirmation_txt'] = '确定要撤销此操作吗?';
+$wb['username_txt'] = '用户名';
+?>
diff --git a/interface/web/monitor/lib/lang/cn_syslog_list.lng b/interface/web/monitor/lib/lang/cn_syslog_list.lng
new file mode 100644
index 0000000000..1341cce7f8
--- /dev/null
+++ b/interface/web/monitor/lib/lang/cn_syslog_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'ISPConfig日志';
+$wb['tstamp_txt'] = '日期';
+$wb['server_id_txt'] = '服务器';
+$wb['loglevel_txt'] = '日志级别';
+$wb['message_txt'] = '消息';
+$wb['batch_delete_warnings_txt'] = '删除所有警告';
+$wb['batch_delete_errors_txt'] = '删除所有错误';
+$wb['batch_delete_confirmation'] = '您确定要确认所有日志条目吗?';
+?>
diff --git a/interface/web/sites/database_edit.php b/interface/web/sites/database_edit.php
index 60b26bc767..55c582eeda 100644
--- a/interface/web/sites/database_edit.php
+++ b/interface/web/sites/database_edit.php
@@ -369,7 +369,7 @@ class page_action extends tform_actions {
 			} else {
 				$remote_ips = explode(",", $global_config['default_remote_dbserver']);
 			}
-			if (!in_array($server_config['ip_address'], $default_remote_db)) { $remote_ips[] = $server_config['ip_address']; }
+			if (!in_array($server_config['ip_address'], $remote_ips)) { $remote_ips[] = $server_config['ip_address']; }
 
 			if($server_config['ip_address']!='') {
 				if($this->dataRecord['remote_access'] != 'y'){
@@ -459,7 +459,7 @@ class page_action extends tform_actions {
 				$remote_ips = explode(",", $global_config['default_remote_dbserver']);
 			}
 			
-			if (!in_array($server_config['ip_address'], $default_remote_db)) { $remote_ips[] = $server_config['ip_address']; }
+			if (!in_array($server_config['ip_address'], $remote_ips)) { $remote_ips[] = $server_config['ip_address']; }
 
 			if($server_config['ip_address']!='') {
 				if($this->dataRecord['remote_access'] != 'y'){
diff --git a/interface/web/sites/form/web_childdomain.tform.php b/interface/web/sites/form/web_childdomain.tform.php
index 6d4f96e437..36718f5c9d 100644
--- a/interface/web/sites/form/web_childdomain.tform.php
+++ b/interface/web/sites/form/web_childdomain.tform.php
@@ -168,7 +168,7 @@ if($childdomain_type == 'aliasdomain') {
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('' => 'no_redirect_txt', 'non_www_to_www' => 'domain.tld => www.domain.tld', 'www_to_non_www' => 'www.domain.tld => domain.tld', '*_domain_tld_to_domain_tld' => '*.doman.tld => domain.tld', '*_domain_tld_to_www_domain_tld' => '*.domain.tld => www.domain.tld', '*_to_domain_tld' => '* => domain.tld', '*_to_www_domain_tld' => '* => www.domain.tld')
+			'value'  => array('' => 'no_redirect_txt', 'non_www_to_www' => 'domain.tld => www.domain.tld', 'www_to_non_www' => 'www.domain.tld => domain.tld', '*_domain_tld_to_domain_tld' => '*.domain.tld => domain.tld', '*_domain_tld_to_www_domain_tld' => '*.domain.tld => www.domain.tld', '*_to_domain_tld' => '* => domain.tld', '*_to_www_domain_tld' => '* => www.domain.tld')
 		);
 
 }
diff --git a/interface/web/sites/form/web_vhost_domain.tform.php b/interface/web/sites/form/web_vhost_domain.tform.php
index 5c26f8254d..ba0d86f3eb 100644
--- a/interface/web/sites/form/web_vhost_domain.tform.php
+++ b/interface/web/sites/form/web_vhost_domain.tform.php
@@ -417,7 +417,7 @@ $form["tabs"]['redirect'] = array (
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
 			'default' => '',
-			'value'  => array('' => 'no_redirect_txt', 'non_www_to_www' => 'domain.tld => www.domain.tld', 'www_to_non_www' => 'www.domain.tld => domain.tld', '*_domain_tld_to_domain_tld' => '*.doman.tld => domain.tld', '*_domain_tld_to_www_domain_tld' => '*.domain.tld => www.domain.tld', '*_to_domain_tld' => '* => domain.tld', '*_to_www_domain_tld' => '* => www.domain.tld')
+			'value'  => array('' => 'no_redirect_txt', 'non_www_to_www' => 'domain.tld => www.domain.tld', 'www_to_non_www' => 'www.domain.tld => domain.tld', '*_domain_tld_to_domain_tld' => '*.domain.tld => domain.tld', '*_domain_tld_to_www_domain_tld' => '*.domain.tld => www.domain.tld', '*_to_domain_tld' => '* => domain.tld', '*_to_www_domain_tld' => '* => www.domain.tld')
 		),
 		'rewrite_rules' => array (
 			'datatype' => 'TEXT',
diff --git a/interface/web/sites/lib/lang/cn.lng b/interface/web/sites/lib/lang/cn.lng
new file mode 100644
index 0000000000..adcbb3902a
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn.lng
@@ -0,0 +1,35 @@
+<?php
+$wb['Websites'] = '网站';
+$wb['Website'] = '网站';
+$wb['Subdomain'] = '网站子域名';
+$wb['Aliasdomain'] = '网站别名域名';
+$wb['Database'] = '数据库';
+$wb['Database User'] = '数据库用户';
+$wb['Web Access'] = '网站访问';
+$wb['FTP-User'] = 'FTP-账户';
+$wb['Webdav-User'] = 'WebDAV-用户';
+$wb['Folder'] = '受保护的文件夹';
+$wb['Folder users'] = '受保护的文件夹用户';
+$wb['Command Line'] = '命令行';
+$wb['Shell-User'] = 'Shell用户';
+$wb['Cron Jobs'] = '定时任务';
+$wb['Statistics'] = '统计信息';
+$wb['Web traffic'] = '网站流量';
+$wb['Website quota (Harddisk)'] = '网站配额 (硬盘)';
+$wb['Cron'] = '定时任务';
+$wb['Stats'] = '统计信息';
+$wb['Shell'] = 'Shell';
+$wb['Webdav'] = 'WebDAV';
+$wb['FTP'] = 'FTP';
+$wb['Options'] = '选项';
+$wb['Domain'] = '域名';
+$wb['Redirect'] = '重定向';
+$wb['SSL'] = 'SSL';
+$wb['Sites'] = '网站';
+$wb['APS Installer'] = 'APS安装程序';
+$wb['Available packages'] = '可用包';
+$wb['Installed packages'] = '已安装的包';
+$wb['Update Packagelist'] = '更新软件包列表';
+$wb['Subdomain (Vhost)'] = '网站子域名(Vhost)';
+$wb['error_proxy_requires_url'] = '重定向类型"proxy"需要一个URL作为重定向路径。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_aps.lng b/interface/web/sites/lib/lang/cn_aps.lng
new file mode 100644
index 0000000000..ee1546f15e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_aps.lng
@@ -0,0 +1,63 @@
+<?php
+$wb['overview_txt'] = '概览';
+$wb['administration_txt'] = '管理';
+$wb['available_packages_txt'] = '可用的包';
+$wb['installed_packages_txt'] = '已安装的包';
+$wb['yes_txt'] = '是';
+$wb['no_txt'] = '否';
+$wb['invalid_id_txt'] = '未提供有效的ID。';
+$wb['details_txt'] = '详情';
+$wb['version_txt'] = '版本';
+$wb['category_txt'] = '分类';
+$wb['homepage_txt'] = '主页';
+$wb['supported_languages_txt'] = '支持的语言';
+$wb['description_txt'] = '描述';
+$wb['config_script_txt'] = '配置脚本';
+$wb['installed_size_txt'] = '安装后的大小';
+$wb['license_txt'] = '许可证';
+$wb['screenshots_txt'] = '屏幕截图';
+$wb['changelog_txt'] = '变更日志';
+$wb['server_requirements_txt'] = '服务器要求';
+$wb['php_extensions_txt'] = 'PHP扩展';
+$wb['php_settings_txt'] = 'PHP设置';
+$wb['supported_php_versions_txt'] = '支持的PHP版本';
+$wb['database_txt'] = '数据库';
+$wb['settings_txt'] = '设置';
+$wb['install_package_txt'] = '安装此包';
+$wb['installation_txt'] = '安装';
+$wb['install_location_txt'] = '安装位置';
+$wb['btn_install_txt'] = '安装';
+$wb['btn_cancel_txt'] = '取消';
+$wb['acceptance_txt'] = '我接受许可协议';
+$wb['acceptance_text_txt'] = '是的,我已阅读许可协议并同意。';
+$wb['install_language_txt'] = '界面语言';
+$wb['new_database_password_txt'] = '新数据库密码';
+$wb['basic_settings_txt'] = '基本设置';
+$wb['package_settings_txt'] = '包设置';
+$wb['error_main_domain'] = '安装路径的域名无效。';
+$wb['error_no_main_location'] = '您未提供有效的安装路径。';
+$wb['error_inv_main_location'] = '给定的安装路径文件夹无效。';
+$wb['error_license_agreement'] = '为了继续操作,您必须接受许可协议。';
+$wb['error_no_database_pw'] = '您未提供有效的数据库密码。';
+$wb['error_short_database_pw'] = '请使用更长的数据库密码。';
+$wb['error_no_value_for'] = '字段“%s”不能为空。';
+$wb['error_short_value_for'] = '字段“%s”需要更长的输入值。';
+$wb['error_long_value_for'] = '字段“%s”需要更短的输入值。';
+$wb['error_inv_value_for'] = '您已为字段“%s”输入了无效值。';
+$wb['error_inv_email_for'] = '您已为字段“%s”输入了无效的电子邮件地址。';
+$wb['error_inv_domain_for'] = '您已为字段“%s”输入了无效的域名。';
+$wb['error_inv_integer_for'] = '您已为字段“%s”输入了无效的数字。';
+$wb['error_inv_float_for'] = '您已为字段“%s”输入了无效的浮点数。';
+$wb['error_used_location'] = '安装路径已经包含一个软件包安装。';
+$wb['installation_task_txt'] = '安装计划';
+$wb['installation_error_txt'] = '安装错误';
+$wb['installation_success_txt'] = '已安装';
+$wb['installation_remove_txt'] = '卸载计划';
+$wb['packagelist_update_finished_txt'] = 'APS 软件包列表更新完成。';
+$wb['limit_aps_txt'] = '您的账户已达到最大的 APS 实例数量。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['password_strength_txt'] = '密码强度';
+?>
diff --git a/interface/web/sites/lib/lang/cn_aps_instances_list.lng b/interface/web/sites/lib/lang/cn_aps_instances_list.lng
new file mode 100644
index 0000000000..4b9f22d385
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_aps_instances_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = '已安装的软件包';
+$wb['name_txt'] = '名称';
+$wb['version_txt'] = '版本';
+$wb['customer_txt'] = '客户';
+$wb['status_txt'] = '状态';
+$wb['install_location_txt'] = '安装位置';
+$wb['pkg_delete_confirmation'] = '您确定要删除此安装吗?';
+$wb['filter_txt'] = '搜索';
+$wb['delete_txt'] = '删除';
+?>
diff --git a/interface/web/sites/lib/lang/cn_aps_packages_list.lng b/interface/web/sites/lib/lang/cn_aps_packages_list.lng
new file mode 100644
index 0000000000..780fc73a42
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_aps_packages_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '可用软件包';
+$wb['name_txt'] = '名称';
+$wb['version_txt'] = '版本';
+$wb['category_txt'] = '类别';
+$wb['status_txt'] = '未锁定';
+$wb['filter_txt'] = '搜索';
+?>
diff --git a/interface/web/sites/lib/lang/cn_aps_update_packagelist.lng b/interface/web/sites/lib/lang/cn_aps_update_packagelist.lng
new file mode 100644
index 0000000000..2f9088a3e0
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_aps_update_packagelist.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['head_txt'] = '更新包列表';
+$wb['list_desc_txt'] = '';
+$wb['btn_start_txt'] = '更新包列表';
+$wb['btn_cancel_txt'] = '取消';
+$wb['legend_txt'] = '在这里,您可以更新可用软件包的列表。请注意,这可能需要最多五分钟。如果您喜欢,您可以离开此页面,该进程将在后台继续运行。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_backup_stats_list.lng b/interface/web/sites/lib/lang/cn_backup_stats_list.lng
new file mode 100644
index 0000000000..55d7acb26a
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_backup_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '备份统计信息';
+$wb['database_name_txt'] = '';
+$wb['active_txt'] = '启用';
+$wb['domain_txt'] = '域名';
+$wb['backup_count_txt'] = '备份次数';
+$wb['backup_server_txt'] = '服务器';
+$wb['backup_interval_txt'] = '备份间隔/次数';
+$wb['backup_size_txt'] = '备份大小';
+?>
diff --git a/interface/web/sites/lib/lang/cn_cron.lng b/interface/web/sites/lib/lang/cn_cron.lng
new file mode 100644
index 0000000000..5b517d762e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_cron.lng
@@ -0,0 +1,26 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '父网站';
+$wb['active_txt'] = '启用';
+$wb['client_txt'] = '客户';
+$wb['run_min_txt'] = '分钟';
+$wb['run_hour_txt'] = '小时';
+$wb['run_mday_txt'] = '月份中的天';
+$wb['run_month_txt'] = '月份';
+$wb['run_wday_txt'] = '星期几';
+$wb['command_txt'] = '要运行的命令(通过 sh 执行命令,通过 wget 执行 URL)';
+$wb['limit_cron_txt'] = '已达到允许的最大计划任务数。';
+$wb['limit_cron_frequency_txt'] = '计划任务频率超过了允许的限制。';
+$wb['run_min_error_format'] = '分钟格式无效。';
+$wb['run_hour_error_format'] = '小时格式无效。';
+$wb['run_mday_error_format'] = '月份中的天格式无效。';
+$wb['run_month_error_format'] = '月份格式无效。';
+$wb['run_wday_error_format'] = '星期几格式无效。';
+$wb['command_error_format'] = '命令格式无效。请注意,在 URL 调用的情况下,仅允许使用 http/https。';
+$wb['unknown_fieldtype_error'] = '使用了未知的字段类型。';
+$wb['server_id_error_empty'] = '服务器 ID 为空。';
+$wb['command_hint_txt'] = '例如,/var/www/clients/clientX/webY/myscript.sh 或 https://www.mydomain.com/path/script.php,您可以使用 [web_root] 占位符,它将被 /var/www/clients/clientX/webY/web 替换。';
+$wb['log_output_txt'] = '记录输出';
+$wb['limit_cron_url_txt'] = '仅限 URL 计划任务。请将以 https:// 开头的 URL 作为计划任务命令输入。';
+$wb['command_error_empty'] = '命令为空。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_cron_list.lng b/interface/web/sites/lib/lang/cn_cron_list.lng
new file mode 100644
index 0000000000..ace97e23a9
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_cron_list.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['list_head_txt'] = '计划任务';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['run_min_txt'] = '分钟';
+$wb['run_hour_txt'] = '小时';
+$wb['run_mday_txt'] = '每月日期';
+$wb['run_month_txt'] = '月份';
+$wb['run_wday_txt'] = '星期';
+$wb['command_txt'] = '命令';
+$wb['add_new_cron_txt'] = '添加新的计划任务';
+$wb['parent_domain_id_txt'] = '网站';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database.lng b/interface/web/sites/lib/lang/cn_database.lng
new file mode 100644
index 0000000000..d1c9180fbb
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database.lng
@@ -0,0 +1,50 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['type_txt'] = '类型';
+$wb['database_name_txt'] = '数据库名称';
+$wb['database_user_txt'] = '数据库用户';
+$wb['database_ro_user_txt'] = '只读数据库用户';
+$wb['optional_txt'] = '可选';
+$wb['database_password_txt'] = '数据库密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['database_charset_txt'] = '数据库字符集';
+$wb['select_dbuser_txt'] = '选择数据库用户';
+$wb['no_dbuser_txt'] = 'æ— ';
+$wb['remote_access_txt'] = '远程访问';
+$wb['remote_ips_txt'] = '远程访问 IP(用逗号分隔,留空表示“任意”)';
+$wb['database_remote_error_ips'] = '输入的 IP 地址中至少有一个无效。';
+$wb['client_txt'] = '客户';
+$wb['active_txt'] = '启用';
+$wb['database_client_differs_txt'] = '父网站的客户与数据库不匹配。';
+$wb['database_name_error_empty'] = '数据库名称为空。';
+$wb['database_name_error_unique'] = '服务器上已经存在此名称的数据库。要获得唯一名称,例如在数据库名称前加上您的域名。';
+$wb['database_name_error_regex'] = '无效的数据库名称。数据库名称可以包含这些字符:a-z、A-Z、0-9 和下划线。长度:2-64 个字符。';
+$wb['database_user_error_empty'] = '数据库用户为空。';
+$wb['database_user_error_unique'] = '服务器上已经存在此名称的数据库用户。要获得唯一名称,例如在用户名前加上您的域名。';
+$wb['database_user_error_regex'] = '无效的数据库用户名。用户名可以包含这些字符:a-z、A-Z、0-9 和下划线。长度:2-64 个字符。';
+$wb['limit_database_txt'] = '已达到最大数据库数量。';
+$wb['database_name_change_txt'] = '无法更改数据库名称。';
+$wb['database_user_missing_txt'] = '请为此数据库选择一个数据库用户。';
+$wb['database_charset_change_txt'] = '无法更改数据库字符集。';
+$wb['database_name_error_len'] = '数据库名称 - {db} - 过长。最大数据库名称长度(包括前缀)为 64 个字符。';
+$wb['database_user_error_len'] = '数据库用户名 - {user} - 过长。最大数据库用户名长度(包括前缀)为 16 个字符。';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['database_site_error_empty'] = '请选择数据库所属的网站。';
+$wb['select_site_txt'] = '- 选择网站 -';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['globalsearch_resultslimit_of_txt'] = 'çš„';
+$wb['globalsearch_resultslimit_results_txt'] = '结果';
+$wb['globalsearch_noresults_text_txt'] = '没有结果。';
+$wb['globalsearch_noresults_limit_txt'] = '0个结果';
+$wb['globalsearch_searchfield_watermark_txt'] = '搜索';
+$wb['globalsearch_suggestions_text_txt'] = '建议';
+$wb['limit_database_quota_txt'] = '数据库配额';
+$wb['limit_database_quota_error_notint'] = '数据库配额必须是数字。';
+$wb['limit_database_quota_free_txt'] = '最大可用的数据库配额 ';
+$wb['limit_database_quota_not_0_txt'] = '数据库配额不能为0。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_admin_list.lng b/interface/web/sites/lib/lang/cn_database_admin_list.lng
new file mode 100644
index 0000000000..fc1226c388
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_admin_list.lng
@@ -0,0 +1,12 @@
+<?php
+$wb['list_head_txt'] = '数据库';
+$wb['active_txt'] = '启用';
+$wb['remote_access_txt'] = '远程访问';
+$wb['type_txt'] = '类型';
+$wb['server_id_txt'] = '服务器';
+$wb['database_user_txt'] = '数据库用户';
+$wb['database_name_txt'] = '数据库名称';
+$wb['add_new_record_txt'] = '添加新数据库';
+$wb['sys_groupid_txt'] = '客户';
+$wb['parent_domain_id_txt'] = '网站';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_list.lng b/interface/web/sites/lib/lang/cn_database_list.lng
new file mode 100644
index 0000000000..99395324bf
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_list.lng
@@ -0,0 +1,11 @@
+<?php
+$wb['list_head_txt'] = '数据库';
+$wb['active_txt'] = '启用';
+$wb['remote_access_txt'] = '远程访问';
+$wb['type_txt'] = '类型';
+$wb['server_id_txt'] = '服务器';
+$wb['database_user_txt'] = '数据库用户';
+$wb['database_name_txt'] = '数据库名称';
+$wb['add_new_record_txt'] = '添加新数据库';
+$wb['parent_domain_id_txt'] = '网站';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_quota_stats_list.lng b/interface/web/sites/lib/lang/cn_database_quota_stats_list.lng
new file mode 100644
index 0000000000..0292e7e9ec
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_quota_stats_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['database_txt'] = '数据库';
+$wb['server_name_txt'] = '服务器';
+$wb['client_txt'] = '客户';
+$wb['used_txt'] = '已用空间';
+$wb['quota_txt'] = '配额';
+$wb['percentage_txt'] = '使用百分比';
+$wb['list_head_txt'] = '数据库配额';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_user.lng b/interface/web/sites/lib/lang/cn_database_user.lng
new file mode 100644
index 0000000000..2d46e78c92
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_user.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['database_user_txt'] = '数据库用户';
+$wb['database_password_txt'] = '数据库密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['client_txt'] = '客户';
+$wb['active_txt'] = '启用';
+$wb['database_user_error_empty'] = '数据库用户为空。';
+$wb['database_user_error_unique'] = '服务器上已存在使用该名称的数据库用户。要获得唯一的名称,例如在用户名之前加上您的域名。';
+$wb['database_user_error_regex'] = '无效的数据库用户名。用户名可以包含以下字符:a-z、A-Z、0-9和下划线。长度:2 - 64个字符。';
+$wb['database_user_error_len'] = '数据库用户名-{user}太长。最大的数据库用户名长度包括前缀为16个字符。';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['globalsearch_resultslimit_of_txt'] = 'çš„';
+$wb['globalsearch_resultslimit_results_txt'] = '结果';
+$wb['globalsearch_noresults_text_txt'] = '没有结果。';
+$wb['globalsearch_noresults_limit_txt'] = '0个结果';
+$wb['globalsearch_searchfield_watermark_txt'] = '搜索';
+$wb['globalsearch_suggestions_text_txt'] = '建议';
+$wb['limit_database_user_txt'] = '已达到数据库用户的最大数量。';
+$wb['database_password_error_empty'] = '数据库密码为空。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_user_admin_list.lng b/interface/web/sites/lib/lang/cn_database_user_admin_list.lng
new file mode 100644
index 0000000000..1e93752ba1
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_user_admin_list.lng
@@ -0,0 +1,6 @@
+<?php
+$wb['list_head_txt'] = '数据库用户';
+$wb['database_user_txt'] = '数据库用户名';
+$wb['add_new_record_txt'] = '添加新用户';
+$wb['sys_groupid_txt'] = '客户';
+?>
diff --git a/interface/web/sites/lib/lang/cn_database_user_list.lng b/interface/web/sites/lib/lang/cn_database_user_list.lng
new file mode 100644
index 0000000000..fb124188ba
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_database_user_list.lng
@@ -0,0 +1,5 @@
+<?php
+$wb['list_head_txt'] = '数据库用户';
+$wb['database_user_txt'] = '数据库用户';
+$wb['add_new_record_txt'] = '添加新用户';
+?>
diff --git a/interface/web/sites/lib/lang/cn_ftp_sites_stats_list.lng b/interface/web/sites/lib/lang/cn_ftp_sites_stats_list.lng
new file mode 100644
index 0000000000..c14c699a3e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_ftp_sites_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = 'FTP流量';
+$wb['domain_txt'] = '域名';
+$wb['this_month_txt'] = '本月';
+$wb['last_month_txt'] = '上月';
+$wb['this_year_txt'] = '今年';
+$wb['last_year_txt'] = '去年';
+$wb['sum_txt'] = '总计(下载 + 上传)';
+$wb['in_out_txt'] = '下载/上传';
+?>
diff --git a/interface/web/sites/lib/lang/cn_ftp_user.lng b/interface/web/sites/lib/lang/cn_ftp_user.lng
new file mode 100644
index 0000000000..39ab56ee5e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_ftp_user.lng
@@ -0,0 +1,36 @@
+<?php
+$wb['uid_txt'] = '用户标识符 (UID)';
+$wb['gid_txt'] = '组标识符 (GID)';
+$wb['dir_txt'] = '目录';
+$wb['quota_files_txt'] = '文件配额';
+$wb['quota_files_unity_txt'] = '文件数';
+$wb['ul_ratio_txt'] = '上传比率';
+$wb['dl_ratio_txt'] = '下载比率';
+$wb['ul_bandwidth_txt'] = '上传带宽';
+$wb['dl_bandwidth_txt'] = '下载带宽';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['quota_size_txt'] = '硬盘配额';
+$wb['active_txt'] = '激活';
+$wb['limit_ftp_user_txt'] = '您的帐户的 FTP 用户的最大数量已达到。';
+$wb['username_error_empty'] = '用户名为空。';
+$wb['username_error_unique'] = '用户名必须唯一。';
+$wb['username_error_regex'] = '用户名包含不允许的字符。';
+$wb['quota_size_error_empty'] = '配额为空。';
+$wb['uid_error_empty'] = 'UID为空。';
+$wb['uid_error_empty'] = 'GID为空。';
+$wb['directory_error_empty'] = '目录为空。';
+$wb['directory_error_notinweb'] = '目录不在 Web 根目录内。';
+$wb['parent_domain_id_error_empty'] = '未选择网站。';
+$wb['quota_size_error_regex'] = '配额:输入-1表示无限制或输入大于0的数字';
+$wb['dir_dot_error'] = '路径中不允许使用 .. 。';
+$wb['dir_slashdot_error'] = '路径中不允许使用 ./ 。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['expires_txt'] = '过期时间';
+?>
diff --git a/interface/web/sites/lib/lang/cn_ftp_user_list.lng b/interface/web/sites/lib/lang/cn_ftp_user_list.lng
new file mode 100644
index 0000000000..72c33af81f
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_ftp_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'FTP用户';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['username_txt'] = '用户名';
+$wb['add_new_record_txt'] = '添加FTP用户';
+?>
diff --git a/interface/web/sites/lib/lang/cn_shell_user.lng b/interface/web/sites/lib/lang/cn_shell_user.lng
new file mode 100644
index 0000000000..058368312a
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_shell_user.lng
@@ -0,0 +1,36 @@
+<?php
+$wb['puser_txt'] = 'Web 用户名';
+$wb['pgroup_txt'] = 'Web 用户组';
+$wb['shell_txt'] = 'Shell';
+$wb['dir_txt'] = '基础目录';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '站点';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['chroot_txt'] = 'Chroot Shell';
+$wb['quota_size_txt'] = '磁盘配额';
+$wb['active_txt'] = '启用';
+$wb['username_error_empty'] = '用户名为空。';
+$wb['username_error_unique'] = '用户名必须唯一。';
+$wb['username_error_regex'] = '用户名包含了不允许的字符。';
+$wb['quota_size_error_empty'] = '磁盘配额为空。';
+$wb['uid_error_empty'] = 'GID 为空。';
+$wb['directory_error_empty'] = '目录为空。';
+$wb['limit_shell_user_txt'] = '已达到 shell 用户的最大数量。';
+$wb['parent_domain_id_error_empty'] = '未选择网站。';
+$wb['ssh_rsa_txt'] = 'SSH-RSA 公钥(用于基于密钥的登录)';
+$wb['dir_dot_error'] = '路径中不能包含 ..。';
+$wb['dir_slashdot_error'] = '路径中不能包含 ./。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '确认密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['username_must_not_exceed_32_chars_txt'] = '用户名不能超过 32 个字符。';
+$wb['username_not_allowed_txt'] = '用户名不允许。';
+$wb['invalid_system_user_or_group_txt'] = '无效的系统用户或用户组。';
+$wb['directory_error_regex'] = '无效的目录。';
+$wb['shell_error_regex'] = '无效的 shell。';
+$wb['invalid_username_txt'] = '无效的用户名。';
+$wb['directory_error_notinweb'] = '目录必须在 web 根目录内。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_shell_user_list.lng b/interface/web/sites/lib/lang/cn_shell_user_list.lng
new file mode 100644
index 0000000000..5cc52d736f
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_shell_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Shell用户';
+$wb['active_txt'] = '状态';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['username_txt'] = '用户名';
+$wb['add_new_record_txt'] = '添加新Shell用户';
+?>
diff --git a/interface/web/sites/lib/lang/cn_user_quota_stats_list.lng b/interface/web/sites/lib/lang/cn_user_quota_stats_list.lng
new file mode 100644
index 0000000000..39b7e48b89
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_user_quota_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '网站硬盘配额';
+$wb['domain_txt'] = '域名 / 网站';
+$wb['system_user_txt'] = 'Linux 用户';
+$wb['used_txt'] = '已使用空间';
+$wb['hard_txt'] = '硬限制';
+$wb['soft_txt'] = '软限制';
+$wb['files_txt'] = '单个文件';
+$wb['percentage_txt'] = '已用 %';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_aliasdomain.lng b/interface/web/sites/lib/lang/cn_web_aliasdomain.lng
new file mode 100644
index 0000000000..2b0e5a98a8
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_aliasdomain.lng
@@ -0,0 +1,118 @@
+<?php
+$wb['domain_txt'] = '别名域名';
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份数量';
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_key_txt'] = 'SSL密钥';
+$wb['ssl_request_txt'] = 'SSL请求';
+$wb['ssl_cert_txt'] = 'SSL证书';
+$wb['ssl_bundle_txt'] = 'SSL中间证书链';
+$wb['ssl_action_txt'] = 'SSL操作';
+$wb['ssl_domain_txt'] = 'SSL域名';
+$wb['server_id_txt'] = '服务器';
+$wb['web_folder_error_regex'] = '输入的文件夹无效。请勿输入斜杠。';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '站点';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R(临时重定向)';
+$wb['l_redirect_txt'] = 'L(最后重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L(临时重定向+最后一条规则)';
+$wb['r_301_l_redirect_txt'] = 'R = 301,L(永久重定向+最后一条规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '启用';
+$wb['document_root_txt'] = '文档根目录';
+$wb['system_user_txt'] = 'Linux用户';
+$wb['system_group_txt'] = 'Linux组';
+$wb['ip_address_txt'] = 'IPv4地址';
+$wb['ipv6_address_txt'] = 'IPv6地址';
+$wb['vhost_type_txt'] = 'VHost类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['errordocs_txt'] = '自定义错误页面';
+$wb['subdomain_txt'] = '自动生成子域名';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的账户的网站数量已达到上限';
+$wb['limit_web_aliasdomain_txt'] = '您的账户的别名域名数量已达到上限';
+$wb['limit_web_subdomain_txt'] = '您的账户的子域名数量已达到上限';
+$wb['apache_directives_txt'] = 'Apache 配置';
+$wb['domain_error_empty'] = '域名不能为空';
+$wb['domain_error_unique'] = '已有同名的网站或子/别名域名';
+$wb['domain_error_regex'] = '域名格式不正确';
+$wb['domain_error_autosub'] = '已有相同的子域名';
+$wb['hd_quota_error_empty'] = '硬盘空间配额不能为空或为0';
+$wb['traffic_quota_error_empty'] = '流量配额不能为空';
+$wb['error_ssl_state_empty'] = 'SSL 状态不能为空';
+$wb['error_ssl_locality_empty'] = 'SSL 地点不能为空';
+$wb['error_ssl_organisation_empty'] = 'SSL 组织不能为空';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL 组织单位不能为空';
+$wb['error_ssl_country_empty'] = 'SSL 国家不能为空';
+$wb['error_ssl_cert_empty'] = 'SSL 证书字段不能为空';
+$wb['client_group_id_txt'] = '客户组';
+$wb['stats_password_txt'] = '设置网站统计密码';
+$wb['allow_override_txt'] = 'Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = '最大可用硬盘配额';
+$wb['ssl_state_error_regex'] = 'SSL 状态不正确,仅允许使用 a-z、0-9 和 .,-_ 字符';
+$wb['ssl_locality_error_regex'] = 'SSL 地点不正确,仅允许使用 a-z、0-9 和 .,-_ 字符';
+$wb['ssl_organisation_error_regex'] = 'SSL 组织不正确,仅允许使用 a-z、0-9 和 .,-_ 字符';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL 组织单位不正确,仅允许使用 a-z、0-9 和 .,-_ 字符';
+$wb['ssl_country_error_regex'] = 'SSL 国家不正确,仅允许使用 A-Z 字符';
+$wb['limit_traffic_quota_free_txt'] = '最大可用流量配额';
+$wb['redirect_error_regex'] = '重定向路径不正确,有效的重定向示例为:/test/ 或 https://www.domain.tld/test/';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['traffic_quota_exceeded_txt'] = '已超出流量配额';
+$wb['ruby_txt'] = 'Ruby';
+$wb['stats_user_txt'] = '网站统计用户名';
+$wb['stats_type_txt'] = '网站统计程序';
+$wb['custom_php_ini_txt'] = '自定义php.ini设置';
+$wb['disabled_txt'] = '禁用';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '无标志';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['nginx_directives_txt'] = 'nginx 指令';
+$wb['seo_redirect_txt'] = 'SEO 重定向';
+$wb['non_www_to_www_txt'] = '非 www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; 非 www';
+$wb['php_fpm_use_socket_txt'] = '使用 Socket 作为 PHP-FPM';
+$wb['error_no_sni_txt'] = '此服务器上未激活 SSL 的 SNI。您只能在每个 IP 地址上启用一个 SSL 证书。';
+$wb['python_txt'] = 'Python';
+$wb['perl_txt'] = 'Perl';
+$wb['pm_max_children_txt'] = 'PHP-FPM进程管理器最大子进程数。';
+$wb['pm_start_servers_txt'] = 'PHP-FPM 进程管理器起始服务器数';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM进程管理器中最小的空闲进程数';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM进程管理器中最大的空闲进程数';
+$wb['error_php_fpm_pm_settings_txt'] = 'PHP-FPM的pm设置值必须如下: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM的pm.max_children必须为正整数。';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM的pm.start_servers必须为正整数。';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM的pm.min_spare_servers必须为正整数。';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM的pm.max_spare_servers必须为正整数。';
+$wb['hd_quota_error_regex'] = '硬盘配额无效。';
+$wb['traffic_quota_error_regex'] = '流量配额无效。';
+$wb['server_php_id_txt'] = 'PHP 版本';
+$wb['pm_txt'] = 'PHP-FPM 进程管理器';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM进程空闲超时时间';
+$wb['pm_max_requests_txt'] = 'PHP-FPM 进程管理器最大请求数';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM的 PHP-FPM进程空闲超时时间 必须为正整数。';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests 必须是 >=0 的整数值。';
+$wb['pm_ondemand_hint_txt'] = '请注意,您必须具有 PHP 版本 >= 5.3.9 才能使用按需进程管理器。如果您为旧版本的 PHP 选择了按需进程管理器,则 PHP 将不再启动!';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
+$wb['available_php_directive_snippets_txt'] = 'Available PHP Directive Snippets:';
+$wb['available_apache_directive_snippets_txt'] = 'Available Apache Directive Snippets:';
+$wb['available_nginx_directive_snippets_txt'] = 'Available nginx Directive Snippets:';
+$wb['proxy_directives_txt'] = 'Proxy Directives';
+$wb['available_proxy_directive_snippets_txt'] = 'Available Proxy Directive Snippets:';
+$wb['Domain'] = 'Aliasdomain';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_aliasdomain_list.lng b/interface/web/sites/lib/lang/cn_web_aliasdomain_list.lng
new file mode 100644
index 0000000000..584cc9f3de
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_aliasdomain_list.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['list_head_txt'] = '别名域名';
+$wb['active_txt'] = '已激活';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['domain_txt'] = '别名域名';
+$wb['add_new_record_txt'] = '添加新别名域名';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '域名必须唯一。';
+$wb['domain_error_regex'] = '域名格式不正确。';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '不使用标记';
+$wb['none_txt'] = 'æ— ';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_backup_list.lng b/interface/web/sites/lib/lang/cn_web_backup_list.lng
new file mode 100644
index 0000000000..d68977a768
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_backup_list.lng
@@ -0,0 +1,54 @@
+<?php
+$wb['list_head_txt'] = '已有备份';
+$wb['date_txt'] = '日期';
+$wb['backup_type_txt'] = '类型';
+$wb['filename_txt'] = '备份文件';
+$wb['filesize_txt'] = '文件大小';
+$wb['restore_backup_txt'] = '恢复';
+$wb['download_backup_txt'] = '下载';
+$wb['download_info_txt'] = '备份文件将在几分钟内在网站备份文件夹中提供下载。';
+$wb['restore_info_txt'] = '备份恢复已经开始。该操作需要几分钟才能完成。';
+$wb['restore_confirm_txt'] = '恢复将覆盖您网站中的现有文件。您真的要恢复此备份吗?';
+$wb['download_pending_txt'] = '已经有一个挂起的备份下载任务。';
+$wb['restore_pending_txt'] = '已经有一个挂起的备份恢复任务。';
+$wb['delete_backup_txt'] = '删除备份';
+$wb['delete_info_txt'] = '删除备份已经开始。该操作需要几分钟才能完成。';
+$wb['delete_confirm_txt'] = '真的要删除此备份吗?';
+$wb['delete_pending_txt'] = '已经有一个挂起的备份删除任务。';
+$wb['backup_type_mongodb'] = 'MongoDB数据库';
+$wb['backup_type_mysql'] = 'MySQL数据库';
+$wb['backup_type_web'] = '网站文件';
+$wb['backup_pending_txt'] = '已经有一个挂起的备份任务。';
+$wb['error_txt'] = '错误';
+$wb['backup_info_txt'] = '备份进程已经开始。该操作需要几分钟才能完成。';
+$wb['backup_format_txt'] = '备份格式';
+$wb['backup_format_unknown_txt'] = '未知';
+$wb['backup_job_txt'] = '调度器';
+$wb['backup_job_manual_txt'] = '手动';
+$wb['backup_job_auto_txt'] = '自动';
+$wb['manual_backup_title_txt'] = '手动备份';
+$wb['make_backup_web_txt'] = '备份网站文件';
+$wb['make_backup_database_txt'] = '备份数据库';
+$wb['make_backup_confirm_txt'] = '您即将开始手动备份过程。手动备份将计入允许备份数的总数:因此,如果超出限制,则可能自动删除最旧的备份。是否继续?';
+$wb['final_size_txt'] = '最终下载大小可能因所选压缩格式而异。';
+$wb['yes_txt'] = '是';
+$wb['no_txt'] = '否';
+$wb['backup_is_encrypted_txt'] = '已加密';
+$wb['backup_format_zip_txt'] = 'zip (deflate)';
+$wb['backup_format_gzip_txt'] = 'gzip';
+$wb['backup_format_bzip2_txt'] = 'bzip2';
+$wb['backup_format_xz_txt'] = 'xz';
+$wb['backup_format_tar_gzip_txt'] = 'tar (gzip)';
+$wb['backup_format_tar_bzip2_txt'] = 'tar (bzip2)';
+$wb['backup_format_tar_xz_txt'] = 'tar (xz)';
+$wb['backup_format_zip_bzip2_txt'] = 'zip (bzip2)';
+$wb['backup_format_7z_lzma_txt'] = '7z (LZMA)';
+$wb['backup_format_7z_lzma2_txt'] = '7z (LZMA2)';
+$wb['backup_format_7z_ppmd_txt'] = '7z (PPMd)';
+$wb['backup_format_7z_bzip2_txt'] = '7z (BZip2)';
+$wb['backup_format_tar_7z_lzma_txt'] = 'tar + 7z (LZMA)';
+$wb['backup_format_tar_7z_lzma2_txt'] = 'tar + 7z (LZMA2)';
+$wb['backup_format_tar_7z_ppmd_txt'] = 'tar + 7z (PPMd)';
+$wb['backup_format_tar_7z_bzip2_txt'] = 'tar + 7z (BZip2)';
+$wb['backup_format_rar_txt'] = 'RAR';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_childdomain.lng b/interface/web/sites/lib/lang/cn_web_childdomain.lng
new file mode 100644
index 0000000000..c85522db8e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_childdomain.lng
@@ -0,0 +1,124 @@
+<?php
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_request_txt'] = 'SSL证书签发请求';
+$wb['ssl_cert_txt'] = 'SSL证书';
+$wb['ssl_bundle_txt'] = 'SSL中间证书链';
+$wb['ssl_action_txt'] = 'SSL操作';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '上级网站';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R (临时重定向)';
+$wb['l_redirect_txt'] = 'L (最后重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L (临时重定向 + 最后规则)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (永久重定向 + 最后规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '激活';
+$wb['document_root_txt'] = '网站目录';
+$wb['system_user_txt'] = 'Linux用户';
+$wb['system_group_txt'] = 'Linux用户组';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['vhost_type_txt'] = '虚拟主机类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的帐户的网站域名数量已达到上限。';
+$wb['limit_web_aliasdomain_txt'] = '您的帐户的别名域名数量已达到上限。';
+$wb['limit_web_subdomain_txt'] = '您的帐户的子域名数量已达到上限。';
+$wb['apache_directives_txt'] = 'Apache指令';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '已经存在该域名的网站或子/别名域名。';
+$wb['domain_error_regex'] = '域名无效。';
+$wb['domain_error_acme_invalid'] = '不允许使用域名acme.invalid。';
+$wb['domain_error_wildcard'] = '不允许使用通配符子域名。';
+$wb['host_txt'] = '主机';
+$wb['redirect_error_regex'] = '重定向路径无效。有效的重定向示例为:/test/ 或 https://www.domain.tld/test/。';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '无标志';
+$wb['proxy_directives_txt'] = '代理指令';
+$wb['available_proxy_directive_snippets_txt'] = '可用的代理指令片段:';
+$wb['error_proxy_requires_url'] = '重定向类型“proxy”需要URL作为重定向路径。';
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份数量';
+$wb['ssl_key_txt'] = 'SSL密钥';
+$wb['ssl_domain_txt'] = 'SSL域名';
+$wb['web_folder_error_regex'] = '输入的文件夹无效。请勿输入斜杠。';
+$wb['ipv6_address_txt'] = 'IPv6地址';
+$wb['errordocs_txt'] = '自定义错误文档';
+$wb['subdomain_txt'] = '自动子域名';
+$wb['domain_error_autosub'] = '已经存在具有这些设置的子域名。';
+$wb['hd_quota_error_empty'] = '硬盘配额为0或为空。';
+$wb['traffic_quota_error_empty'] = '流量配额为空。';
+$wb['error_ssl_state_empty'] = 'SSL状态为空。';
+$wb['error_ssl_locality_empty'] = 'SSL地点为空。';
+$wb['error_ssl_organisation_empty'] = 'SSL组织为空。';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL组织单位为空。';
+$wb['error_ssl_country_empty'] = 'SSL国家为空。';
+$wb['error_ssl_cert_empty'] = 'SSL证书字段为空';
+$wb['client_group_id_txt'] = '客户';
+$wb['stats_password_txt'] = '设置Web统计密码';
+$wb['allow_override_txt'] = 'Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = '最大可用硬盘配额';
+$wb['ssl_state_error_regex'] = 'SSL状态无效。有效字符为:a-z、0-9和.,-,_。';
+$wb['ssl_locality_error_regex'] = '无效的SSL所在地。有效字符为:a-z、0-9和.,-,_。';
+$wb['ssl_organisation_error_regex'] = '无效的SSL组织。有效字符为:a-z、0-9和.,-,_。';
+$wb['ssl_organistaion_unit_error_regex'] = '无效的SSL组织单位。有效字符为:a-z、0-9和.,-,_。';
+$wb['ssl_country_error_regex'] = '无效的SSL国家。有效字符为:A-Z。';
+$wb['limit_traffic_quota_free_txt'] = '最大可用流量配额';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['traffic_quota_exceeded_txt'] = '超出流量配额';
+$wb['ruby_txt'] = 'Ruby';
+$wb['stats_user_txt'] = 'Web统计用户名';
+$wb['stats_type_txt'] = 'Web统计程序';
+$wb['custom_php_ini_txt'] = '自定义php.ini设置';
+$wb['none_txt'] = 'æ— ';
+$wb['disabled_txt'] = '禁用';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['nginx_directives_txt'] = 'nginx指令';
+$wb['seo_redirect_txt'] = 'SEO重定向';
+$wb['non_www_to_www_txt'] = '非www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; 非www';
+$wb['php_fpm_use_socket_txt'] = '为PHP-FPM使用套接字';
+$wb['error_no_sni_txt'] = '此服务器上未激活SSL的SNI。您只能在每个IP地址上启用一个SSL证书。';
+$wb['python_txt'] = 'Python';
+$wb['perl_txt'] = 'Perl';
+$wb['pm_max_children_txt'] = 'PHP-FPM进程管理器最大子进程数。';
+$wb['pm_start_servers_txt'] = 'PHP-FPM 进程管理器起始服务器数';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM进程管理器中最小的空闲进程数';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM进程管理器中最大的空闲进程数';
+$wb['error_php_fpm_pm_settings_txt'] = 'PHP-FPM的pm设置值必须如下: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM的pm.max_children必须为正整数。';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM的pm.start_servers必须为正整数。';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM的pm.min_spare_servers必须为正整数。';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM的pm.max_spare_servers必须为正整数。';
+$wb['hd_quota_error_regex'] = '硬盘配额无效。';
+$wb['traffic_quota_error_regex'] = '流量配额无效。';
+$wb['server_php_id_txt'] = 'PHP 版本';
+$wb['pm_txt'] = 'PHP-FPM 进程管理器';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM进程空闲超时时间';
+$wb['pm_max_requests_txt'] = 'PHP-FPM 进程管理器最大请求数';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM的 PHP-FPM进程空闲超时时间 必须为正整数。';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests 必须是 >=0 的整数值。';
+$wb['pm_ondemand_hint_txt'] = '请注意,您必须具有 PHP 版本 >= 5.3.9 才能使用按需进程管理器。如果您为旧版本的 PHP 选择了按需进程管理器,则 PHP 将不再启动!';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['available_php_directive_snippets_txt'] = '可用的 PHP 指令片段:';
+$wb['available_apache_directive_snippets_txt'] = '可用的 Apache 指令片段:';
+$wb['available_nginx_directive_snippets_txt'] = '可用的 Nginx 指令片段:';
+$wb['Domain'] = '别名域名';
+$wb['ssl_letsencrypt_exclude_txt'] = '不添加到 Let\'s Encrypt 证书';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_childdomain_list.lng b/interface/web/sites/lib/lang/cn_web_childdomain_list.lng
new file mode 100644
index 0000000000..f47e407b86
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_childdomain_list.lng
@@ -0,0 +1,18 @@
+<?php
+$wb['list_head_txt'] = '子域名';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['domain_txt'] = '子域名';
+$wb['add_new_subdomain_txt'] = '添加新子域名';
+$wb['add_new_aliasdomain_txt'] = '添加新别名域名';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '域名必须是唯一的。';
+$wb['domain_error_regex'] = '域名无效。';
+$wb['domain_error_acme_invalid'] = '域名acme.invalid不允许使用。';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '不标记';
+$wb['none_txt'] = 'æ— ';
+$wb['aliasdomain_list_head_txt'] = '别名域名';
+$wb['subdomain_list_head_txt'] = '子域名';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_directive_snippets.lng b/interface/web/sites/lib/lang/cn_web_directive_snippets.lng
new file mode 100644
index 0000000000..e472230d5b
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_directive_snippets.lng
@@ -0,0 +1,3 @@
+<?php
+$wb['directive_snippets_id_txt'] = '所需配置';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_domain.lng b/interface/web/sites/lib/lang/cn_web_domain.lng
new file mode 100644
index 0000000000..b7619426a9
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_domain.lng
@@ -0,0 +1,141 @@
+<?php
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份数';
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_key_txt'] = 'SSL 密钥';
+$wb['ssl_request_txt'] = 'SSL 证书签发请求';
+$wb['ssl_cert_txt'] = 'SSL 证书';
+$wb['ssl_bundle_txt'] = 'SSL 中间证书链';
+$wb['ssl_action_txt'] = 'SSL 操作';
+$wb['ssl_domain_txt'] = 'SSL 域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['web_folder_error_regex'] = '无效的文件夹。请不要输入斜杠。';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R (临时重定向)';
+$wb['l_redirect_txt'] = 'L (最后的重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L (临时重定向 + 最后的规则)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (永久重定向 + 最后的规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '激活';
+$wb['document_root_txt'] = '文档根目录';
+$wb['system_user_txt'] = 'Linux 用户';
+$wb['system_group_txt'] = 'Linux 组';
+$wb['ip_address_txt'] = 'IPv4 地址';
+$wb['ipv6_address_txt'] = 'IPv6 地址';
+$wb['vhost_type_txt'] = '虚拟主机类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['errordocs_txt'] = '自定义错误文档';
+$wb['subdomain_txt'] = '自动生成子域名';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的账户已达到最大允许的网站数量。';
+$wb['limit_web_aliasdomain_txt'] = '您的账户已达到最大允许的别名域名数量。';
+$wb['limit_web_subdomain_txt'] = '您的账户已达到最大允许的子域名数量。';
+$wb['apache_directives_txt'] = 'Apache 指令';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '已经存在该域名的网站、子域名或别名域名。';
+$wb['domain_error_regex'] = '域名无效。';
+$wb['domain_error_autosub'] = '已经存在该设置的子域名。';
+$wb['hd_quota_error_empty'] = '硬盘配额为 0 或为空。';
+$wb['traffic_quota_error_empty'] = '流量配额为空。';
+$wb['error_ssl_state_empty'] = 'SSL 状态为空。';
+$wb['error_ssl_locality_empty'] = 'SSL 地区为空。';
+$wb['error_ssl_organisation_empty'] = 'SSL 组织为空。';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL 组织单位为空。';
+$wb['error_ssl_country_empty'] = 'SSL 国家为空。';
+$wb['error_ssl_cert_empty'] = 'SSL 证书为空。';
+$wb['client_group_id_txt'] = '客户';
+$wb['stats_password_txt'] = '设置 Web 统计密码';
+$wb['allow_override_txt'] = 'Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = '可用的最大硬盘配额';
+$wb['ssl_state_error_regex'] = 'SSL 状态无效。有效字符为:a-z,0-9 和 .,-_&äöüÄÖÜ。';
+$wb['ssl_locality_error_regex'] = 'SSL 地区无效。有效字符为:a-z,0-9 和 .,-_&äöüÄÖÜ。';
+$wb['ssl_organisation_error_regex'] = 'SSL 组织无效。有效字符为:a-z,0-9 和 .,-_&äöüÄÖÜ。';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL 组织单位无效。有效字符为:a-z,0-9 和 .,-_&äöüÄÖÜ。';
+$wb['ssl_country_error_regex'] = 'SSL 国家无效。有效字符为:A-Z。';
+$wb['limit_traffic_quota_free_txt'] = '可用的最大流量配额';
+$wb['redirect_error_regex'] = '重定向路径无效。例如,有效的重定向路径为:/test/ 或 https://www.domain.tld/test/。';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['traffic_quota_exceeded_txt'] = '已超出流量配额';
+$wb['ruby_txt'] = 'Ruby';
+$wb['stats_user_txt'] = 'Web 统计用户名';
+$wb['stats_type_txt'] = 'Web统计程序';
+$wb['custom_php_ini_txt'] = '自定义php.ini设置';
+$wb['none_txt'] = 'æ— ';
+$wb['disabled_txt'] = '禁用';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '无标记';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['nginx_directives_txt'] = 'nginx指令';
+$wb['seo_redirect_txt'] = 'SEO重定向';
+$wb['non_www_to_www_txt'] = '非www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; 非www';
+$wb['php_fpm_use_socket_txt'] = '使用Socket连接PHP-FPM';
+$wb['error_no_sni_txt'] = '此服务器未激活SNI的SSL。每个IP地址只能启用一个SSL证书。';
+$wb['python_txt'] = 'Python';
+$wb['perl_txt'] = 'Perl';
+$wb['pm_max_children_txt'] = 'PHP-FPM进程管理器最大子进程数。';
+$wb['pm_start_servers_txt'] = 'PHP-FPM 进程管理器起始服务器数';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM进程管理器中最小的空闲进程数';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM进程管理器中最大的空闲进程数';
+$wb['error_php_fpm_pm_settings_txt'] = 'PHP-FPM的pm设置值必须如下: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM的pm.max_children必须为正整数。';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM的pm.start_servers必须为正整数。';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM的pm.min_spare_servers必须为正整数。';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM的pm.max_spare_servers必须为正整数。';
+$wb['hd_quota_error_regex'] = '硬盘配额无效。';
+$wb['traffic_quota_error_regex'] = '流量配额无效。';
+$wb['server_php_id_txt'] = 'PHP版本';
+$wb['pm_txt'] = 'PHP-FPM进程管理器';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM进程空闲超时时间';
+$wb['pm_max_requests_txt'] = 'PHP-FPM 进程管理器最大请求数';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM的 PHP-FPM进程空闲超时时间 必须为正整数。';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM的pm.max_requests必须为大于等于0的整数。';
+$wb['pm_ondemand_hint_txt'] = '请注意,您必须使用版本 >= 5.3.9 的PHP才能使用ondemand进程管理器。如果您为旧版本的PHP选择ondemand,PHP将不再启动!';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['available_php_directive_snippets_txt'] = '可用的 PHP 指令片段:';
+$wb['available_apache_directive_snippets_txt'] = '可用的 Apache 指令片段:';
+$wb['available_nginx_directive_snippets_txt'] = '可用的 nginx 指令片段:';
+$wb['proxy_directives_txt'] = '代理指令';
+$wb['available_proxy_directive_snippets_txt'] = '可用的代理指令片段:';
+$wb['no_server_error'] = '未选择服务器。';
+$wb['no_backup_txt'] = '无备份';
+$wb['daily_backup_txt'] = '每日';
+$wb['weekly_backup_txt'] = '每周';
+$wb['monthly_backup_txt'] = '每月';
+$wb['rewrite_rules_txt'] = '重写规则';
+$wb['invalid_rewrite_rules_txt'] = '无效的重写规则';
+$wb['allowed_rewrite_rule_directives_txt'] = '允许的指令:';
+$wb['configuration_error_txt'] = '配置错误';
+$wb['variables_txt'] = '变量';
+$wb['added_by_txt'] = '添加者';
+$wb['added_date_txt'] = '添加日期';
+$wb['backup_excludes_txt'] = '排除的目录';
+$wb['backup_excludes_note_txt'] = '(用逗号分隔多个目录。例如:web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = '排除的目录包含无效字符。';
+$wb['invalid_custom_php_ini_settings_txt'] = '无效的 php.ini 配置';
+$wb['invalid_system_user_or_group_txt'] = '无效的系统用户或组';
+$wb['apache_directive_blocked_error'] = '安全设置阻止了 Apache 指令:';
+$wb['http_port_txt'] = 'HTTP 端口';
+$wb['https_port_txt'] = 'HTTPS 端口';
+$wb['http_port_error_regex'] = 'HTTP 端口无效。';
+$wb['https_port_error_regex'] = 'HTTPS 端口无效。';
+$wb['nginx_directive_blocked_error'] = '安全设置阻止了 nginx 指令:';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_domain_admin_list.lng b/interface/web/sites/lib/lang/cn_web_domain_admin_list.lng
new file mode 100644
index 0000000000..279f528974
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_domain_admin_list.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['sys_groupid_txt'] = '客户';
+$wb['list_head_txt'] = '网站';
+$wb['domain_id_txt'] = 'ID';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新网站';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_domain_list.lng b/interface/web/sites/lib/lang/cn_web_domain_list.lng
new file mode 100644
index 0000000000..c408d0df90
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_domain_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '网站';
+$wb['domain_id_txt'] = 'ID';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新网站';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_folder.lng b/interface/web/sites/lib/lang/cn_web_folder.lng
new file mode 100644
index 0000000000..c6747937a2
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_folder.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['path_txt'] = '路径';
+$wb['active_txt'] = '激活';
+$wb['path_error_regex'] = '无效的文件夹路径。';
+$wb['error_folder_already_protected_txt'] = '此文件夹已受保护。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_folder_list.lng b/interface/web/sites/lib/lang/cn_web_folder_list.lng
new file mode 100644
index 0000000000..91bbb859a1
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_folder_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '文件夹';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['path_txt'] = '路径';
+$wb['add_new_record_txt'] = '添加新文件夹';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_folder_user.lng b/interface/web/sites/lib/lang/cn_web_folder_user.lng
new file mode 100644
index 0000000000..5c966ca37b
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_folder_user.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['web_folder_id_txt'] = '文件夹';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['active_txt'] = '激活';
+$wb['folder_error_empty'] = '没有选择Web文件夹。';
+$wb['password_strength_txt'] = '密码强度';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不一致。';
+$wb['password_match_txt'] = '两次输入的密码一致。';
+$wb['no_folder_perm'] = '您没有此文件夹的权限。';
+$wb['error_user_exists_already_txt'] = '此用户的记录已经存在。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_folder_user_list.lng b/interface/web/sites/lib/lang/cn_web_folder_user_list.lng
new file mode 100644
index 0000000000..467a90df83
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_folder_user_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '文件夹用户';
+$wb['active_txt'] = '启用';
+$wb['web_folder_id_txt'] = '文件夹';
+$wb['username_txt'] = '用户名';
+$wb['add_new_record_txt'] = '添加新的文件夹用户';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_sites_stats_list.lng b/interface/web/sites/lib/lang/cn_web_sites_stats_list.lng
new file mode 100644
index 0000000000..42f10bb0db
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_sites_stats_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '网站流量';
+$wb['domain_txt'] = '域名';
+$wb['this_month_txt'] = '本月';
+$wb['last_month_txt'] = '上个月';
+$wb['this_year_txt'] = '今年';
+$wb['last_year_txt'] = '去年';
+$wb['sum_txt'] = '总计';
+$wb['percentage_txt'] = '使用率 %';
+$wb['quota_txt'] = '配额';
diff --git a/interface/web/sites/lib/lang/cn_web_subdomain.lng b/interface/web/sites/lib/lang/cn_web_subdomain.lng
new file mode 100644
index 0000000000..3529d2ee31
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_subdomain.lng
@@ -0,0 +1,54 @@
+<?php
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_request_txt'] = 'SSL证书签发请求';
+$wb['ssl_cert_txt'] = 'SSL证书';
+$wb['ssl_bundle_txt'] = 'SSL中间证书链';
+$wb['ssl_action_txt'] = 'SSL操作';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '上级网站';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R (临时重定向)';
+$wb['l_redirect_txt'] = 'L (最后重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L (临时重定向 + 最后规则)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L (永久重定向 + 最后规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '激活';
+$wb['document_root_txt'] = '网站目录';
+$wb['system_user_txt'] = 'Linux用户';
+$wb['system_group_txt'] = 'Linux用户组';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['vhost_type_txt'] = '虚拟主机类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的帐户中的网站数量已达到最大限制。';
+$wb['limit_web_aliasdomain_txt'] = '您的帐户中的别名域名数量已达到最大限制。';
+$wb['limit_web_subdomain_txt'] = '您的帐户中的子域名数量已达到最大限制。';
+$wb['apache_directives_txt'] = 'Apache 指令';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '已经有一个具有该域名的网站或子域名/别名域名。';
+$wb['domain_error_regex'] = '域名无效。';
+$wb['domain_error_wildcard'] = '不允许使用通配符子域名。';
+$wb['host_txt'] = '主机';
+$wb['redirect_error_regex'] = '无效的重定向路径。有效的重定向路径示例:/test/ 或 https://www.domain.tld/test/。';
+$wb['no_redirect_txt'] = '无重定向';
+$wb['no_flag_txt'] = '无标志';
+$wb['proxy_directives_txt'] = '代理指令';
+$wb['available_proxy_directive_snippets_txt'] = '可用的代理指令片段:';
+$wb['error_proxy_requires_url'] = '重定向类型“proxy”需要URL作为重定向路径。';
+$wb['http_port_txt'] = 'HTTP 端口';
+$wb['https_port_txt'] = 'HTTPS 端口';
+$wb['http_port_error_regex'] = 'HTTP 端口无效。';
+$wb['https_port_error_regex'] = 'HTTPS 端口无效。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_subdomain_list.lng b/interface/web/sites/lib/lang/cn_web_subdomain_list.lng
new file mode 100644
index 0000000000..0eb6664632
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_subdomain_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '子域名列表';
+$wb['active_txt'] = '状态';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['domain_txt'] = '子域名';
+$wb['add_new_record_txt'] = '添加新子域名';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_vhost_domain.lng b/interface/web/sites/lib/lang/cn_web_vhost_domain.lng
new file mode 100644
index 0000000000..2e5f18e80e
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_vhost_domain.lng
@@ -0,0 +1,209 @@
+<?php
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份副本数量';
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_key_txt'] = 'SSL 密钥';
+$wb['ssl_request_txt'] = 'SSL 证书签发请求';
+$wb['ssl_cert_txt'] = 'SSL 证书';
+$wb['ssl_bundle_txt'] = 'SSL 中间证书链';
+$wb['ssl_action_txt'] = 'SSL 操作';
+$wb['ssl_domain_txt'] = 'SSL 域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['web_folder_error_regex'] = '无效的文件夹路径,请勿输入斜杠。';
+$wb['web_folder_error_empty'] = 'Web 文件夹不能为空。使用 /web/ 使其与父网站相同';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '父网站';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R(临时重定向)';
+$wb['l_redirect_txt'] = 'L(最后的重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L(临时重定向+最后规则)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L(永久重定向+最后规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '激活';
+$wb['document_root_txt'] = '文档根目录';
+$wb['system_user_txt'] = 'Linux 用户';
+$wb['system_group_txt'] = 'Linux 组';
+$wb['ip_address_txt'] = 'IPv4 地址';
+$wb['ipv6_address_txt'] = 'IPv6 地址';
+$wb['vhost_type_txt'] = '虚拟主机类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['errordocs_txt'] = '自定义错误页面';
+$wb['subdomain_txt'] = '自动子域名';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的帐户中的最大Web域数已达到上限。';
+$wb['limit_web_aliasdomain_txt'] = '您的帐户中的最大别名域数已达到上限。';
+$wb['limit_web_subdomain_txt'] = '您的帐户中的最大Web子域数已达到上限。';
+$wb['apache_directives_txt'] = 'Apache 指令';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '已经有此域名的网站或子/别名域名。';
+$wb['domain_error_regex'] = '域名无效。';
+$wb['domain_error_acme_invalid'] = '不允许域名acme.invalid。';
+$wb['domain_error_autosub'] = '已经有此设置的子域名。';
+$wb['hd_quota_error_empty'] = '硬盘配额为0或为空。';
+$wb['traffic_quota_error_empty'] = '流量配额为空。';
+$wb['error_ssl_state_empty'] = 'SSL 状态为空。';
+$wb['error_ssl_locality_empty'] = 'SSL 所在地为空。';
+$wb['error_ssl_organisation_empty'] = 'SSL 组织为空。';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL 组织单位为空。';
+$wb['error_ssl_country_empty'] = 'SSL 国家为空。';
+$wb['error_ssl_cert_empty'] = 'SSL 证书为空。';
+$wb['client_group_id_txt'] = '客户';
+$wb['stats_password_txt'] = '设置 Web 统计密码';
+$wb['allow_override_txt'] = 'Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = '最大可用硬盘配额';
+$wb['ssl_state_error_regex'] = '无效的SSL状态。有效字符为:a-z,0-9和 .,-_&äöüÄÖÜ';
+$wb['ssl_locality_error_regex'] = '无效的SSL所在地。有效字符为:a-z,0-9和 .,-_&äöüÄÖÜ';
+$wb['ssl_organisation_error_regex'] = '无效的SSL组织。有效字符为:a-z,0-9和 .,-_&äöüÄÖÜ';
+$wb['ssl_organistaion_unit_error_regex'] = '无效的SSL组织单位。有效字符为:a-z,0-9和 .,-_&äöüÄÖÜ';
+$wb['ssl_country_error_regex'] = '无效的SSL国家。有效字符为:A-Z';
+$wb['limit_traffic_quota_free_txt'] = '最大可用流量配额';
+$wb['redirect_error_regex'] = '无效的重定向路径。有效的重定向路径例如:/test/ 或 https://www.domain.tld/test/ ';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['traffic_quota_exceeded_txt'] = '流量配额超过';
+$wb['ruby_txt'] = 'Ruby';
+$wb['stats_user_txt'] = 'Web统计用户名';
+$wb['stats_type_txt'] = 'Web统计程序';
+$wb['custom_php_ini_txt'] = '自定义php.ini设置';
+$wb['none_txt'] = 'æ— ';
+$wb['disabled_txt'] = '禁用';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '无标志';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['nginx_directives_txt'] = 'nginx指令';
+$wb['seo_redirect_txt'] = 'SEO重定向';
+$wb['non_www_to_www_txt'] = '非www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; 非www';
+$wb['php_fpm_use_socket_txt'] = '使用Socket For PHP-FPM';
+$wb['php_fpm_chroot_txt'] = 'Chroot PHP-FPM';
+$wb['error_no_sni_txt'] = '该服务器未启用SNI证书。您只能在每个IP地址上启用一个SSL证书。';
+$wb['python_txt'] = 'Python';
+$wb['perl_txt'] = 'Perl';
+$wb['pm_max_children_txt'] = 'PHP-FPM进程管理器最大子进程数。';
+$wb['pm_start_servers_txt'] = 'PHP-FPM 进程管理器起始服务器数';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM进程管理器中最小的空闲进程数';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM进程管理器中最大的空闲进程数';
+$wb['error_php_fpm_pm_settings_txt'] = 'PHP-FPM的pm设置值必须如下: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM的pm.max_children必须为正整数。';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM的pm.start_servers必须为正整数。';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM的pm.min_spare_servers必须为正整数。';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM的pm.max_spare_servers必须为正整数。';
+$wb['hd_quota_error_regex'] = '硬盘配额无效。';
+$wb['traffic_quota_error_regex'] = '流量配额无效。';
+$wb['server_php_id_txt'] = 'PHP 版本';
+$wb['server_php_id_invalid_txt'] = 'PHP 版本无效。';
+$wb['server_php_id_default_hidden_warning_txt'] = 'PHP 版本已设置为“默认”,但现在无法选择。请选择所需的 PHP 版本并保存设置。';
+$wb['pm_txt'] = 'PHP-FPM进程管理器';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM进程空闲超时时间';
+$wb['pm_max_requests_txt'] = 'PHP-FPM 进程管理器最大请求数';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM的 PHP-FPM进程空闲超时时间 必须为正整数。';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests 必须是 >=0 的整数值。';
+$wb['pm_ondemand_hint_txt'] = '请注意,您必须具有 PHP 版本 >= 5.3.9 才能使用按需进程管理器。如果您为旧版本的 PHP 选择了按需进程管理器,则 PHP 将不再启动!';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['available_php_directive_snippets_txt'] = '可用的PHP指令片段:';
+$wb['available_apache_directive_snippets_txt'] = '可用的Apache指令片段:';
+$wb['available_nginx_directive_snippets_txt'] = '可用的nginx指令片段:';
+$wb['proxy_directives_txt'] = '代理指令';
+$wb['available_proxy_directive_snippets_txt'] = '可用的代理指令片段:';
+$wb['no_server_error'] = '未选择服务器。';
+$wb['no_backup_txt'] = '无备份';
+$wb['daily_backup_txt'] = '每日';
+$wb['weekly_backup_txt'] = '每周';
+$wb['monthly_backup_txt'] = '每月';
+$wb['rewrite_rules_txt'] = '重写规则';
+$wb['invalid_rewrite_rules_txt'] = '无效的重写规则';
+$wb['allowed_rewrite_rule_directives_txt'] = '允许的指令:';
+$wb['configuration_error_txt'] = '配置错误';
+$wb['server_chosen_not_ok'] = '所选服务器不允许该帐户。';
+$wb['variables_txt'] = '变量';
+$wb['added_by_txt'] = '添加者';
+$wb['added_date_txt'] = '添加日期';
+$wb['backup_excludes_txt'] = '排除的目录';
+$wb['backup_excludes_note_txt'] = '(用逗号分隔多个目录。示例:web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = '排除的目录包含无效字符。';
+$wb['web_folder_txt'] = '网站目录';
+$wb['web_folder_invalid_txt'] = '网站目录无效,请选择其他目录。';
+$wb['web_folder_unique_txt'] = '网站目录已被使用,请选择其他目录。';
+$wb['host_txt'] = '主机名';
+$wb['domain_error_wildcard'] = '不允许使用通配符子域名。';
+$wb['variables_txt'] = '变量';
+$wb['backup_excludes_txt'] = '排除的目录';
+$wb['backup_excludes_note_txt'] = '(用逗号分隔多个目录。示例:web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = '排除的目录包含无效字符。';
+$wb['subdomain_error_empty'] = '子域名字段为空或包含无效字符。';
+$wb['btn_save_txt'] = '保存';
+$wb['btn_cancel_txt'] = '取消';
+$wb['load_client_data_txt'] = '加载客户详细信息';
+$wb['load_my_data_txt'] = '加载我的联系方式';
+$wb['reset_client_data_txt'] = '重置数据';
+$wb['document_root_txt'] = '文档根目录';
+$wb['ssl_letsencrypt_txt'] = 'Let\'s Encrypt SSL';
+$wb['rewrite_to_https_txt'] = '将HTTP重写为HTTPS';
+$wb['password_strength_txt'] = '密码强度';
+$wb['directive_snippets_id_txt'] = 'Web服务器配置';
+$wb['http_port_txt'] = 'HTTP端口';
+$wb['https_port_txt'] = 'HTTPS端口';
+$wb['http_port_error_regex'] = 'HTTP端口无效。';
+$wb['https_port_error_regex'] = 'HTTPS端口无效。';
+$wb['enable_pagespeed_txt'] = '启用PageSpeed';
+$wb['log_retention_txt'] = '日志保留时间';
+$wb['log_retention_error_regex'] = '保留时间为天数(允许的值:最小0-最大9999)';
+$wb['dependent_domains_txt'] = '相关子域名/别名域名';
+$wb['limit_web_quota_not_0_txt'] = '硬盘配额不能设为0。';
+$wb['proxy_protocol_txt'] = '启用PROXY协议';
+$wb['backup_format_web_txt'] = 'Web文件备份格式';
+$wb['backup_format_db_txt'] = '数据库备份格式';
+$wb['backup_missing_utils_txt'] = '以下格式不能使用,因为它们未安装在Web服务器上:';
+$wb['backup_compression_options_txt'] = '压缩选项';
+$wb['backup_encryption_note_txt'] = '加密仅适用于7z,RAR和zip(不安全)。';
+$wb['backup_encryption_options_txt'] = '加密选项';
+$wb['backup_enable_encryption_txt'] = '启用加密';
+$wb['backup_password_txt'] = '密码';
+$wb['backup_format_default_txt'] = '默认:zip(deflate)或tar(gzip)';
+$wb['backup_format_zip_txt'] = 'zip(deflate)';
+$wb['backup_format_gzip_txt'] = 'gzip';
+$wb['backup_format_bzip2_txt'] = 'bzip2';
+$wb['backup_format_xz_txt'] = 'xz';
+$wb['backup_format_zip_bzip2_txt'] = 'zip(bzip2)';
+$wb['backup_format_7z_lzma_txt'] = '7z(LZMA)';
+$wb['backup_format_7z_lzma2_txt'] = '7z(LZMA2)';
+$wb['backup_format_7z_ppmd_txt'] = '7z(PPMd)';
+$wb['backup_format_7z_bzip2_txt'] = '7z(BZip2)';
+$wb['backup_format_tar_gzip_txt'] = 'tar(gzip)';
+$wb['backup_format_tar_bzip2_txt'] = 'tar(bzip2)';
+$wb['backup_format_tar_xz_txt'] = 'tar(xz)';
+$wb['backup_format_rar_txt'] = 'RAR';
+$wb['backup_format_tar_7z_lzma_txt'] = 'tar + 7z(LZMA)';
+$wb['backup_format_tar_7z_lzma2_txt'] = 'tar + 7z(LZMA2)';
+$wb['backup_format_tar_7z_ppmd_txt'] = 'tar + 7z(PPMd)';
+$wb['backup_format_tar_7z_bzip2_txt'] = 'tar + 7z(BZip2)';
+$wb['error_ipv4_change_forbidden'] = 'IP地址无法更改。如果您想更改IPv4地址,请联系您的管理员。';
+$wb['error_ipv6_change_forbidden'] = 'IP地址无法更改。如果您想更改IPv6地址,请联系您的管理员。';
+$wb['error_domain_change_forbidden'] = '域名不能更改。如果要更改域名,请联系管理员。';
+$wb['error_server_change_not_possible'] = '服务器不能更改。';
+$wb['jailkit_chroot_app_sections_txt'] = 'Jailkit chroot应用程序部分';
+$wb['jailkit_chroot_app_programs_txt'] = 'Jailkit chroot应用程序';
+$wb['jailkit_chroot_app_sections_error_empty'] = 'Jailkit chroot应用程序部分为空。';
+$wb['jailkit_chroot_app_programs_error_empty'] = 'Jailkit chroot应用程序为空。';
+$wb['jailkit_chroot_app_sections_error_regex'] = '无效的jaikit chroot部分。';
+$wb['jailkit_chroot_app_programs_error_regex'] = '无效的jaikit chroot应用程序。';
+$wb['tooltip_jailkit_chroot_app_sections_txt'] = '如果为空,则使用来自服务器配置的Jailkit chroot应用程序部分';
+$wb['tooltip_jailkit_chroot_app_programs_txt'] = '如果为空,则使用来自服务器配置的Jailkit chroot应用程序';
+$wb['delete_unused_jailkit_txt'] = '删除未使用的jailkit chroot';
+$wb['tooltip_delete_unused_jailkit_txt'] = '删除没有需要它的shell用户或cron作业的jailkit chroot环境。';
+$wb['ssl_options_not_for_le_txt'] = '您已为此网站启用Let\'s Encrypt证书。请注意,此页面上的所有选项仅适用于非Let\'s Encrypt证书。如果要切换到不同的证书,请记得在主选项卡上取消选中Let\'s Encrypt。';
diff --git a/interface/web/sites/lib/lang/cn_web_vhost_domain_admin_list.lng b/interface/web/sites/lib/lang/cn_web_vhost_domain_admin_list.lng
new file mode 100644
index 0000000000..4baaa4bc29
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_vhost_domain_admin_list.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['sys_groupid_txt'] = '客户';
+$wb['list_head_txt'] = '网站';
+$wb['domain_id_txt'] = 'ID';
+$wb['active_txt'] = '活动的';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新网站';
+$wb['add_new_subdomain_txt'] = '添加新子域名';
+$wb['add_new_aliasdomain_txt'] = '添加新别名域名';
+$wb['domain_list_head_txt'] = '网站';
+$wb['aliasdomain_list_head_txt'] = '别名域名(Vhost)';
+$wb['subdomain_list_head_txt'] = '子域名(Vhost)';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_vhost_domain_list.lng b/interface/web/sites/lib/lang/cn_web_vhost_domain_list.lng
new file mode 100644
index 0000000000..b65538efda
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_vhost_domain_list.lng
@@ -0,0 +1,14 @@
+<?php
+$wb['list_head_txt'] = '网站';
+$wb['domain_id_txt'] = 'ID';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['add_new_record_txt'] = '添加新网站';
+$wb['add_new_subdomain_txt'] = '添加新子域名';
+$wb['add_new_aliasdomain_txt'] = '添加新别名域名';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['domain_list_head_txt'] = '网站';
+$wb['aliasdomain_list_head_txt'] = '别名域名(Vhost)';
+$wb['subdomain_list_head_txt'] = '子域名(Vhost)';
+?>
diff --git a/interface/web/sites/lib/lang/cn_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/cn_web_vhost_subdomain.lng
new file mode 100644
index 0000000000..0d5cf4cad8
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_vhost_subdomain.lng
@@ -0,0 +1,136 @@
+<?php
+$wb['parent_domain_id_txt'] = '网站';
+$wb['web_folder_txt'] = 'Web 文件夹';
+$wb['web_folder_invalid_txt'] = 'Web 文件夹无效,请选择另一个。';
+$wb['web_folder_unique_txt'] = 'Web 文件夹已经被使用,请选择另一个。';
+$wb['backup_interval_txt'] = '备份间隔';
+$wb['backup_copies_txt'] = '备份副本数量';
+$wb['ssl_state_txt'] = '省份/州';
+$wb['ssl_locality_txt'] = '城市';
+$wb['ssl_organisation_txt'] = '组织';
+$wb['ssl_organisation_unit_txt'] = '部门';
+$wb['ssl_country_txt'] = '国家/地区';
+$wb['ssl_key_txt'] = 'SSL 密钥';
+$wb['ssl_request_txt'] = 'SSL 证书签发请求';
+$wb['ssl_cert_txt'] = 'SSL 证书';
+$wb['ssl_bundle_txt'] = 'SSL 中间证书链';
+$wb['ssl_action_txt'] = 'SSL 操作';
+$wb['ssl_domain_txt'] = 'SSL 域名';
+$wb['server_id_txt'] = '服务器';
+$wb['domain_txt'] = '域名';
+$wb['host_txt'] = '主机名';
+$wb['web_folder_error_regex'] = '输入的文件夹无效。请勿输入斜杠。';
+$wb['web_folder_error_empty'] = 'Web 文件夹不能为空。使用 /web/ 可以将其设置为与网站相同';
+$wb['type_txt'] = '类型';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['redirect_type_txt'] = '重定向类型';
+$wb['r_redirect_txt'] = 'R(临时重定向)';
+$wb['l_redirect_txt'] = 'L(最后一个重定向规则)';
+$wb['r_l_redirect_txt'] = 'R,L(临时重定向 + 最后一个规则)';
+$wb['r_301_l_redirect_txt'] = 'R=301,L(永久重定向 + 最后一个规则)';
+$wb['redirect_path_txt'] = '重定向路径';
+$wb['active_txt'] = '启用';
+$wb['document_root_txt'] = '文档根目录';
+$wb['system_user_txt'] = 'Linux 用户';
+$wb['system_group_txt'] = 'Linux 用户组';
+$wb['ip_address_txt'] = 'IPv4 地址';
+$wb['ipv6_address_txt'] = 'IPv6 地址';
+$wb['vhost_type_txt'] = '虚拟主机类型';
+$wb['hd_quota_txt'] = '硬盘配额';
+$wb['traffic_quota_txt'] = '流量配额';
+$wb['cgi_txt'] = 'CGI';
+$wb['ssi_txt'] = 'SSI';
+$wb['errordocs_txt'] = '自定义错误页';
+$wb['subdomain_txt'] = '自动生成子域名';
+$wb['ssl_txt'] = 'SSL';
+$wb['suexec_txt'] = 'SuEXEC';
+$wb['php_txt'] = 'PHP';
+$wb['client_txt'] = '客户';
+$wb['limit_web_domain_txt'] = '您的账户已达到最大网站数限制。';
+$wb['limit_web_aliasdomain_txt'] = '您的账户已达到最大别名域名数限制。';
+$wb['limit_web_subdomain_txt'] = '您的账户已达到最大子域名数限制。';
+$wb['apache_directives_txt'] = 'Apache 指令';
+$wb['domain_error_empty'] = '域名为空。';
+$wb['domain_error_unique'] = '该域名已被使用。';
+$wb['domain_error_regex'] = '域名格式不正确。';
+$wb['domain_error_wildcard'] = '不允许使用通配符子域名。';
+$wb['hd_quota_error_empty'] = '硬盘配额为空或为 0。';
+$wb['traffic_quota_error_empty'] = '流量配额为空。';
+$wb['error_ssl_state_empty'] = 'SSL 状态为空。';
+$wb['error_ssl_locality_empty'] = 'SSL 地区为空。';
+$wb['error_ssl_organisation_empty'] = 'SSL 组织为空。';
+$wb['error_ssl_organisation_unit_empty'] = 'SSL 组织单位为空。';
+$wb['error_ssl_country_empty'] = 'SSL 国家为空。';
+$wb['error_ssl_cert_empty'] = 'SSL 证书字段为空。';
+$wb['client_group_id_txt'] = '客户';
+$wb['stats_password_txt'] = '设置 Web 统计密码';
+$wb['allow_override_txt'] = 'Apache AllowOverride';
+$wb['limit_web_quota_free_txt'] = '最大可用硬盘配额';
+$wb['ssl_state_error_regex'] = 'SSL 状态无效。有效字符为:a-z、0-9 和 .,-_';
+$wb['ssl_locality_error_regex'] = 'SSL 地区无效。有效字符为:a-z、0-9 和 .,-_';
+$wb['ssl_organisation_error_regex'] = 'SSL 组织无效。有效字符为:a-z、0-9 和 .,-_';
+$wb['ssl_organistaion_unit_error_regex'] = 'SSL 组织单位无效。有效字符为:a-z、0-9 和 .,-_';
+$wb['ssl_country_error_regex'] = 'SSL 国家无效。有效字符为:A-Z';
+$wb['limit_traffic_quota_free_txt'] = '最大可用流量配额';
+$wb['redirect_error_regex'] = '重定向路径无效。例如有效的重定向路径为:/test/ 或 https://www.domain.tld/test/';
+$wb['php_open_basedir_txt'] = 'PHP open_basedir';
+$wb['traffic_quota_exceeded_txt'] = '流量配额超出限制';
+$wb['ruby_txt'] = 'Ruby';
+$wb['stats_user_txt'] = 'Web统计用户名';
+$wb['stats_type_txt'] = 'Web统计程序';
+$wb['custom_php_ini_txt'] = '自定义php.ini设置';
+$wb['none_txt'] = 'æ— ';
+$wb['disabled_txt'] = '禁用';
+$wb['no_redirect_txt'] = '不重定向';
+$wb['no_flag_txt'] = '无标志';
+$wb['save_certificate_txt'] = '保存证书';
+$wb['create_certificate_txt'] = '创建证书';
+$wb['delete_certificate_txt'] = '删除证书';
+$wb['nginx_directives_txt'] = 'nginx指令';
+$wb['seo_redirect_txt'] = 'SEO重定向';
+$wb['non_www_to_www_txt'] = '非www -&gt; www';
+$wb['www_to_non_www_txt'] = 'www -&gt; 非www';
+$wb['php_fpm_use_socket_txt'] = '使用Socket进行PHP-FPM';
+$wb['error_no_sni_txt'] = '此服务器上未激活SSL的SNI。每个IP地址只能启用一个SSL证书。';
+$wb['python_txt'] = 'Python';
+$wb['perl_txt'] = 'Perl';
+$wb['pm_max_children_txt'] = 'PHP-FPM进程管理器最大子进程数。';
+$wb['pm_start_servers_txt'] = 'PHP-FPM 进程管理器起始服务器数';
+$wb['pm_min_spare_servers_txt'] = 'PHP-FPM进程管理器中最小的空闲进程数';
+$wb['pm_max_spare_servers_txt'] = 'PHP-FPM进程管理器中最大的空闲进程数';
+$wb['error_php_fpm_pm_settings_txt'] = 'PHP-FPM的pm设置值必须如下: pm.max_children &gt;= pm.max_spare_servers &gt;= pm.start_servers &gt;= pm.min_spare_servers &gt; 0';
+$wb['pm_max_children_error_regex'] = 'PHP-FPM的pm.max_children必须为正整数。';
+$wb['pm_start_servers_error_regex'] = 'PHP-FPM的pm.start_servers必须为正整数。';
+$wb['pm_min_spare_servers_error_regex'] = 'PHP-FPM的pm.min_spare_servers必须为正整数。';
+$wb['pm_max_spare_servers_error_regex'] = 'PHP-FPM的pm.max_spare_servers必须为正整数。';
+$wb['hd_quota_error_regex'] = 'Harddisk quota is invalid.';
+$wb['traffic_quota_error_regex'] = 'Traffic quota is invalid.';
+$wb['server_php_id_txt'] = 'PHP Version';
+$wb['pm_txt'] = 'PHP-FPM Process Manager';
+$wb['pm_process_idle_timeout_txt'] = 'PHP-FPM进程空闲超时时间';
+$wb['pm_max_requests_txt'] = 'PHP-FPM 进程管理器最大请求数';
+$wb['pm_process_idle_timeout_error_regex'] = 'PHP-FPM的 PHP-FPM进程空闲超时时间 必须为正整数。';
+$wb['pm_max_requests_error_regex'] = 'PHP-FPM pm.max_requests 必须是 >=0 的整数值。';
+$wb['pm_ondemand_hint_txt'] = '请注意,您必须具有 PHP 版本 >= 5.3.9 才能使用按需进程管理器。如果您为旧版本的 PHP 选择了按需进程管理器,则 PHP 将不再启动!';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '密码不匹配。';
+$wb['password_match_txt'] = '密码匹配。';
+$wb['available_php_directive_snippets_txt'] = '可用的 PHP 指令片段:';
+$wb['available_apache_directive_snippets_txt'] = '可用的 Apache 指令片段:';
+$wb['available_nginx_directive_snippets_txt'] = '可用的 Nginx 指令片段:';
+$wb['proxy_directives_txt'] = '代理指令';
+$wb['available_proxy_directive_snippets_txt'] = '可用的代理指令片段:';
+$wb['rewrite_rules_txt'] = '重写规则';
+$wb['invalid_rewrite_rules_txt'] = '无效的重写规则';
+$wb['allowed_rewrite_rule_directives_txt'] = '允许的指令:';
+$wb['configuration_error_txt'] = '配置错误';
+$wb['variables_txt'] = '变量';
+$wb['backup_excludes_txt'] = '排除的目录';
+$wb['backup_excludes_note_txt'] = '(使用逗号分隔多个目录。例如:web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = '排除的目录包含无效字符。';
+$wb['subdomain_error_empty'] = '子域名字段为空或包含无效字符。';
+$wb['http_port_txt'] = 'HTTP 端口';
+$wb['https_port_txt'] = 'HTTPS 端口';
+$wb['http_port_error_regex'] = 'HTTP 端口无效。';
+$wb['https_port_error_regex'] = 'HTTPS 端口无效。';
diff --git a/interface/web/sites/lib/lang/cn_web_vhost_subdomain_list.lng b/interface/web/sites/lib/lang/cn_web_vhost_subdomain_list.lng
new file mode 100644
index 0000000000..6209cb34d0
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_web_vhost_subdomain_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = '子域名';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['domain_txt'] = '子域名';
+$wb['add_new_record_txt'] = '添加新子域名';
+?>
diff --git a/interface/web/sites/lib/lang/cn_webdav_user.lng b/interface/web/sites/lib/lang/cn_webdav_user.lng
new file mode 100644
index 0000000000..4b5a1e3888
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_webdav_user.lng
@@ -0,0 +1,21 @@
+<?php
+$wb['dir_txt'] = '目录';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['username_txt'] = '用户名';
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['active_txt'] = '活动';
+$wb['limit_webdav_user_txt'] = '您的帐户的WebDAV用户数量已达到上限。';
+$wb['username_error_empty'] = '用户名为空。';
+$wb['username_error_unique'] = '用户名必须是唯一的。';
+$wb['username_error_regex'] = '用户名包含不允许的字符。';
+$wb['directory_error_empty'] = '目录为空。';
+$wb['parent_domain_id_error_empty'] = '未选择网站。';
+$wb['dir_dot_error'] = '路径中不允许 .. 。';
+$wb['dir_slashdot_error'] = '路径中不允许 ./ 。';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次密码不匹配。';
+$wb['password_match_txt'] = '两次密码匹配。';
+?>
diff --git a/interface/web/sites/lib/lang/cn_webdav_user_list.lng b/interface/web/sites/lib/lang/cn_webdav_user_list.lng
new file mode 100644
index 0000000000..a1899aade9
--- /dev/null
+++ b/interface/web/sites/lib/lang/cn_webdav_user_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'Webdav-用户';
+$wb['active_txt'] = '激活';
+$wb['server_id_txt'] = '服务器';
+$wb['parent_domain_id_txt'] = '网站';
+$wb['username_txt'] = '用户名';
+$wb['add_new_record_txt'] = '添加新Webdav用户';
+?>
diff --git a/interface/web/sites/list/cron.list.php b/interface/web/sites/list/cron.list.php
index fc8c9691a6..ac5513ad9a 100644
--- a/interface/web/sites/list/cron.list.php
+++ b/interface/web/sites/list/cron.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -73,7 +73,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array(   'field'     => "parent_domain_id",
-	'datatype'  => "VARCHAR",
+	'datatype'  => "INTEGER",
 	'formtype'  => "SELECT",
 	'op'        => "=",
 	'prefix'    => "",
diff --git a/interface/web/sites/list/database.list.php b/interface/web/sites/list/database.list.php
index 25e1b8de7f..438837ffc9 100644
--- a/interface/web/sites/list/database.list.php
+++ b/interface/web/sites/list/database.list.php
@@ -103,9 +103,9 @@ if($_SESSION['s']['user']['typ'] == 'admin') {
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, web_database b WHERE (a.server_id = b.server_id) AND ({AUTHSQL-B}) ORDER BY a.server_name',
 		'keyfield'=> 'server_id',
@@ -115,7 +115,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
 			'type' => 'IDNTOUTF8')
 	),
diff --git a/interface/web/sites/list/ftp_user.list.php b/interface/web/sites/list/ftp_user.list.php
index 20a8a327ac..d754ac07a5 100644
--- a/interface/web/sites/list/ftp_user.list.php
+++ b/interface/web/sites/list/ftp_user.list.php
@@ -61,9 +61,9 @@ $liste["item"][] = array( 'field'  => "active",
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, ftp_user b WHERE (a.server_id = b.server_id) AND ({AUTHSQL-B}) ORDER BY a.server_name',
 		'keyfield'=> 'server_id',
@@ -73,7 +73,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
 			'type' => 'IDNTOUTF8')
 	),
diff --git a/interface/web/sites/list/shell_user.list.php b/interface/web/sites/list/shell_user.list.php
index 3f51082d6e..08fa344d85 100644
--- a/interface/web/sites/list/shell_user.list.php
+++ b/interface/web/sites/list/shell_user.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -73,7 +73,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
 			'type' => 'IDNTOUTF8')
 	),
diff --git a/interface/web/sites/list/web_childdomain.list.php b/interface/web/sites/list/web_childdomain.list.php
index 202744e8de..c9760662d7 100644
--- a/interface/web/sites/list/web_childdomain.list.php
+++ b/interface/web/sites/list/web_childdomain.list.php
@@ -61,9 +61,9 @@ $liste["item"][] = array( 'field'  => "active",
 $liste["item"][] = array( 'field'  => "server_id",
 	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT a.server_id, a.server_name FROM server a, web_domain b WHERE (a.server_id = b.server_id) AND ({AUTHSQL-B}) ORDER BY a.server_name',
 		'keyfield'=> 'server_id',
diff --git a/interface/web/sites/list/web_folder.list.php b/interface/web/sites/list/web_folder.list.php
index dc2fb0418a..c881bfc948 100644
--- a/interface/web/sites/list/web_folder.list.php
+++ b/interface/web/sites/list/web_folder.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} AND mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -73,7 +73,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
 			'type' => 'IDNTOUTF8')
 	),
diff --git a/interface/web/sites/list/web_folder_user.list.php b/interface/web/sites/list/web_folder_user.list.php
index f0a1cd8ad2..a6f50fa2a4 100644
--- a/interface/web/sites/list/web_folder_user.list.php
+++ b/interface/web/sites/list/web_folder_user.list.php
@@ -61,7 +61,7 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "web_folder_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'filters'   => array( 0 => array( 'event' => 'SHOW',
 			'type' => 'IDNTOUTF8')
 	),
diff --git a/interface/web/sites/list/webdav_user.list.php b/interface/web/sites/list/webdav_user.list.php
index 04b772d156..66e8a221a0 100644
--- a/interface/web/sites/list/webdav_user.list.php
+++ b/interface/web/sites/list/webdav_user.list.php
@@ -59,11 +59,11 @@ $liste["item"][] = array( 'field'  => "active",
 
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
-	'prefix' => "%",
-	'suffix' => "%",
+	'op'  => "=",
+	'prefix' => "",
+	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
 		'querystring' => 'SELECT server_id,server_name FROM server WHERE {AUTHSQL} and mirror_server_id = 0 ORDER BY server_name',
 		'keyfield'=> 'server_id',
@@ -73,7 +73,7 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "parent_domain_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
 	'op'  => "=",
 	'prefix' => "",
diff --git a/interface/web/strengthmeter/lib/lang/cn_strengthmeter.lng b/interface/web/strengthmeter/lib/lang/cn_strengthmeter.lng
new file mode 100644
index 0000000000..b1b16dd2ac
--- /dev/null
+++ b/interface/web/strengthmeter/lib/lang/cn_strengthmeter.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['password_strength_0_txt'] = '太短';
+$wb['password_strength_1_txt'] = 'å¼±';
+$wb['password_strength_2_txt'] = '一般';
+$wb['password_strength_3_txt'] = '好';
+$wb['password_strength_4_txt'] = '强';
+$wb['password_strength_5_txt'] = '非常强';
+?>
diff --git a/interface/web/tools/lib/lang/cn.lng b/interface/web/tools/lib/lang/cn.lng
new file mode 100644
index 0000000000..0546815644
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn.lng
@@ -0,0 +1,13 @@
+<?php
+$wb['User Settings'] = '用户设置';
+$wb['Settings'] = '设置';
+$wb['ISPConfig Tools'] = 'ISPConfig 工具';
+$wb['Interface'] = '界面';
+$wb['Password and Language'] = '密码和语言';
+$wb['ispconfig_tools_note'] = '此模块允许您更改密码和语言,并开始DNS记录的重新同步。';
+$wb['Sync Tools'] = '同步工具';
+$wb['Resync'] = '重新同步';
+$wb['Import'] = '导入';
+$wb['ISPConfig 3 mail'] = 'ISPConfig 3 邮件';
+$wb['PDNS Tupa'] = 'PowerDNS Tupa';
+?>
diff --git a/interface/web/tools/lib/lang/cn_import_ispconfig.lng b/interface/web/tools/lib/lang/cn_import_ispconfig.lng
new file mode 100644
index 0000000000..032d8e0491
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_import_ispconfig.lng
@@ -0,0 +1,25 @@
+<?php
+$wb['head_txt'] = '从ISPConfig 3导入电子邮件配置';
+$wb['legend_txt'] = '远程服务器连接详细信息';
+$wb['legend2_txt'] = '导入电子邮件域';
+$wb['resync_sites_txt'] = '重新同步网站';
+$wb['resync_ftp_txt'] = '重新同步FTP用户';
+$wb['resync_shell_txt'] = '重新同步shell用户';
+$wb['resync_cron_txt'] = '重新同步cronjobs';
+$wb['resync_db_txt'] = '重新同步clientdb配置';
+$wb['resync_mailbox_txt'] = '重新同步邮箱';
+$wb['resync_dns_txt'] = '重新同步DNS记录';
+$wb['btn_start_txt'] = '开始导入';
+$wb['btn_connect_txt'] = '连接到远程服务器';
+$wb['btn_cancel_txt'] = '取消';
+$wb['client_group_id_txt'] = '本地客户端';
+$wb['mail_domain_txt'] = '远程电子邮件域';
+$wb['import_mailbox_txt'] = '导入邮箱';
+$wb['import_aliasdomain_txt'] = '导入别名域';
+$wb['import_alias_txt'] = '导入电子邮件别名';
+$wb['import_forward_txt'] = '导入转发';
+$wb['import_user_filter_txt'] = '导入用户过滤器';
+$wb['import_spamfilter_txt'] = '导入垃圾邮件过滤器';
+$wb['local_server_txt'] = '本地邮件服务器';
+
+?>
diff --git a/interface/web/tools/lib/lang/cn_import_vpopmail.lng b/interface/web/tools/lib/lang/cn_import_vpopmail.lng
new file mode 100644
index 0000000000..7bc253d358
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_import_vpopmail.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['head_txt'] = '从Vpopmail导入电子邮件配置';
+$wb['legend_txt'] = '远程数据库服务器连接详细信息';
+$wb['btn_start_txt'] = '开始导入';
+$wb['btn_connect_txt'] = '连接到远程服务器';
+$wb['btn_cancel_txt'] = '取消';
+
+?>
diff --git a/interface/web/tools/lib/lang/cn_index.lng b/interface/web/tools/lib/lang/cn_index.lng
new file mode 100644
index 0000000000..f7a2d96d53
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_index.lng
@@ -0,0 +1,4 @@
+<?php
+$wb['page_head_txt'] = 'ISPConfig 工具';
+$wb['page_desc_txt'] = '更改用户设置';
+?>
diff --git a/interface/web/tools/lib/lang/cn_resync.lng b/interface/web/tools/lib/lang/cn_resync.lng
new file mode 100644
index 0000000000..461ba1afcf
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_resync.lng
@@ -0,0 +1,53 @@
+<?php
+$wb['head_txt'] = 'Resync 工具';
+$wb['legend_txt'] = '同步';
+$wb['resync_all_txt'] = '所有服务';
+$wb['resync_sites_txt'] = '网站';
+$wb['resync_ftp_txt'] = 'FTP 帐户';
+$wb['resync_webdav_txt'] = 'WebDAV 用户';
+$wb['resync_shell_txt'] = 'Shell 用户';
+$wb['resync_cron_txt'] = 'Cron 作业';
+$wb['resync_db_txt'] = '客户数据库配置';
+$wb['resync_mailbox_txt'] = '邮箱';
+$wb['resync_mail_txt'] = '邮件域';
+$wb['resync_mailfilter_txt'] = '邮件过滤';
+$wb['resync_mailinglist_txt'] = '邮件列表';
+$wb['resync_dns_txt'] = 'DNS 记录';
+$wb['resync_vserver_txt'] = '虚拟服务器';
+$wb['resync_client_txt'] = '客户和代理商';
+$wb['all_active_txt'] = '所有活动服务器';
+$wb['all_active_mail_txt'] = '所有活动的邮件服务器';
+$wb['all_active_web_txt'] = '所有活动的 Web 服务器';
+$wb['all_active_dns_txt'] = '所有活动的 DNS 服务器';
+$wb['all_active_file_txt'] = '所有活动的文件服务器';
+$wb['all_active_db_txt'] = '所有活动的数据库服务器';
+$wb['all_active_vserver_txt'] = '所有活动的虚拟服务器';
+$wb['do_sites_txt'] = '同步网站';
+$wb['do_ftp_txt'] = '同步 FTP 用户';
+$wb['do_webdav_txt'] = '同步 WebDav 用户';
+$wb['do_shell_txt'] = '同步 Shell 用户';
+$wb['do_cron_txt'] = '同步 Cron 作业';
+$wb['do_db_user_txt'] = '同步数据库用户';
+$wb['do_db_txt'] = '同步数据库';
+$wb['do_mail_txt'] = '同步邮件域';
+$wb['do_mailbox_txt'] = '同步邮箱';
+$wb['do_mail_alias_txt'] = '同步别名';
+$wb['do_mail_access_txt'] = '同步邮件访问';
+$wb['do_mail_contentfilter_txt'] = '同步邮件内容过滤器';
+$wb['do_mail_userfilter_txt'] = '同步邮件用户过滤器';
+$wb['do_mailinglist_txt'] = '同步邮件列表';
+$wb['do_dns_txt'] = '同步 DNS 区域';
+$wb['do_vserver_txt'] = '同步虚拟服务器';
+$wb['do_clients_txt'] = '同步客户和代理商';
+$wb['no_results_txt'] = '未找到任何内容';
+$wb['btn_start_txt'] = '开始';
+$wb['btn_cancel_txt'] = '取消';
+$wb['do_mail_spamfilter_policy_txt'] = '同步垃圾邮件过滤策略';
+$wb['do_mail_spamfilter_txt'] = '同步垃圾邮件过滤器';
+$wb['do_mailget_txt'] = '同步 Fetchmail';
+$wb['resync_mailget_txt'] = 'Fetchmail';
+$wb['resync_mailtransport_txt'] = '电子邮件传输';
+$wb['resync_mailrelay_txt'] = '电子邮件中继';
+$wb['do_mailtransport_txt'] = '已重新同步邮件传输';
+$wb['do_mailrelay_txt'] = '已重新同步邮件中继';
+?>
diff --git a/interface/web/tools/lib/lang/cn_tpl_default.lng b/interface/web/tools/lib/lang/cn_tpl_default.lng
new file mode 100644
index 0000000000..3ad71cdaaf
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_tpl_default.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = '默认主题设置';
+$wb['list_desc_txt'] = '修改默认主题相关选项';
+$wb['no_settings_txt'] = '没有默认主题的设置。';
+$wb['btn_start_txt'] = '保存';
+$wb['btn_cancel_txt'] = '返回';
+?>
diff --git a/interface/web/tools/lib/lang/cn_usersettings.lng b/interface/web/tools/lib/lang/cn_usersettings.lng
new file mode 100644
index 0000000000..2ce3cfc32a
--- /dev/null
+++ b/interface/web/tools/lib/lang/cn_usersettings.lng
@@ -0,0 +1,20 @@
+<?php
+$wb['password_txt'] = '密码';
+$wb['password_strength_txt'] = '密码强度';
+$wb['language_txt'] = '语言';
+$wb['password_mismatch'] = '第二个密码框中的密码与第一个密码框中的密码不匹配。';
+$wb['Form to edit the user password and language.'] = '用户密码和语言编辑表单';
+$wb['Settings'] = '设置';
+$wb['generate_password_txt'] = '生成密码';
+$wb['repeat_password_txt'] = '重复密码';
+$wb['password_mismatch_txt'] = '两次输入的密码不匹配。';
+$wb['password_match_txt'] = '两次输入的密码匹配。';
+$wb['language_txt'] = '语言';
+$wb['startmodule_txt'] = '起始模块';
+$wb['app_theme_txt'] = '界面主题';
+$wb['startmodule_empty'] = '起始模块为空。';
+$wb['startmodule_regex'] = '起始模块含有无效字符。';
+$wb['app_theme_empty'] = '界面主题为空。';
+$wb['app_theme_regex'] = '界面主题含有无效字符。';
+$wb['otp_auth_txt'] = '双重身份认证';
+?>
diff --git a/interface/web/vm/lib/lang/cn.lng b/interface/web/vm/lib/lang/cn.lng
new file mode 100644
index 0000000000..79756e83ef
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['Virtual Servers'] = '虚拟服务器';
+$wb['OS Templates'] = '操作系统模板';
+$wb['VM Templates'] = '虚拟机模板';
+$wb['IP addresses'] = 'IP地址';
+$wb['OpenVZ'] = 'OpenVZ';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_action.lng b/interface/web/vm/lib/lang/cn_openvz_action.lng
new file mode 100644
index 0000000000..f968c49309
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_action.lng
@@ -0,0 +1,17 @@
+<?php
+$wb['head_txt'] = 'VM虚拟机操作:';
+$wb['start_txt'] = '启动虚拟机';
+$wb['stop_txt'] = '停止虚拟机';
+$wb['restart_txt'] = '重启虚拟机';
+$wb['ostemplate_txt'] = '创建操作系统模板';
+$wb['ostemplate_desc_txt'] = '(例如:debian-6.0-i386-custom)';
+$wb['btn_save_txt'] = '执行所选操作';
+$wb['btn_cancel_txt'] = '取消';
+$wb['start_exec_txt'] = '启动命令已发送到虚拟机宿主服务器。可能需要一分钟才能启动虚拟机。';
+$wb['stop_exec_txt'] = '停止命令已发送到虚拟机宿主服务器。可能需要一分钟才能停止虚拟机。';
+$wb['restart_exec_txt'] = '重启命令已发送到虚拟机宿主服务器。可能需要一分钟才能重启虚拟机。';
+$wb['ostemplate_name_error'] = '操作系统模板名称包含不允许的字符。';
+$wb['ostemplate_name_unique_error'] = '已存在具有该名称的操作系统模板。';
+$wb['ostemplate_exec_txt'] = '创建操作系统模板的命令已发送到宿主服务器。将需要几分钟时间才能创建操作系统模板。';
+
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_ip.lng b/interface/web/vm/lib/lang/cn_openvz_ip.lng
new file mode 100644
index 0000000000..9140a92b3a
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_ip.lng
@@ -0,0 +1,9 @@
+<?php
+$wb['server_id_txt'] = '主机服务器';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['vm_id_txt'] = '虚拟服务器';
+$wb['reserved_txt'] = '保留';
+$wb['ip_error_wrong'] = '请填写一个有效的IPv4地址。';
+$wb['ip_error_unique'] = '该IP地址已存在。';
+$wb['IP address'] = 'IP地址';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_ip_list.lng b/interface/web/vm/lib/lang/cn_openvz_ip_list.lng
new file mode 100644
index 0000000000..847328708b
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_ip_list.lng
@@ -0,0 +1,7 @@
+<?php
+$wb['list_head_txt'] = 'OpenVZ IP地址';
+$wb['server_id_txt'] = '服务器';
+$wb['vm_id_txt'] = '虚拟机';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['reserved_txt'] = '保留';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_ostemplate.lng b/interface/web/vm/lib/lang/cn_openvz_ostemplate.lng
new file mode 100644
index 0000000000..716c657ce5
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_ostemplate.lng
@@ -0,0 +1,10 @@
+$wb['template_name_txt'] = '模板名称';
+$wb['template_file_txt'] = '模板文件名';
+$wb['server_id_txt'] = '服务器';
+$wb['allservers_txt'] = '全部服务器';
+$wb['active_txt'] = '状态';
+$wb['description_txt'] = '描述';
+$wb['template_name_error_empty'] = '模板名称为空。';
+$wb['template_file_error_empty'] = '模板文件名为空。';
+$wb['Template'] = '模板';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_ostemplate_list.lng b/interface/web/vm/lib/lang/cn_openvz_ostemplate_list.lng
new file mode 100644
index 0000000000..641440c9e4
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_ostemplate_list.lng
@@ -0,0 +1,8 @@
+<?php
+$wb['list_head_txt'] = 'OpenVZ操作系统模板';
+$wb['active_txt'] = '状态';
+$wb['template_name_txt'] = '模板名称';
+$wb['server_id_txt'] = '服务器';
+$wb['allservers_txt'] = '全部服务器';
+$wb['ostemplate_id_txt'] = 'ID';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_template.lng b/interface/web/vm/lib/lang/cn_openvz_template.lng
new file mode 100644
index 0000000000..8e159e212d
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_template.lng
@@ -0,0 +1,97 @@
+<?php
+$wb['numproc_txt'] = '进程数';
+$wb['numtcpsock_txt'] = 'TCP套接字数';
+$wb['numothersock_txt'] = '其他套接字数';
+$wb['vmguarpages_txt'] = '保证内存页';
+$wb['kmemsize_txt'] = '内核内存限制';
+$wb['tcpsndbuf_txt'] = 'TCP发送缓存区大小';
+$wb['tcprcvbuf_txt'] = 'TCP接收缓存区大小';
+$wb['othersockbuf_txt'] = '其他套接字缓存区大小';
+$wb['dgramrcvbuf_txt'] = '数据报文接收缓存区大小';
+$wb['oomguarpages_txt'] = 'OOM保证内存页';
+$wb['privvmpages_txt'] = '私有内存页';
+$wb['lockedpages_txt'] = '锁定内存页';
+$wb['shmpages_txt'] = '共享内存页';
+$wb['physpages_txt'] = '物理内存页';
+$wb['numfile_txt'] = '文件数';
+$wb['avnumproc_txt'] = '平均进程数';
+$wb['numflock_txt'] = '文件锁数';
+$wb['numpty_txt'] = 'pty数量';
+$wb['numsiginfo_txt'] = '信号信息数量';
+$wb['dcachesize_txt'] = 'D缓存大小';
+$wb['numiptent_txt'] = 'IPtables规则数';
+$wb['swappages_txt'] = '交换内存页数';
+$wb['hostname_txt'] = '主机名';
+$wb['nameserver_txt'] = 'DNS服务器';
+$wb['nameserver_desc_txt'] = '(以空格分隔)';
+$wb['capability_txt'] = '能力';
+$wb['template_name_txt'] = '模板名称';
+$wb['diskspace_txt'] = '磁盘空间';
+$wb['ram_txt'] = '内存(保证)';
+$wb['ram_burst_txt'] = '内存(突发)';
+$wb['cpu_units_txt'] = 'CPU单位';
+$wb['cpu_num_txt'] = 'CPU核数';
+$wb['cpu_limit_txt'] = 'CPU限制 %';
+$wb['io_priority_txt'] = 'I/O 优先级';
+$wb['active_txt'] = '启用';
+$wb['description_txt'] = '描述';
+$wb['numproc_desc_txt'] = '进程和线程数。';
+$wb['numtcpsock_desc_txt'] = 'TCP 套接字数。';
+$wb['numothersock_desc_txt'] = '除 TCP 以外的套接字数。';
+$wb['vmguarpages_desc_txt'] = '分配保证内存的页面数。';
+$wb['kmemsize_desc_txt'] = '为此容器中的进程分配的不可交换内核内存大小。';
+$wb['tcpsndbuf_desc_txt'] = 'TCP 发送缓冲区的总大小。';
+$wb['tcprcvbuf_desc_txt'] = 'TCP 接收缓冲区的总大小。';
+$wb['othersockbuf_desc_txt'] = 'UNIX 域套接字缓冲区、UDP 和其他数据报协议发送缓冲区的总大小。';
+$wb['dgramrcvbuf_desc_txt'] = 'UDP 和其他数据报协议的接收缓冲区。';
+$wb['oomguarpages_desc_txt'] = '内存超量分配(内存耗尽时的保证杀死保证),以页面为单位。';
+$wb['privvmpages_desc_txt'] = '内存分配限制,以页面为单位。';
+$wb['lockedpages_desc_txt'] = '不允许交换的进程页面(通过 mlock(2) 锁定的页面)。';
+$wb['shmpages_desc_txt'] = '共享内存的总大小(IPC、共享匿名映射和 tmpfs 对象),以页面为单位。';
+$wb['physpages_desc_txt'] = '进程使用的总物理页面数。';
+$wb['numfile_desc_txt'] = '打开文件的数目。';
+$wb['numflock_desc_txt'] = '文件锁定的数目。';
+$wb['numpty_desc_txt'] = '伪终端的数目。';
+$wb['numsiginfo_desc_txt'] = 'siginfo 结构的数目。';
+$wb['dcachesize_desc_txt'] = '锁定在内存中的 dentry 和 inode 结构的总大小。';
+$wb['numiptent_desc_txt'] = 'NETFILTER(IP 数据包过滤)条目的数目。';
+$wb['swappages_desc_txt'] = '在容器中显示的交换空间量。';
+$wb['create_dns_txt'] = '为主机名创建 DNS 记录';
+$wb['template_name_error_empty'] = '模板名称为空。';
+$wb['diskspace_error_empty'] = '磁盘空间为空。';
+$wb['ram_error_empty'] = '内存(保证)为空。';
+$wb['ram_burst_error_empty'] = '内存(突发)为空。';
+$wb['cpu_units_error_empty'] = 'CPU 单位为空。';
+$wb['cpu_num_error_empty'] = 'CPU 核心数为空。';
+$wb['cpu_limit_error_empty'] = 'CPU 限制百分比为空。';
+$wb['io_priority_error_empty'] = 'I/O 优先级为空。';
+$wb['template_nameserver_error_empty'] = '名称服务器为空。';
+$wb['numproc_error_empty'] = '进程数为空。';
+$wb['numtcpsock_error_empty'] = 'TCP 套接字数为空。';
+$wb['numothersock_error_empty'] = '非 TCP 套接字数为空。';
+$wb['vmguarpages_error_empty'] = '内存保证页数为空。';
+$wb['kmemsize_error_empty'] = '为此容器中的进程分配的不可交换内核内存大小为空。';
+$wb['tcpsndbuf_error_empty'] = 'TCP 发送缓冲区的总大小为空。';
+$wb['tcprcvbuf_error_empty'] = 'TCP 接收缓冲区的总大小为空。';
+$wb['othersockbuf_error_empty'] = 'UNIX 域套接字缓冲区、UDP 和其他数据报协议发送缓冲区的总大小为空。';
+$wb['dgramrcvbuf_error_empty'] = 'UDP 和其他数据报协议的接收缓冲区为空。';
+$wb['oomguarpages_error_empty'] = '当内存“超订”时(保证内存杀死保证),保证内存的数量为空。';
+$wb['privvmpages_error_empty'] = '内存分配限制页数为空。';
+$wb['lockedpages_error_empty'] = '进程页面不允许交换(通过 mlock(2) 锁定的页面)为空。';
+$wb['shmpages_error_empty'] = '共享内存(IPC、共享匿名映射和 tmpfs 对象)的总大小(以页面为单位)为空。';
+$wb['physpages_error_empty'] = '进程使用的 RAM 页面的总数为空。';
+$wb['numfile_error_empty'] = '打开的文件数为空。';
+$wb['avnumproc_error_empty'] = '平均进程数为空。';
+$wb['numflock_error_empty'] = '文件锁数为空。';
+$wb['numpty_error_empty'] = '伪终端数为空。';
+$wb['numsiginfo_error_empty'] = 'siginfo 结构的数量为空。';
+$wb['dcachesize_error_empty'] = '锁定在内存中的 dentry 和 inode 结构的总大小为空。';
+$wb['numiptent_error_empty'] = 'NETFILTER(IP 数据包过滤)条目数为空。';
+$wb['swappages_error_empty'] = '要在容器中显示的交换空间的数量为空。';
+$wb['Template'] = '模板';
+$wb['Advanced'] = '高级';
+$wb['features_txt'] = '功能';
+$wb['iptables_txt'] = 'IP表';
+$wb['custom_txt'] = '自定义设置';
+$wb['custom_error'] = '不允许在自定义设置中使用:';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_vm.lng b/interface/web/vm/lib/lang/cn_openvz_vm.lng
new file mode 100644
index 0000000000..cbb92dc45f
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_vm.lng
@@ -0,0 +1,45 @@
+<?php
+$wb['diskspace_txt'] = '磁盘空间';
+$wb['ram_txt'] = '内存(保证)';
+$wb['ram_burst_txt'] = '内存(突发)';
+$wb['cpu_units_txt'] = 'CPU 单位';
+$wb['cpu_num_txt'] = 'CPU 数量';
+$wb['cpu_limit_txt'] = 'CPU 使用率限制 %';
+$wb['io_priority_txt'] = 'I/O 优先级';
+$wb['nameserver_txt'] = '域名服务器';
+$wb['nameserver_desc_txt'] = '(用空格分隔)';
+$wb['capability_txt'] = '能力';
+$wb['server_id_txt'] = '主机服务器';
+$wb['ostemplate_id_txt'] = '操作系统模板';
+$wb['template_id_txt'] = '模板';
+$wb['ip_address_txt'] = 'IP 地址';
+$wb['hostname_txt'] = '主机名';
+$wb['vm_password_txt'] = '虚拟机密码';
+$wb['start_boot_txt'] = '开机启动';
+$wb['active_txt'] = '启用';
+$wb['description_txt'] = '描述';
+$wb['client_group_id_txt'] = '客户';
+$wb['veid_txt'] = 'VEID';
+$wb['create_dns_txt'] = '为主机名创建 DNS';
+$wb['active_until_date_txt'] = '启用到期日期';
+$wb['ip_address_error_empty'] = 'IP 地址为空。';
+$wb['hostname_error_empty'] = '主机名为空。';
+$wb['vm_password_error_empty'] = '虚拟机密码为空。';
+$wb['veid_error_empty'] = 'VEID 为空。';
+$wb['veid_error_unique'] = 'VEID 已存在。';
+$wb['diskspace_error_empty'] = '磁盘空间为空。';
+$wb['ram_error_empty'] = '内存(保证)为空。';
+$wb['ram_burst_error_empty'] = '内存(突发)为空。';
+$wb['cpu_units_error_empty'] = 'CPU 单位为空。';
+$wb['cpu_num_error_empty'] = 'CPU 数量为空。';
+$wb['cpu_limit_error_empty'] = 'CPU 使用率限制为空。';
+$wb['io_priority_error_empty'] = 'I/O 优先级为空。';
+$wb['template_nameserver_error_empty'] = '域名服务器为空。';
+$wb['Virtual server'] = '虚拟服务器';
+$wb['Advanced'] = '高级';
+$wb['features_txt'] = '功能';
+$wb['iptables_txt'] = 'IP Tables';
+$wb['custom_txt'] = '自定义设置';
+$wb['bootorder_txt'] = '启动顺序优先级';
+$wb['bootorder_error_notpositive'] = '启动顺序优先级只能是正整数。';
+?>
diff --git a/interface/web/vm/lib/lang/cn_openvz_vm_list.lng b/interface/web/vm/lib/lang/cn_openvz_vm_list.lng
new file mode 100644
index 0000000000..739f152157
--- /dev/null
+++ b/interface/web/vm/lib/lang/cn_openvz_vm_list.lng
@@ -0,0 +1,10 @@
+<?php
+$wb['list_head_txt'] = '虚拟服务器';
+$wb['active_txt'] = '启用';
+$wb['server_id_txt'] = '主机服务器';
+$wb['ostemplate_id_txt'] = 'OS模板';
+$wb['template_id_txt'] = '虚拟机模板';
+$wb['hostname_txt'] = '主机名';
+$wb['ip_address_txt'] = 'IP地址';
+$wb['veid_txt'] = 'VEID';
+?>
diff --git a/interface/web/vm/list/openvz_ip.list.php b/interface/web/vm/list/openvz_ip.list.php
index 80869918ad..b5decae51e 100644
--- a/interface/web/vm/list/openvz_ip.list.php
+++ b/interface/web/vm/list/openvz_ip.list.php
@@ -48,9 +48,9 @@ $liste["auth"]    = "yes";
 *****************************************************/
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
@@ -62,9 +62,9 @@ $liste["item"][] = array( 'field'  => "server_id",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "vm_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
diff --git a/interface/web/vm/list/openvz_ostemplate.list.php b/interface/web/vm/list/openvz_ostemplate.list.php
index c2df7eb386..036f0b855e 100644
--- a/interface/web/vm/list/openvz_ostemplate.list.php
+++ b/interface/web/vm/list/openvz_ostemplate.list.php
@@ -76,9 +76,9 @@ $liste["item"][] = array( 'field'  => "template_name",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
diff --git a/interface/web/vm/list/openvz_vm.list.php b/interface/web/vm/list/openvz_vm.list.php
index 261427491b..894d1bc6b9 100644
--- a/interface/web/vm/list/openvz_vm.list.php
+++ b/interface/web/vm/list/openvz_vm.list.php
@@ -66,9 +66,9 @@ $liste["item"][] = array( 'field'  => "veid",
 	'value'  => "");
 
 $liste["item"][] = array( 'field'  => "server_id",
-	'datatype' => "VARCHAR",
+	'datatype' => "INTEGER",
 	'formtype' => "SELECT",
-	'op'  => "like",
+	'op'  => "=",
 	'prefix' => "",
 	'suffix' => "",
 	'datasource' => array (  'type' => 'SQL',
diff --git a/remoting_client/API-docs/monitor_jobqueue_count.html b/remoting_client/API-docs/monitor_jobqueue_count.html
new file mode 100644
index 0000000000..81a98292ab
--- /dev/null
+++ b/remoting_client/API-docs/monitor_jobqueue_count.html
@@ -0,0 +1,27 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html><head><title>ISPCOnfig 3 remote API documentation</title>
+
+  
+
+  
+  
+  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+  <link rel="stylesheet" type="text/css" href="definitionen.css">
+  <style type="text/css">
+  </style></head>
+
+<body>
+<div style="padding:40px">
+<h1>monitor_jobqueue_count(<span class="var">$session_id</span>, <span class="var">$server_id = 0</span>);</h1>
+<br>
+<p class="headgrp">Description: </p>
+<p class="margin"> Get the number of pending jobs from jobqueue.</p><br>
+<p class="headgrp">Input Variables: </p> 
+<p class="margin"> <span class="var">$session_id</span>, <span class="var">$server_id</span></p>
+<p class="headgrp">Parameters (in <span class="var">$params</span>): </p>
+<p class="margin"> None</p>
+<p class="headgrp">Output: </p> 
+<p class="margin"> Returns the number of pending jobs from jobqueue.</p>
+</div>
+
+</body></html>
diff --git a/remoting_client/examples/sites_web_domain_get.php b/remoting_client/examples/sites_web_domain_get.php
index 7f5b22f6ac..47fe8cbd44 100644
--- a/remoting_client/examples/sites_web_domain_get.php
+++ b/remoting_client/examples/sites_web_domain_get.php
@@ -16,9 +16,14 @@ try {
 
 	//* Set the function parameters.
 	$domain_id = 2;
+	$domain_name = 'example.com';
 
+	// Lookup by ID.
 	$domain_record = $client->sites_web_domain_get($session_id, $domain_id);
 
+	// Lookup by name.
+	$domain_record = $client->sites_web_domain_get($session_id, array('domain' => $domain_name));
+
 	print_r($domain_record);
 
 	if($client->logout($session_id)) {
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index f687bee839..ea1c847344 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -13,7 +13,7 @@
 <tmpl_loop name='vhosts'>
 <VirtualHost {tmpl_var name='ip_address'}:{tmpl_var name='port'}>
 <tmpl_if name='use_proxy_protocol' op='==' value='y'>
-<tmpl_if name='apache_version' op='>=' value='2.4.30' format='version'>
+<tmpl_if name='apache_full_version' op='>=' value='2.4.30' format='version'>
 	<IfModule mod_remoteip.c>
 		RemoteIPProxyProtocol On
 	</IfModule>
diff --git a/server/lib/classes/aps_installer.inc.php b/server/lib/classes/aps_installer.inc.php
index 922f32e612..e50c601cec 100644
--- a/server/lib/classes/aps_installer.inc.php
+++ b/server/lib/classes/aps_installer.inc.php
@@ -384,7 +384,7 @@ class ApsInstaller extends ApsBase
 					if(is_dir($this->document_root)){
 						$files = array_diff(scandir($this->document_root), array('.', '..', 'error', 'stats'));
 						foreach($files as $file){
-							if(is_dir($this->document_root.'/'.$file)){
+							if(is_dir($this->document_root.'/'.$file) and !is_link($this->document_root.'/'.$file)){
 								$app->file->removeDirectory($this->document_root.'/'.$file);
 							} else {
 								@unlink($this->document_root.'/'.$file);
diff --git a/server/lib/classes/backup.inc.php b/server/lib/classes/backup.inc.php
index 2b6d21e57e..57f264ec44 100644
--- a/server/lib/classes/backup.inc.php
+++ b/server/lib/classes/backup.inc.php
@@ -1076,11 +1076,10 @@ class backup
     {
         global $app;
         if ( ! is_dir($repos_path)) {
+            $dbt = debug_backtrace();
+            $dbt_info = $dbt[1]['file'] . ':' . $dbt[1]['line'];
             $app->log("Unknown path " . var_export($repos_path, TRUE)
-                . ' called from ' . (function() {
-                    $dbt = debug_backtrace();
-                    return $dbt[1]['file'] . ':' . $dbt[1]['line'];
-                })(), LOGLEVEL_ERROR);
+                . ' called from ' . $dbt_info, LOGLEVEL_ERROR);
             return FALSE;
         }
         switch ($backup_mode) {
@@ -1306,13 +1305,13 @@ class backup
         foreach ($domains as $rec) {
             $domain_id = $rec['domain_id'];
             $domain_backup_dir = $backup_dir . '/web' . $domain_id;
+            $web_path = $rec['document_root'];
+            $backup_download_dir = $web_path . '/backup';
 
             // Remove backupdir symlink and create as directory instead
             if (is_link($backup_download_dir) || !is_dir($backup_download_dir)) {
-                $web_path = $rec['document_root'];
                 $app->system->web_folder_protection($web_path, false);
 
-                $backup_download_dir = $web_path . '/backup';
                 if (is_link($backup_download_dir)) {
                     unlink($backup_download_dir);
                 }
diff --git a/server/lib/classes/cron.d/200-ftplogfiles.inc.php b/server/lib/classes/cron.d/200-ftplogfiles.inc.php
index a88a360ae2..430d8ce412 100644
--- a/server/lib/classes/cron.d/200-ftplogfiles.inc.php
+++ b/server/lib/classes/cron.d/200-ftplogfiles.inc.php
@@ -70,7 +70,7 @@ class cronjob_ftplogfiles extends cronjob {
 		
 		function add_ftp_traffic(&$traffic_array, $parsed_line)
 		{		
-			if(is_array($traffic_array[$parsed_line['date']]) && array_key_exists($parsed_line['domain'], $traffic_array[$parsed_line['date']]))
+			if(isset($traffic_array[$parsed_line['date']]) && is_array($traffic_array[$parsed_line['date']]) && array_key_exists($parsed_line['domain'], $traffic_array[$parsed_line['date']]))
 			{
 				$traffic_array[$parsed_line['date']][$parsed_line['domain']][$parsed_line['direction']] += $parsed_line['size'];
 			}
@@ -89,13 +89,13 @@ class cronjob_ftplogfiles extends cronjob {
 			while($line = fgets($fp))
 			{
 				$parsed_line = parse_ftp_log($line);
+				if (!empty($parsed_line)) {
+					$sql = "SELECT wd.domain FROM ftp_user AS fu INNER JOIN web_domain AS wd ON fu.parent_domain_id = wd.domain_id WHERE fu.username = ? ";
+					$temp = $app->db->queryOneRecord($sql, $parsed_line['username'] );
+					$parsed_line['domain'] = $temp['domain'];
+					add_ftp_traffic($ftp_traffic, $parsed_line);
+				}
 
-				$sql = "SELECT wd.domain FROM ftp_user AS fu INNER JOIN web_domain AS wd ON fu.parent_domain_id = wd.domain_id WHERE fu.username = ? ";		
-				$temp = $app->db->queryOneRecord($sql, $parsed_line['username'] );
-
-				$parsed_line['domain'] = $temp['domain'];
-
-				add_ftp_traffic($ftp_traffic, $parsed_line);
 			}
 
 			fclose($fp);
diff --git a/server/lib/classes/cron.d/300-quota_notify.inc.php b/server/lib/classes/cron.d/300-quota_notify.inc.php
index 08cd283ef7..2d8ddc5b86 100644
--- a/server/lib/classes/cron.d/300-quota_notify.inc.php
+++ b/server/lib/classes/cron.d/300-quota_notify.inc.php
@@ -57,11 +57,18 @@ class cronjob_quota_notify extends cronjob {
 
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
 
-		// Get client email and eventual reseller email
-		$client_group_id = $rec["sys_groupid"];
-		$client = $app->db->queryOneRecord("SELECT client.email, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = ?", $client_group_id);
-		if($client['parent_client_id'] > 0) {
-			$reseller = $app->db->queryOneRecord("SELECT email FROM client WHERE client_id = ?", $client['parent_client_id']);
+		// Get client email and eventual reseller email in array
+		$clients = [];
+		$sql = "SELECT client.email,client.parent_client_id, sys_group.groupid FROM sys_group, client WHERE sys_group.client_id = client.client_id";
+		$records = $app->db->queryAllRecords($sql);
+		if(is_array($records)) {
+			foreach($records as $rec) {
+				$reseller = ($rec['parent_client_id'] > 0) ? $app->db->queryOneRecord("SELECT email FROM client WHERE client_id = ?", $rec['parent_client_id']) : '';
+				$clients[$rec['groupid']] = [
+					'email' => $rec['email'],
+					'reseller' => $reseller
+				];
+			}
 		}
 
 		//######################################################################################################
@@ -114,15 +121,15 @@ class cronjob_quota_notify extends cronjob {
 
 							//* Send email to reseller
 							if($web_config['overtraffic_notify_reseller'] == 'y') {
-								if($reseller['email'] != '') {
-									$recipients[] = $reseller['email'];
+								if($clients[$rec['sys_groupid']]['reseller'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 								}
 							}
 
 							//* Send email to client
 							if($web_config['overtraffic_notify_client'] == 'y') {
-								if($client['email'] != '') {
-									$recipients[] = $client['email'];
+								if($clients[$rec['sys_groupid']]['email'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['email'];
 								}
 							}
 
@@ -245,15 +252,15 @@ class cronjob_quota_notify extends cronjob {
 
 							//* Send email to reseller
 							if($web_config['overquota_notify_reseller'] == 'y') {
-								if($reseller['email'] != '') {
-									$recipients[] = $reseller['email'];
+								if($clients[$rec['sys_groupid']]['reseller'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 								}
 							}
 
 							//* Send email to client
 							if($web_config['overquota_notify_client'] == 'y') {
-								if($client['email'] != '') {
-									$recipients[] = $client['email'];
+								if($clients[$rec['sys_groupid']]['email'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['email'];
 								}
 							}
 							$this->_tools->send_notification_email('web_quota_ok_notification', $placeholders, $recipients);
@@ -285,15 +292,15 @@ class cronjob_quota_notify extends cronjob {
 
 							//* Send email to reseller
 							if($web_config['overquota_notify_reseller'] == 'y') {
-								if($reseller['email'] != '') {
-									$recipients[] = $reseller['email'];
+								if($clients[$rec['sys_groupid']]['reseller'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 								}
 							}
 
 							//* Send email to client
 							if($web_config['overquota_notify_client'] == 'y') {
-								if($client['email'] != '') {
-									$recipients[] = $client['email'];
+								if($clients[$rec['sys_groupid']]['email'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['email'];
 								}
 							}
 							$this->_tools->send_notification_email('web_quota_notification', $placeholders, $recipients);
@@ -383,15 +390,15 @@ class cronjob_quota_notify extends cronjob {
 
 							//* Send email to reseller
 							if($web_config['overquota_notify_reseller'] == 'y') {
-								if($reseller['email'] != '') {
-									$recipients[] = $reseller['email'];
+								if($clients[$rec['sys_groupid']]['reseller'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 								}
 							}
 
 							//* Send email to client
 							if($mail_config['overquota_notify_client'] == 'y') {
-								if($client['email'] != '') {
-									$recipients[] = $client['email'];
+								if($clients[$rec['sys_groupid']]['email'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['email'];
 								}
 							}
 
@@ -423,15 +430,15 @@ class cronjob_quota_notify extends cronjob {
 
 							//* Send email to reseller
 							if($web_config['overquota_notify_reseller'] == 'y') {
-								if($reseller['email'] != '') {
-									$recipients[] = $reseller['email'];
+								if($clients[$rec['sys_groupid']]['reseller'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 								}
 							}
 
 							//* Send email to client
 							if($mail_config['overquota_notify_client'] == 'y') {
-								if($client['email'] != '') {
-									$recipients[] = $client['email'];
+								if($clients[$rec['sys_groupid']]['email'] != '') {
+									$recipients[] = $clients[$rec['sys_groupid']]['email'];
 								}
 							}
 
@@ -512,15 +519,15 @@ class cronjob_quota_notify extends cronjob {
 
 										//* Send email to reseller
 										if($web_config['overquota_db_notify_reseller'] == 'y') {
-											if($reseller['email'] != '') {
-												$recipients[] = $reseller['email'];
+											if($clients[$rec['sys_groupid']]['reseller'] != '') {
+												$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 											}
 										}
 										
 										//* Send email to client
 										if($web_config['overquota_db_notify_client'] == 'y') {
-											if($client['email'] != '') {
-												$recipients[] = $client['email'];
+											if($clients[$rec['sys_groupid']]['email'] != '') {
+												$recipients[] = $clients[$rec['sys_groupid']]['email'];
 											}
 										}
 										$this->_tools->send_notification_email('db_quota_notification', $placeholders, $recipients);
@@ -550,19 +557,17 @@ class cronjob_quota_notify extends cronjob {
 
 										//* Send email to reseller
 										if($web_config['overquota_db_notify_reseller'] == 'y') {
-											if($reseller['email'] != '') {
-												$recipients[] = $reseller['email'];
+											if($clients[$rec['sys_groupid']]['reseller'] != '') {
+												$recipients[] = $clients[$rec['sys_groupid']]['reseller'];
 											}
 										}
 
 										//* Send email to client
 										if($mail_config['overquota_notify_client'] == 'y') {
-											if($client['email'] != '') {
-												$recipients[] = $client['email'];
+											if($clients[$rec['sys_groupid']]['email'] != '') {
+												$recipients[] = $clients[$rec['sys_groupid']]['email'];
 											}
 										}
-											
-
 										$this->_tools->send_notification_email('db_quota_ok_notification', $placeholders, $recipients);
 
 									}
diff --git a/server/lib/classes/db_mysql.inc.php b/server/lib/classes/db_mysql.inc.php
index 3096a5b062..f2299de343 100644
--- a/server/lib/classes/db_mysql.inc.php
+++ b/server/lib/classes/db_mysql.inc.php
@@ -825,12 +825,13 @@ class db
 		return true;
 	}
 
-	//** Deletes a record and saves the changes into the datalog
+	// Updates a datalog record to store an error state.
 	public function datalogError($errormsg) {
 		global $app;
 
-		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) $this->query("UPDATE sys_datalog set error = ? WHERE datalog_id = ?", $errormsg, $app->modules->current_datalog_id);
-
+		if(isset($app->modules->current_datalog_id) && $app->modules->current_datalog_id > 0) {
+			$this->query("UPDATE sys_datalog set error = ? WHERE datalog_id = ?", $errormsg, $app->modules->current_datalog_id);
+		}
 		return true;
 	}
 
diff --git a/server/lib/classes/file.inc.php b/server/lib/classes/file.inc.php
index 28757d0dd5..d3117c36dc 100644
--- a/server/lib/classes/file.inc.php
+++ b/server/lib/classes/file.inc.php
@@ -118,12 +118,13 @@ class file{
 			$content = $input;
 		}
 		$lines = explode("\n", $content);
+		$new_lines = array();
 		if(!empty($lines)){
 			foreach($lines as $line){
 				if(trim($line) != '') $new_lines[] = $line;
 			}
 		}
-		if(is_array($new_lines)){
+		if(!empty($new_lines)){
 			$content = implode("\n", $new_lines);
 		} else {
 			$content = '';
diff --git a/server/lib/classes/letsencrypt.inc.php b/server/lib/classes/letsencrypt.inc.php
index 5a69ce18a1..6a1d2d02ac 100644
--- a/server/lib/classes/letsencrypt.inc.php
+++ b/server/lib/classes/letsencrypt.inc.php
@@ -304,6 +304,7 @@ class letsencrypt {
 				'domain' => $domain,
 				'key' => $ssl_dir.'/'.$domain.'-le.key',
 				'key2' => $ssl_dir.'/'.$domain.'-le.key.org',
+				'csr' => '', # Not used for LE.
 				'crt' => $ssl_dir.'/'.$domain.'-le.crt',
 				'bundle' => $ssl_dir.'/'.$domain.'-le.bundle'
 			);
@@ -405,6 +406,10 @@ class letsencrypt {
 			$app->log("There were " . $le_domain_count . " domains in the domain list. LE only supports 100, so we strip the rest.", LOGLEVEL_WARN);
 		}
 
+		if ($le_domain_count == 0) {
+			return false;
+		}
+
 		// unset useless data
 		unset($subdomains);
 		unset($aliasdomains);
diff --git a/server/lib/classes/modules.inc.php b/server/lib/classes/modules.inc.php
index 3fd788d0a9..9b92199fd8 100644
--- a/server/lib/classes/modules.inc.php
+++ b/server/lib/classes/modules.inc.php
@@ -186,7 +186,7 @@ class modules {
 						$app->db->query($sql, $d['dbtable'], $idx[0], $idx[1]);
 						if($app->db->errorNumber > 0) {
 							$replication_error = true;
-							$app->log("Replication failed. Error: (" . $d[dbtable] . ") " . $app->db->errorMessage . " # SQL: " . $sql, LOGLEVEL_ERROR);
+							$app->log("Replication failed. Error: (" . $d['dbtable'] . ") " . $app->db->errorMessage . " # SQL: " . $sql, LOGLEVEL_ERROR);
 						}
 						$log = $app->db->_build_query_string($sql, $d['dbtable'], $idx[0], $idx[1]);
 						$app->log('Replicated from master: '.$log, LOGLEVEL_DEBUG);
diff --git a/server/lib/classes/services.inc.php b/server/lib/classes/services.inc.php
index 0914081672..0cd8244701 100644
--- a/server/lib/classes/services.inc.php
+++ b/server/lib/classes/services.inc.php
@@ -57,7 +57,7 @@ class services {
 			// call_user_method($function_name,$app->loaded_modules[$module_name],$action);
 			return call_user_func(array($app->loaded_modules[$module_name], $function_name), $action);
 		} else {
-			$app->log("Unable to restart $service_name. Service not registered.", LOGLEVEL_WARNING);
+			$app->log("Unable to restart $service_name. Service not registered.", LOGLEVEL_WARN);
 			return array('output' => '', 'retval' => 0);
 		}
 
diff --git a/server/lib/classes/system.inc.php b/server/lib/classes/system.inc.php
index 7e4e7ae447..087efa48a6 100644
--- a/server/lib/classes/system.inc.php
+++ b/server/lib/classes/system.inc.php
@@ -2132,6 +2132,26 @@ class system{
 		}
 		
 		$full_init_script_path = realpath($init_script_directory.'/'.$servicename);
+    
+    //** Gentoo, keep symlink as init script, but do some checks
+    if(file_exists('/etc/gentoo-release')) {  
+      //* check if init script is symlink
+      if(is_link($init_script_directory.'/'.$servicename)) {                 
+        //* Check init script owner (realpath, symlink is checked later)
+      	if(fileowner($full_init_script_path) !== 0) {
+      		$app->log('Init script '.$full_init_script_path.' not owned by root user',LOGLEVEL_WARN);
+      		return false;
+        }
+        
+        //* full path is symlink
+        $full_init_script_path_symlink = $init_script_directory.'/'.$servicename;
+        
+        //* check if realpath matches symlink
+        if(strpos($full_init_script_path_symlink,$full_init_script_path) == 0) {
+          $full_init_script_path = $full_init_script_path_symlink;
+        }
+      }
+    }
 		
 		if($full_init_script_path == '') {
 			$app->log('No init script, we quit here.',LOGLEVEL_WARN);
@@ -2327,6 +2347,16 @@ class system{
 		return true;
 	}
 
+	public function is_redhat_os() {
+		global $app;
+
+		if(file_exists('/etc/redhat-release') && (filesize('/etc/redhat-release') > 0)) {
+			return true;
+		} else {
+			return false;
+		}
+	}
+
 	public function is_allowed_path($path) {
 		global $app;
 
diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php
index dcbd8a9b9f..d829b5979e 100644
--- a/server/plugins-available/apache2_plugin.inc.php
+++ b/server/plugins-available/apache2_plugin.inc.php
@@ -266,7 +266,7 @@ class apache2_plugin {
 		// load the server configuration options
 		$app->uses('getconf');
 		$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
-		if ($web_config['CA_path']!='' && !file_exists($web_config['CA_path'].'/openssl.cnf'))
+		if (isset($web_config['CA_path']) && $web_config['CA_path'] !='' && !file_exists($web_config['CA_path'].'/openssl.cnf'))
 			$app->log("CA path error, file does not exist:".$web_config['CA_path'].'/openssl.cnf', LOGLEVEL_ERROR);
 
 		//* Only vhosts can have a ssl cert
@@ -1169,7 +1169,7 @@ class apache2_plugin {
 		if(!is_dir($web_config['website_basedir'].'/conf')) $app->system->mkdir($web_config['website_basedir'].'/conf');
 
 		//* add open_basedir restriction to custom php.ini content, required for suphp only
-		if(!stristr($data['new']['custom_php_ini'], 'open_basedir') && $data['new']['php'] == 'suphp') {
+		if(isset($data['new']['custom_php_ini']) && !stristr($data['new']['custom_php_ini'], 'open_basedir') && $data['new']['php'] == 'suphp') {
 			$data['new']['custom_php_ini'] .= "\nopen_basedir = '".$data['new']['php_open_basedir']."'\n";
 		}
 
@@ -1194,7 +1194,7 @@ class apache2_plugin {
 		//* Create custom php.ini
 		# Because of custom default PHP directives from snippet
 		# php.ini custom values order os: 1. general settings 2. Directive Snippets settings 3. custom php.ini settings defined in domain settings
-		if(trim($data['new']['custom_php_ini']) != '' || $data['new']['directive_snippets_id'] > "0") {
+		if((isset($data['new']['custom_php_ini']) && trim($data['new']['custom_php_ini']) != '') || $data['new']['directive_snippets_id'] > "0") {
 			$has_custom_php_ini = true;
 			$custom_sendmail_path = false;
 			if(!is_dir($custom_php_ini_dir)) $app->system->mkdirpath($custom_php_ini_dir);
@@ -1342,6 +1342,7 @@ class apache2_plugin {
 
 		$tpl->setVar($vhost_data);
 		$tpl->setVar('apache_version', $app->system->getapacheversion());
+		$tpl->setVar('apache_full_version', $app->system->getapacheversion(true));
 
 		// Rewrite rules
 		$rewrite_rules = array();
@@ -1400,14 +1401,12 @@ class apache2_plugin {
 
 		$server_alias = array();
 
-		// get autoalias
-		$auto_alias = $web_config['website_autoalias'];
-		if($auto_alias != '') {
+		if(isset($web_config['website_autoalias']) && $web_config['website_autoalias'] != '') {
 			// get the client username
 			$client = $app->db->queryOneRecord("SELECT `username` FROM `client` WHERE `client_id` = ?", $client_id);
 			$aa_search = array('[client_id]', '[website_id]', '[client_username]', '[website_domain]');
 			$aa_replace = array($client_id, $data['new']['domain_id'], $client['username'], $data['new']['domain']);
-			$auto_alias = str_replace($aa_search, $aa_replace, $auto_alias);
+			$auto_alias = str_replace($aa_search, $aa_replace, $web_config['website_autoalias']);
 			unset($client);
 			unset($aa_search);
 			unset($aa_replace);
@@ -1793,7 +1792,7 @@ class apache2_plugin {
 
 		//if proxy protocol is enabled we need to add a new port to lsiten to
 		if($web_config['vhost_proxy_protocol_enabled'] == 'y' && $data['new']['proxy_protocol'] == 'y'){
-			if((int)$web_config['vhost_proxy_protocol_http_port'] > 0) {
+			if(isset($web_config['vhost_proxy_protocol_http_port']) && (int)$web_config['vhost_proxy_protocol_http_port'] > 0) {
 				$tmp_vhost_arr['port']           = (int)$web_config['vhost_proxy_protocol_http_port'];
 				$tmp_vhost_arr['use_proxy_protocol'] = $data['new']['proxy_protocol'];
 				$vhosts[]                        = $tmp_vhost_arr;
@@ -1942,7 +1941,7 @@ class apache2_plugin {
 			unset($ht_file);
 
 			if(!is_file($data['new']['document_root'].'/web/stats/.htpasswd_stats') || $data['new']['stats_password'] != $data['old']['stats_password']) {
-				if(trim($data['new']['stats_password']) != '') {
+				if(isset($data['new']['stats_password']) && trim($data['new']['stats_password']) != '') {
 					$htp_file = 'admin:'.trim($data['new']['stats_password']);
 					$app->system->web_folder_protection($data['new']['document_root'], false);
 					$app->system->file_put_contents($data['new']['document_root'].'/web/stats/.htpasswd_stats', $htp_file);
diff --git a/server/plugins-available/bind_plugin.inc.php b/server/plugins-available/bind_plugin.inc.php
index 9499f1eaba..2a5ccca269 100644
--- a/server/plugins-available/bind_plugin.inc.php
+++ b/server/plugins-available/bind_plugin.inc.php
@@ -393,7 +393,7 @@ class bind_plugin {
 		//}
 
 		//* Delete old domain file, if domain name has been changed
-		if($data['old']['origin'] != $data['new']['origin']) {
+		if(!empty($data['old']['origin']) && $data['old']['origin'] != $data['new']['origin']) {
 			$filename = $dns_config['bind_zonefiles_dir'].'/' . $dns_config['bind_zonefiles_masterprefix'] . str_replace("/", "_", substr($data['old']['origin'], 0, -1));
 
 			if(is_file($filename)) unlink($filename);
diff --git a/server/plugins-available/mail_plugin.inc.php b/server/plugins-available/mail_plugin.inc.php
index 53836a1392..08439fe798 100644
--- a/server/plugins-available/mail_plugin.inc.php
+++ b/server/plugins-available/mail_plugin.inc.php
@@ -429,7 +429,7 @@ class mail_plugin {
 		$maildir_path_deleted = false;
 		$old_maildir_path = $data['old']['maildir'];
 		if($old_maildir_path != $mail_config['homedir_path'] && strlen($old_maildir_path) > strlen($mail_config['homedir_path']) && !stristr($old_maildir_path, '//') && !stristr($old_maildir_path, '..') && !stristr($old_maildir_path, '*') && strlen($old_maildir_path) >= 10) {
-			if ($mail_config['mailbox_soft_delete'] == 'y') {
+			if ($mail_config['mailbox_soft_delete'] == 'y' && is_dir($old_maildir_path)) {
 				// Move it, adding a date based suffix. A cronjob should purge or archive.
 				$thrash_maildir_path = $old_maildir_path . '-deleted-' . date("YmdHis");
 				$app->system->exec_safe('mv ? ?', $old_maildir_path, $thrash_maildir_path);
@@ -484,7 +484,7 @@ class mail_plugin {
 		//* Delete maildomain path
 		$old_maildomain_path = $mail_config['homedir_path'].'/'.$data['old']['domain'];
 		if($old_maildomain_path != $mail_config['homedir_path'] && !stristr($old_maildomain_path, '//') && !stristr($old_maildomain_path, '..') && !stristr($old_maildomain_path, '*') && !stristr($old_maildomain_path, '&') && strlen($old_maildomain_path) >= 10  && !empty($data['old']['domain'])) {
-			if ($mail_config['mailbox_soft_delete'] == 'y') {
+			if ($mail_config['mailbox_soft_delete'] == 'y' && is_dir($old_maildomain_path)) {
 				// Move it, adding a date based suffix. A cronjob should purge or archive.
 				$thrash_maildomain_path = $old_maildomain_path . '-deleted-' . date("YmdHis");
 				$app->system->exec_safe('mv ? ?', $old_maildomain_path, $thrash_maildomain_path);
diff --git a/server/plugins-available/mail_plugin_dkim.inc.php b/server/plugins-available/mail_plugin_dkim.inc.php
index b937f82275..4114148f11 100755
--- a/server/plugins-available/mail_plugin_dkim.inc.php
+++ b/server/plugins-available/mail_plugin_dkim.inc.php
@@ -155,7 +155,7 @@ class mail_plugin_dkim {
 					$app->system->mkdirpath($mail_config['dkim_path'], 0750, $amavis_user, $amavis_group);
 				} else {
 					$app->system->mkdirpath($mail_config['dkim_path'], 0755);
-					$app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARNING);
+					$app->log('No user amavis or vscan found - using root for '.$mail_config['dkim_path'], LOGLEVEL_WARN);
 				}
             } else {
 				if (!$app->system->checkpath($mail_config['dkim_path'])) {
diff --git a/server/plugins-available/mongo_clientdb_plugin.inc.php~ b/server/plugins-available/mongo_clientdb_plugin.inc.php~
index 6258583874..41c7679818 100644
--- a/server/plugins-available/mongo_clientdb_plugin.inc.php~
+++ b/server/plugins-available/mongo_clientdb_plugin.inc.php~
@@ -516,7 +516,7 @@ class mongo_clientdb_plugin {
 
 			if ((bool) $db_user) {
 				if ($user == 'root') {
-					$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+					$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 				} else {
 					if (!$this->addUser($db, array(
 								'username' => $user,
@@ -526,14 +526,14 @@ class mongo_clientdb_plugin {
 									"dbAdmin"
 								)
 							))) {
-						$app->log("Error while adding user: ".$user." to DB: ".$db, LOGLEVEL_WARNING);
+						$app->log("Error while adding user: ".$user." to DB: ".$db, LOGLEVEL_WARN);
 					}
 				}
 			}
 
 			if ($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
 				if ($user == 'root') {
-					$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+					$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 				} else {
 					if (!$this->addUser($db, array(
 								'username' => $ro_user,
@@ -542,7 +542,7 @@ class mongo_clientdb_plugin {
 									"read"
 								)
 							))) {
-						$app->log("Error while adding read-only user: ".$user." to DB: ".$db, LOGLEVEL_WARNING);
+						$app->log("Error while adding read-only user: ".$user." to DB: ".$db, LOGLEVEL_WARN);
 					}
 				}
 			}
@@ -607,7 +607,7 @@ class mongo_clientdb_plugin {
 
 					if ((bool) $old_db_user) {
 						if ($old_db_user['database_user'] == 'root') {
-							$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+							$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 						} else {
 							$this->dropUser($old_db_user['database_user'], $db);
 						}
@@ -620,7 +620,7 @@ class mongo_clientdb_plugin {
 
 					if ((bool) $old_db_user) {
 						if ($old_db_user['database_user'] == 'root') {
-							$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+							$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 						} else {
 							$this->dropUser($old_db_user['database_user'], $db);
 						}
@@ -631,7 +631,7 @@ class mongo_clientdb_plugin {
 				if ($data['new']['database_user_id'] != $data['old']['database_user_id']) {
 					if ((bool) $db_user) {
 						if ($user == 'root') {
-							$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+							$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 						} else {
 							$this->addUser($db, array(
 									'username' => $user,
@@ -649,7 +649,7 @@ class mongo_clientdb_plugin {
 				if ($data['new']['database_ro_user_id'] != $data['old']['database_ro_user_iduser_id']) {
 					if ((bool) $db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
 						if ($ro_user == 'root') {
-							$app->log("User root not allowed for client databases", LOGLEVEL_WARNING);
+							$app->log("User root not allowed for client databases", LOGLEVEL_WARN);
 						} else {
 							$this->addUser($db, array(
 									'username' => $ro_user,
@@ -671,7 +671,7 @@ class mongo_clientdb_plugin {
 					if ($this->renameDB($oldName, $newName)) {
 						$app->log("Renamed MongoDB database: ".$old_name." -> ".$new_name, LOGLEVEL_DEBUG);
 					} else {
-						$app->log("Renaming MongoDB database failed: ".$old_name." -> ".$new_name, LOGLEVEL_WARNING);
+						$app->log("Renaming MongoDB database failed: ".$old_name." -> ".$new_name, LOGLEVEL_WARN);
 					}
 				}
 				*/
@@ -710,7 +710,7 @@ class mongo_clientdb_plugin {
 			if ($this->dropDB($db_to_drop)) {
 				$app->log("Dropping MongoDB database: ".$db_to_drop, LOGLEVEL_DEBUG);
 			} else {
-				$app->log("Error while dropping MongoDB database: ".$db_to_drop, LOGLEVEL_WARNING);
+				$app->log("Error while dropping MongoDB database: ".$db_to_drop, LOGLEVEL_WARN);
 			}
 
 			$this->disconnect();
@@ -770,13 +770,13 @@ class mongo_clientdb_plugin {
 										))) {
 									$app->log("Created user: ".$data['new']['database_user']." in DB: ".$db, LOGLEVEL_DEBUG);
 								} else {
-									$app->log("Couldn't create user: ".$data['new']['database_user']." in DB: ".$db, LOGLEVEL_WARNING);
+									$app->log("Couldn't create user: ".$data['new']['database_user']." in DB: ".$db, LOGLEVEL_WARN);
 								}
 							} else {
-								$app->log("Couldn't drop user: ".$data['old']['database_user']." in DB: ".$db, LOGLEVEL_WARNING);
+								$app->log("Couldn't drop user: ".$data['old']['database_user']." in DB: ".$db, LOGLEVEL_WARN);
 							}
 						} else {
-							$app->log("User: ".$data['new']['database_user']." already exists in DB: ".$db, LOGLEVEL_WARNING);
+							$app->log("User: ".$data['new']['database_user']." already exists in DB: ".$db, LOGLEVEL_WARN);
 						}
 					}
 				}
@@ -794,7 +794,7 @@ class mongo_clientdb_plugin {
 						if ($this->changePassword($db, $data['new']['database_user'], md5($data['new']['database_password_mongo']))) {
 							$app->log("Changed user's: ".$data['new']['database_user']." password in DB: ".$db, LOGLEVEL_DEBUG);
 						} else {
-							$app->log("Couldn't change user's: ".$data['new']['database_user']." password in DB: ".$db, LOGLEVEL_WARNING);
+							$app->log("Couldn't change user's: ".$data['new']['database_user']." password in DB: ".$db, LOGLEVEL_WARN);
 						}
 					}
 				}
@@ -825,7 +825,7 @@ class mongo_clientdb_plugin {
 		if ($this->dropUser($data['old']['database_user']) === true) {
 			$app->log("Dropped MongoDB user: ".$data['old']['database_user'], LOGLEVEL_DEBUG);
 		} else {
-			$app->log("Error while dropping MongoDB user: ".$data['old']['database_user'], LOGLEVEL_WARNING);
+			$app->log("Error while dropping MongoDB user: ".$data['old']['database_user'], LOGLEVEL_WARN);
 		}
 
 		$this->disconnect();
diff --git a/server/plugins-available/mysql_clientdb_plugin.inc.php b/server/plugins-available/mysql_clientdb_plugin.inc.php
index 9cf750a84d..589e60d4ef 100644
--- a/server/plugins-available/mysql_clientdb_plugin.inc.php
+++ b/server/plugins-available/mysql_clientdb_plugin.inc.php
@@ -280,7 +280,7 @@ class mysql_clientdb_plugin {
 			if ($link->query('CREATE DATABASE `'.$link->escape_string($data['new']['database_name']).'`'.$query_charset_table)) {
 				$app->log('Created MySQL database: '.$data['new']['database_name'], LOGLEVEL_DEBUG);
 			} else {
-				$app->log('Unable to create the database: '.$link->error, LOGLEVEL_WARNING);
+				$app->log('Unable to create the database: '.$link->error, LOGLEVEL_WARN);
 			}
 
 			// Create the database user if database is active
@@ -299,11 +299,11 @@ class mysql_clientdb_plugin {
 				$host_list .= 'localhost';
 
 				if($db_user) {
-					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
 				}
 				if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
-					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
 				}
 
@@ -491,17 +491,17 @@ class mysql_clientdb_plugin {
 			// Create the database user if database was disabled before
 			if($data['new']['active'] == 'y') {
 				if($db_user) {
-					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
 				}
 				if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
-					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
 				}
 			} elseif($data['new']['active'] == 'n' && $data['old']['active'] == 'y') { // revoke database user, if inactive
 				if($old_db_user) {
 					if($old_db_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						// Find out users to drop and users to revoke
 						$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $old_host_list);
@@ -512,7 +512,7 @@ class mysql_clientdb_plugin {
 				}
 				if($old_db_ro_user && $data['old']['database_user_id'] != $data['old']['database_ro_user_id']) {
 					if($old_db_ro_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						// Find out users to drop and users to revoke
 						$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $old_host_list);
@@ -530,7 +530,7 @@ class mysql_clientdb_plugin {
 				if($data['old']['database_user_id'] && $data['old']['database_user_id'] != $data['new']['database_ro_user_id']) {
 					if($old_db_user) {
 						if($old_db_user['database_user'] == 'root'){
-							$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+							$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						} else {
 							// Find out users to drop and users to revoke
 							$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $old_host_list);
@@ -540,7 +540,7 @@ class mysql_clientdb_plugin {
 					}
 				}
 				if($db_user) {
-					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
 				}
 			}
@@ -548,7 +548,7 @@ class mysql_clientdb_plugin {
 				if($data['old']['database_ro_user_id'] && $data['old']['database_ro_user_id'] != $data['new']['database_user_id']) {
 					if($old_db_ro_user) {
 						if($old_db_ro_user['database_user'] == 'root'){
-							$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+							$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						} else {
 							// Find out users to drop and users to revoke
 							$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $old_host_list);
@@ -558,7 +558,7 @@ class mysql_clientdb_plugin {
 					}
 				}
 				if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
-					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+					if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
 				}
 			}
@@ -570,19 +570,19 @@ class mysql_clientdb_plugin {
 				if($data['new']['remote_access'] == 'y') {
 					if($db_user) {
 						if($db_user['database_user'] == 'root'){
-							$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+							$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						} else {
 							$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
 						}
 					}
 					if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
-						if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', 'r');
 					}
 				} else {
 					if($old_db_user) {
 						if($old_db_user['database_user'] == 'root'){
-							$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+							$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						} else {
 							// Find out users to drop and users to revoke
 							$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $data['old']['remote_ips']);
@@ -592,7 +592,7 @@ class mysql_clientdb_plugin {
 					}
 					if($old_db_ro_user && $data['old']['database_user_id'] != $data['old']['database_ro_user_id']) {
 						if($old_db_ro_user['database_user'] == 'root'){
-							$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+							$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 						} else {
 							// Find out users to drop and users to revoke
 							$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $data['old']['remote_ips']);
@@ -606,7 +606,7 @@ class mysql_clientdb_plugin {
 				//* Change remote access list
 				if($old_db_user) {
 					if($old_db_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						// Find out users to drop and users to revoke
 						$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $data['old']['remote_ips']);
@@ -616,7 +616,7 @@ class mysql_clientdb_plugin {
 				}
 				if($db_user) {
 					if($db_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
 					}
@@ -624,7 +624,7 @@ class mysql_clientdb_plugin {
 
 				if($old_db_ro_user && $data['old']['database_user_id'] != $data['old']['database_ro_user_id']) {
 					if($old_db_ro_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						// Find out users to drop and users to revoke
 						$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $data['old']['remote_ips']);
@@ -635,7 +635,7 @@ class mysql_clientdb_plugin {
 
 				if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
 					if($db_ro_user['database_user'] == 'root'){
-						$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
+						$app->log('User root not allowed for Client databases', LOGLEVEL_WARN);
 					} else {
 						$this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', 'r');
 					}
@@ -689,7 +689,7 @@ class mysql_clientdb_plugin {
 			if($link->query('DROP DATABASE `'.$link->escape_string($data['old']['database_name'].'`'))) {
 				$app->log('Dropping MySQL database: '.$data['old']['database_name'], LOGLEVEL_DEBUG);
 			} else {
-				$app->log('Error while dropping MySQL database: '.$data['old']['database_name'].' '.$link->error, LOGLEVEL_WARNING);
+				$app->log('Error while dropping MySQL database: '.$data['old']['database_name'].' '.$link->error, LOGLEVEL_WARN);
 			}
 
 			$link->close();
diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php
index dd0ad58921..78144e7bfb 100644
--- a/server/plugins-available/nginx_plugin.inc.php
+++ b/server/plugins-available/nginx_plugin.inc.php
@@ -161,7 +161,7 @@ class nginx_plugin {
         subjectAltName         = @alt_names
 
         [alt_names]
-        DNS.1                  = .$domain";
+        DNS.1                  = $domain";
 
 			$ssl_cnf_file = $ssl_dir.'/openssl.conf';
 			$app->system->file_put_contents($ssl_cnf_file, $ssl_cnf);
@@ -2852,7 +2852,6 @@ class nginx_plugin {
 	private function php_fpm_pool_update ($data, $web_config, $pool_dir, $pool_name, $socket_dir, $web_folder = null) {
 		global $app, $conf;
 		$pool_dir = trim($pool_dir);
-		$rh_releasefiles = array('/etc/centos-release', '/etc/redhat-release');
 
 		// HHVM => PHP-FPM-Fallback
 		$default_php_fpm = true;
@@ -2923,21 +2922,14 @@ class nginx_plugin {
 		$tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] - 1);
 		$tpl->setVar('fpm_user', $data['new']['system_user']);
 
-		//Red Hat workaround for group ownership of socket files
-		foreach($rh_releasefiles as $rh_file) {
-			if(file_exists($rh_file) && (filesize($rh_file) > 0)) {
-				$tmp = file_get_contents($rh_file);
-				if(preg_match('/[678]+\.[0-9]+/m', $tmp)) {
-					$tpl->setVar('fpm_group', $data['new']['system_group']);
-					$tpl->setVar('fpm_listen_group', $data['new']['system_group']);
-				}
-				unset($tmp);
-			} elseif(!file_exists($rh_file)) {
-				//OS seems to be not Red Hat'ish
-				$tpl->setVar('fpm_group', $data['new']['system_group']);
-				$tpl->setVar('fpm_listen_group', $web_config['group']);
-			}
-			break;
+		// RH workaround here
+		if($app->system->is_redhat_os() == true) {
+			$tpl->setVar('fpm_group', $data['new']['system_group']);
+			$tpl->setVar('fpm_listen_group', $data['new']['system_group']);
+		} else {
+			//OS seems to be not Red Hat'ish
+			$tpl->setVar('fpm_group', $data['new']['system_group']);
+			$tpl->setVar('fpm_listen_group', $web_config['group']);
 		}
 
 		$tpl->setVar('fpm_listen_user', $data['new']['system_user']);
diff --git a/server/plugins-available/rspamd_plugin.inc.php b/server/plugins-available/rspamd_plugin.inc.php
index 112020deb7..53500ef069 100644
--- a/server/plugins-available/rspamd_plugin.inc.php
+++ b/server/plugins-available/rspamd_plugin.inc.php
@@ -281,7 +281,7 @@ class rspamd_plugin {
 				$app->system->mkdirpath($this->users_config_dir);
 			}
 
-			if((!$this->isValidEmail($app->functions->idn_encode($email_address))) || intval($data['new']['policy_id']) == 0) {
+			if((!$this->isValidEmail($app->functions->idn_encode($email_address))) || intval($data['new']['policy_id']) == 0 && $type == 'spamfilter_user') {
 				if(is_file($settings_file)) {
 					unlink($settings_file);
 				}
@@ -508,7 +508,7 @@ class rspamd_plugin {
 		$mail_config = $app->getconf->get_server_config($conf['server_id'], 'mail');
 
 		$local_addrs = array();
-		$ips = $app->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['mysql']['database'].'.server_ip', $conf['server_id']);
+		$ips = $app->db->queryAllRecords('SELECT `ip_address`, `ip_type` FROM ?? WHERE `server_id` = ?', $conf['db_database'].'.server_ip', $conf['server_id']);
 		if(is_array($ips) && !empty($ips)){
 			foreach($ips as $ip){
 				$local_addrs[] = array(
diff --git a/server/plugins-available/shelluser_base_plugin.inc.php b/server/plugins-available/shelluser_base_plugin.inc.php
index 2fc4f0dfc7..7116092d0e 100755
--- a/server/plugins-available/shelluser_base_plugin.inc.php
+++ b/server/plugins-available/shelluser_base_plugin.inc.php
@@ -147,9 +147,8 @@ class shelluser_base_plugin {
 					}
 				}
 
-				$app->system->chown($data['new']['dir'],$data['new']['username'],false);
-				$app->system->chgrp($data['new']['dir'],$data['new']['pgroup'],false);
-
+				$app->system->chown($data['new']['dir'], 'root', false);
+				$app->system->chgrp($data['new']['dir'], 'root', false);
 
 				// call the ssh-rsa update function
 				$app->uses("getconf");
@@ -477,7 +476,11 @@ class shelluser_base_plugin {
 			// Remove duplicate keys
 			$existing_keys = @file($sshkeys, FILE_IGNORE_NEW_LINES);
 			$new_keys = explode("\n", $userkey);
-			$final_keys_arr = @array_merge($existing_keys, $new_keys);
+			if(is_array($existing_keys)) {
+				$final_keys_arr = @array_merge($existing_keys, $new_keys);
+			} else {
+				$final_keys_arr = $new_keys;
+			}
 			$new_final_keys_arr = array();
 			if(is_array($final_keys_arr) && !empty($final_keys_arr)){
 				foreach($final_keys_arr as $key => $val){
diff --git a/server/plugins-available/shelluser_jailkit_plugin.inc.php b/server/plugins-available/shelluser_jailkit_plugin.inc.php
index dbc3d8041b..1b2ff74db9 100755
--- a/server/plugins-available/shelluser_jailkit_plugin.inc.php
+++ b/server/plugins-available/shelluser_jailkit_plugin.inc.php
@@ -318,6 +318,8 @@ class shelluser_jailkit_plugin {
 				$options = array('hardlink');
 			} elseif ($this->jailkit_config['jailkit_hardlinks'] == 'no') {
 				$options = array();
+			} else {
+				$options = array();
 			}
 		} else {
 			$options = array('allow_hardlink');
@@ -527,7 +529,11 @@ class shelluser_jailkit_plugin {
 			// Remove duplicate keys
 			$existing_keys = @file($sshkeys, FILE_IGNORE_NEW_LINES);
 			$new_keys = explode("\n", $userkey);
-			$final_keys_arr = @array_merge($existing_keys, $new_keys);
+			if(is_array($existing_keys)) {
+				$final_keys_arr = @array_merge($existing_keys, $new_keys);
+			} else {
+				$final_keys_arr = $new_keys;
+			}
 			$new_final_keys_arr = array();
 			if(is_array($final_keys_arr) && !empty($final_keys_arr)){
 				foreach($final_keys_arr as $key => $val){
diff --git a/server/server.sh b/server/server.sh
index 9c92a868b0..3956d05b8b 100755
--- a/server/server.sh
+++ b/server/server.sh
@@ -15,14 +15,14 @@ if [ -f /usr/local/ispconfig/server/lib/php.ini ]; then
 fi
 
 cd /usr/local/ispconfig/server
-/usr/bin/php -q \
+$(which php) -q \
     -d disable_classes= \
     -d disable_functions= \
     -d open_basedir= \
     /usr/local/ispconfig/server/server.php
 
 cd /usr/local/ispconfig/security
-/usr/bin/php -q \
+$(which php) -q \
     -d disable_classes= \
     -d disable_functions= \
     -d open_basedir= \
-- 
GitLab