Merge 1.2.0 changes back to master.
diff --git a/extensions/guacamole-auth-cas/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-cas/src/main/resources/guac-manifest.json
index e121192..e34c3a6 100644
--- a/extensions/guacamole-auth-cas/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-cas/src/main/resources/guac-manifest.json
@@ -12,7 +12,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "js" : [
diff --git a/extensions/guacamole-auth-cas/src/main/resources/translations/ru.json b/extensions/guacamole-auth-cas/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..9604b6f
--- /dev/null
+++ b/extensions/guacamole-auth-cas/src/main/resources/translations/ru.json
@@ -0,0 +1,11 @@
+{
+
+    "DATA_SOURCE_CAS" : {
+        "NAME" : "Бэкенд CAS SSO"
+    },
+
+    "LOGIN" : {
+        "INFO_CAS_REDIRECT_PENDING"  : "Пожалуйста, подождите. Переадресую на страницу аутентификации CAS..."
+    }
+
+}
diff --git a/extensions/guacamole-auth-duo/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-duo/src/main/resources/guac-manifest.json
index 0fcc786..bb0f2de 100644
--- a/extensions/guacamole-auth-duo/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-duo/src/main/resources/guac-manifest.json
@@ -12,7 +12,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "js" : [
diff --git a/extensions/guacamole-auth-duo/src/main/resources/translations/ru.json b/extensions/guacamole-auth-duo/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..5e7deb5
--- /dev/null
+++ b/extensions/guacamole-auth-duo/src/main/resources/translations/ru.json
@@ -0,0 +1,12 @@
+{
+
+    "DATA_SOURCE_DUO" : {
+        "NAME" : "Бэкенд Duo TFA"
+    },
+
+    "LOGIN" : {
+        "INFO_DUO_VALIDATION_CODE_INCORRECT" : "Неверный код валидации Duo.",
+        "INFO_DUO_AUTH_REQUIRED"             : "Пожалуйста, аутентифицируйтесь в Duo для продолжения."
+    }
+
+}
diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/ru.json b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/ru.json
index 4811b49..12e9c6f 100644
--- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/ru.json
+++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/resources/translations/ru.json
@@ -3,10 +3,109 @@
     "LOGIN" : {
 
         "ERROR_PASSWORD_BLANK"    : "@:APP.ERROR_PASSWORD_BLANK",
+        "ERROR_PASSWORD_SAME"     : "Новый пароль должен отличаться от текущего просроченного.",
         "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH",
+        "ERROR_NOT_VALID"         : "Этот аккаунт на данный момент недействителен.",
+        "ERROR_NOT_ACCESSIBLE"    : "Доступ к этому аккаунту в данный момент запрещен. Попробуйте позже.",
+
+        "INFO_PASSWORD_EXPIRED" : "Ваш пароль просрочен и требует смены. Пожалуйста, введите новый пароль для продолжения.",
 
         "FIELD_HEADER_NEW_PASSWORD"         : "Новый пароль",
-        "FIELD_HEADER_CONFIRM_NEW_PASSWORD" : "Подтверждение пароля"
+        "FIELD_HEADER_CONFIRM_NEW_PASSWORD" : "Подтвердите новый пароль"
+
+    },
+
+    "CONNECTION_ATTRIBUTES" : {
+
+        "FIELD_HEADER_MAX_CONNECTIONS"          : "Максимальное число соединений:",
+        "FIELD_HEADER_MAX_CONNECTIONS_PER_USER" : "Максимальное число соединений на пользователя:",
+
+        "FIELD_HEADER_FAILOVER_ONLY"            : "Использовать только для отказоустойчивости:",
+        "FIELD_HEADER_WEIGHT"                   : "«Вес» соединения:",
+
+        "FIELD_HEADER_GUACD_HOSTNAME"   : "Сервер:",
+        "FIELD_HEADER_GUACD_ENCRYPTION" : "Шифрование:",
+        "FIELD_HEADER_GUACD_PORT"       : "Порт:",
+
+        "FIELD_OPTION_GUACD_ENCRYPTION_NONE" : "Нет (не зашифровано)",
+        "FIELD_OPTION_GUACD_ENCRYPTION_SSL"  : "SSL/TLS",
+
+        "SECTION_HEADER_CONCURRENCY"    : "Совместное использование",
+        "SECTION_HEADER_LOAD_BALANCING" : "Балансировка нагрузки",
+        "SECTION_HEADER_GUACD"          : "Параметры сервера Guacamole (guacd)"
+
+    },
+
+    "CONNECTION_GROUP_ATTRIBUTES" : {
+
+        "FIELD_HEADER_ENABLE_SESSION_AFFINITY"  : "Включить закрепление сеансов:",
+        "FIELD_HEADER_MAX_CONNECTIONS"          : "Максимальное число соединений:",
+        "FIELD_HEADER_MAX_CONNECTIONS_PER_USER" : "Максимальное число соединений на пользователя:",
+
+        "SECTION_HEADER_CONCURRENCY" : "Совместное использование (для балансирующей группы)"
+
+    },
+
+    "DATA_SOURCE_MYSQL" : {
+        "NAME" : "MySQL"
+    },
+
+    "DATA_SOURCE_MYSQL_SHARED" : {
+        "NAME" : "Расшаренные подключения (MySQL)"
+    },
+
+    "DATA_SOURCE_POSTGRESQL" : {
+        "NAME" : "PostgreSQL"
+    },
+
+    "DATA_SOURCE_POSTGRESQL_SHARED" : {
+        "NAME" : "Расшаренные подключения (PostgreSQL)"
+    },
+
+    "DATA_SOURCE_SQLSERVER" : {
+        "NAME" : "SQL Server"
+    },
+
+    "DATA_SOURCE_SQLSERVER_SHARED" : {
+        "NAME" : "Расшаренные подключения (SQL Server)"
+    },
+
+    "HOME" : {
+        "INFO_SHARED_BY" : "Расшарил пользователь {USERNAME}"
+    },
+
+    "PASSWORD_POLICY" : {
+
+        "ERROR_CONTAINS_USERNAME"      : "Пароль не может содержать имя пользователя.",
+        "ERROR_REQUIRES_DIGIT"         : "Пароль должен содержать хотя бы одну цифру.",
+        "ERROR_REQUIRES_MULTIPLE_CASE" : "Пароль должен содержать заглавные и строчные символы.",
+        "ERROR_REQUIRES_NON_ALNUM"     : "Пароль должен содержать хотя бы один символ.",
+        "ERROR_REUSED"                 : "Этот парольуже был использован ранее. Пожалуйста, не используйте {HISTORY_SIZE} {HISTORY_SIZE, plural, one{предыдущий пароль} few{предыдущих пароля} many{предыдущих паролей} other{предыдущих пароля}}.",
+        "ERROR_TOO_SHORT"              : "Длина пароля должна быть не менее {LENGTH} {LENGTH, plural, one{символа} many{символов} other{символов}}.",
+        "ERROR_TOO_YOUNG"              : "Пароль для этого аккаунта недавно уже был сброшен. Пожалуйста, подождите как минимум {WAIT} {WAIT, plural, one{день} few{дня} many{дней} other{дня}} перед тем, как сменить пароль снова."
+
+    },
+
+    "USER_ATTRIBUTES" : {
+
+        "FIELD_HEADER_DISABLED"            : "Аккаунт отключен:",
+        "FIELD_HEADER_EXPIRED"             : "Пароль просрочен:",
+        "FIELD_HEADER_ACCESS_WINDOW_END"   : "Запретить доступ после:",
+        "FIELD_HEADER_ACCESS_WINDOW_START" : "Разрешить доступ после:",
+        "FIELD_HEADER_TIMEZONE"            : "Временная зона пользователя:",
+        "FIELD_HEADER_VALID_FROM"          : "Включить аккаунт после:",
+        "FIELD_HEADER_VALID_UNTIL"         : "Отключить аккаунт после:",
+
+        "SECTION_HEADER_RESTRICTIONS" : "Ограничения",
+        "SECTION_HEADER_PROFILE"      : "Профиль"
+
+    },
+
+    "USER_GROUP_ATTRIBUTES" : {
+
+        "FIELD_HEADER_DISABLED" : "Группа отключена:",
+
+        "SECTION_HEADER_RESTRICTIONS" : "Ограничения"
 
     }
 
diff --git a/extensions/guacamole-auth-openid/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-openid/src/main/resources/guac-manifest.json
index 1bb63de..c29633a 100644
--- a/extensions/guacamole-auth-openid/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-openid/src/main/resources/guac-manifest.json
@@ -12,7 +12,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "js" : [
diff --git a/extensions/guacamole-auth-openid/src/main/resources/translations/ru.json b/extensions/guacamole-auth-openid/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..4b5c061
--- /dev/null
+++ b/extensions/guacamole-auth-openid/src/main/resources/translations/ru.json
@@ -0,0 +1,11 @@
+{
+
+    "DATA_SOURCE_OPENID" : {
+        "NAME" : "Бэкенд OpenID SSO"
+    },
+
+    "LOGIN" : {
+        "INFO_REDIRECT_PENDING" : "Пожалуйста, подождите. Переадресую на страницу аутентификации..."
+    }
+
+}
diff --git a/extensions/guacamole-auth-quickconnect/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-quickconnect/src/main/resources/guac-manifest.json
index caf4cf9..d2f4597 100644
--- a/extensions/guacamole-auth-quickconnect/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-quickconnect/src/main/resources/guac-manifest.json
@@ -23,7 +23,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "resources" : {
diff --git a/extensions/guacamole-auth-quickconnect/src/main/resources/translations/ru.json b/extensions/guacamole-auth-quickconnect/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..91aa843
--- /dev/null
+++ b/extensions/guacamole-auth-quickconnect/src/main/resources/translations/ru.json
@@ -0,0 +1,18 @@
+{
+
+    "DATA_SOURCE_QUICKCONNECT" : {
+        "NAME" : "QuickConnect"
+    },
+
+    "QUICKCONNECT" : {
+        "ACTION_CONNECT" : "Подключиться",
+
+        "ERROR_INVALID_URI"      : "Указан неверный адрес URI",
+        "ERROR_NO_HOST"          : "Не указан сервер",
+        "ERROR_NO_PROTOCOL"      : "Не указан протокол",
+        "ERROR_NOT_ABSOLUTE_URI" : "Адрес URI не является абсолютным",
+
+        "FIELD_PLACEHOLDER_URI" : "Введите адрес URI для подключения"
+    }
+
+}
diff --git a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/AuthenticationProviderService.java b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/AuthenticationProviderService.java
index fee4357..e5e4f57 100644
--- a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/AuthenticationProviderService.java
+++ b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/AuthenticationProviderService.java
@@ -159,7 +159,9 @@
 
             try {
                 radPack = radiusService.authenticate(credentials.getUsername(),
-                                                credentials.getPassword(), null);
+                                                credentials.getPassword(),
+                                                credentials.getRemoteAddress(),
+                                                null);
             }
             catch (GuacamoleException e) {
                 logger.error("Cannot configure RADIUS server: {}", e.getMessage());
@@ -180,6 +182,7 @@
                 byte[] stateBytes = BaseEncoding.base16().decode(stateString);
                 radPack = radiusService.sendChallengeResponse(credentials.getUsername(),
                                                               challengeResponse,
+                                                              credentials.getRemoteAddress(),
                                                               stateBytes);
             }
             catch (IllegalArgumentException e) {
diff --git a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusConnectionService.java b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusConnectionService.java
index 0f5dcf6..edab380 100644
--- a/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusConnectionService.java
+++ b/extensions/guacamole-auth-radius/src/main/java/org/apache/guacamole/auth/radius/RadiusConnectionService.java
@@ -33,6 +33,9 @@
 import org.slf4j.LoggerFactory;
 import net.jradius.client.RadiusClient;
 import net.jradius.dictionary.Attr_CleartextPassword;
+import net.jradius.dictionary.Attr_ClientIPAddress;
+import net.jradius.dictionary.Attr_NASIPAddress;
+import net.jradius.dictionary.Attr_NASPortType;
 import net.jradius.dictionary.Attr_ReplyMessage;
 import net.jradius.dictionary.Attr_State;
 import net.jradius.dictionary.Attr_UserName;
@@ -164,6 +167,10 @@
      * @param secret
      *     The secret, usually a password or challenge response, to send
      *     to authenticate to the RADIUS server.
+     * 
+     * @param clientAddress
+     *     The IP address of the client, if known, which will be set in as
+     *     the RADIUS client address.
      *
      * @param state
      *     The previous state of the RADIUS connection
@@ -174,7 +181,8 @@
      * @throws GuacamoleException
      *     If an error occurs while talking to the server.
      */
-    public RadiusPacket authenticate(String username, String secret, byte[] state)
+    public RadiusPacket authenticate(String username, String secret, 
+                String clientAddress, byte[] state)
             throws GuacamoleException {
 
         // If a username wasn't passed, we quit
@@ -200,6 +208,9 @@
         try {
             AttributeList radAttrs = new AttributeList();
             radAttrs.add(new Attr_UserName(username));
+            radAttrs.add(new Attr_ClientIPAddress(InetAddress.getByName(clientAddress)));
+            radAttrs.add(new Attr_NASIPAddress(InetAddress.getLocalHost()));
+            radAttrs.add(new Attr_NASPortType(Attr_NASPortType.Virtual));
             if (state != null && state.length > 0)
                 radAttrs.add(new Attr_State(state));
             radAttrs.add(new Attr_UserPassword(secret));
@@ -243,6 +254,11 @@
             logger.debug("Unknown RADIUS algorithm.", e);
             return null;
         }
+        catch (UnknownHostException e) {
+            logger.error("Could not resolve address: {}", e.getMessage());
+            logger.debug("Exception resolving host address.", e);
+            return null;
+        }
         finally {
             radiusClient.close();
         }
@@ -258,6 +274,10 @@
      * @param response
      *     The response phrase to send to the RADIUS server in response to the
      *     challenge previously provided.
+     * 
+     * @param clientAddress
+     *     The IP address of the client, if known, which will be set in as
+     *     the RADIUS client address.
      *
      * @param state
      *     The state data provided by the RADIUS server in order to continue
@@ -271,7 +291,7 @@
      *     If an error is encountered trying to talk to the RADIUS server.
      */
     public RadiusPacket sendChallengeResponse(String username, String response,
-            byte[] state) throws GuacamoleException {
+            String clientAddress, byte[] state) throws GuacamoleException {
 
         if (username == null || username.isEmpty()) {
             logger.error("Challenge/response to RADIUS requires a username.");
@@ -288,7 +308,7 @@
             return null;
         }
 
-        return authenticate(username,response,state);
+        return authenticate(username, response, clientAddress, state);
 
     }
 
diff --git a/extensions/guacamole-auth-radius/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-radius/src/main/resources/guac-manifest.json
index 2efaaf8..8eb6e00 100644
--- a/extensions/guacamole-auth-radius/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-radius/src/main/resources/guac-manifest.json
@@ -12,7 +12,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "js" : [
diff --git a/extensions/guacamole-auth-radius/src/main/resources/translations/ru.json b/extensions/guacamole-auth-radius/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..8c922d8
--- /dev/null
+++ b/extensions/guacamole-auth-radius/src/main/resources/translations/ru.json
@@ -0,0 +1,7 @@
+{
+
+    "DATA_SOURCE_RADIUS" : {
+        "NAME" : "Бэкенд RADIUS"
+    }
+
+}
diff --git a/extensions/guacamole-auth-totp/src/main/resources/guac-manifest.json b/extensions/guacamole-auth-totp/src/main/resources/guac-manifest.json
index 6d28731..166e971 100644
--- a/extensions/guacamole-auth-totp/src/main/resources/guac-manifest.json
+++ b/extensions/guacamole-auth-totp/src/main/resources/guac-manifest.json
@@ -12,7 +12,8 @@
     "translations" : [
         "translations/de.json",
         "translations/en.json",
-        "translations/ja.json"
+        "translations/ja.json",
+        "translations/ru.json"
     ],
 
     "js" : [
diff --git a/extensions/guacamole-auth-totp/src/main/resources/translations/ru.json b/extensions/guacamole-auth-totp/src/main/resources/translations/ru.json
new file mode 100644
index 0000000..3a5d973
--- /dev/null
+++ b/extensions/guacamole-auth-totp/src/main/resources/translations/ru.json
@@ -0,0 +1,30 @@
+{
+
+    "DATA_SOURCE_TOTP" : {
+        "NAME" : "Бэкенд TOTP TFA"
+    },
+
+    "TOTP" : {
+
+        "ACTION_HIDE_DETAILS" : "Спрятать",
+        "ACTION_SHOW_DETAILS" : "Показать",
+
+        "FIELD_HEADER_ALGORITHM"  : "Алгоритм:",
+        "FIELD_HEADER_DIGITS"     : "Количество цифр:",
+        "FIELD_HEADER_INTERVAL"   : "Время действия:",
+        "FIELD_HEADER_SECRET_KEY" : "Секретный ключ:",
+
+        "FIELD_PLACEHOLDER_CODE" : "Код доступа",
+
+        "INFO_CODE_REQUIRED"       : "Пожалуйста, введите код доступа для подтверждения подлинности.",
+        "INFO_ENROLL_REQUIRED"     : "Для вашего аккаунта была включена многофакторная аутентификация.",
+        "INFO_VERIFICATION_FAILED" : "Проверка кода не пройдена. Пожалуйста, попробуйте снова.",
+
+        "HELP_ENROLL_BARCODE" : "Для завершения создания учетной записи отсканируйте штрихкод вашей программой двухфакторной аутентификации на смартфоне или другом устройстве.",
+        "HELP_ENROLL_VERIFY"  : "После сканирования штрихкода введите {DIGITS}-циферный код доступа, полученный на вашем устройстве, для проверки и завершения процедуры.",
+
+        "SECTION_HEADER_DETAILS" : "Дополнительно:"
+
+    }
+
+}
diff --git a/guacamole-docker/bin/build-guacamole.sh b/guacamole-docker/bin/build-guacamole.sh
index 88087e5..1b0b0ec 100755
--- a/guacamole-docker/bin/build-guacamole.sh
+++ b/guacamole-docker/bin/build-guacamole.sh
@@ -127,6 +127,7 @@
     cp extensions/guacamole-auth-radius/target/guacamole-auth-radius*.jar "$DESTINATION/radius"
 fi
 
+#
 # Copy OPENID auth extension and schema modifications
 #
 
@@ -136,6 +137,15 @@
 fi
 
 #
+# Copy TOTP auth extension if it was built
+#
+
+if [ -f extensions/guacamole-auth-totp/target/guacamole-auth-totp*.jar ]; then
+    mkdir -p "$DESTINATION/totp"
+    cp extensions/guacamole-auth-totp/target/guacamole-auth-totp*.jar "$DESTINATION/totp"
+fi
+
+#
 # Copy Duo auth extension if it was built
 #
 
diff --git a/guacamole-docker/bin/start.sh b/guacamole-docker/bin/start.sh
index f5367b4..2763096 100755
--- a/guacamole-docker/bin/start.sh
+++ b/guacamole-docker/bin/start.sh
@@ -369,6 +369,7 @@
     set_optional_property "ldap-encryption-method"  "$LDAP_ENCRYPTION_METHOD"
     set_optional_property "ldap-max-search-results" "$LDAP_MAX_SEARCH_RESULTS"
     set_optional_property "ldap-search-bind-dn"     "$LDAP_SEARCH_BIND_DN"
+    set_optional_property "ldap-user-attributes"    "$LDAP_USER_ATTRIBUTES"
 
     set_optional_property           \
         "ldap-search-bind-password" \
@@ -537,6 +538,21 @@
 }
 
 ##
+## Adds properties to guacamole.properties which configure the TOTP two-factor
+## authentication mechanism.
+##
+associate_totp() {
+    # Update config file
+    set_optional_property "totp-issuer"    "$TOTP_ISSUER"
+    set_optional_property "totp-digits"    "$TOTP_DIGITS"
+    set_optional_property "totp-period"    "$TOTP_PERIOD"
+    set_optional_property "totp-mode"      "$TOTP_MODE"
+
+    # Add required .jar files to GUACAMOLE_EXT
+    ln -s /opt/guacamole/totp/guacamole-auth-*.jar   "$GUACAMOLE_EXT"
+}
+
+##
 ## Adds properties to guacamole.properties which configure the Duo two-factor
 ## authentication service. Checks to see if all variables are defined and makes sure
 ## DUO_APPLICATION_KEY is >= 40 characters.
@@ -707,6 +723,11 @@
     exit 1;
 fi
 
+# Use TOTP if specified.
+if [ "$TOTP_ENABLED" = "true" ]; then
+    associate_totp
+fi
+
 # Use Duo if specified.
 if [ -n "$DUO_API_HOSTNAME" ]; then
     associate_duo
diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/token/TokenFilter.java b/guacamole-ext/src/main/java/org/apache/guacamole/token/TokenFilter.java
index c412d18..943e7a1 100644
--- a/guacamole-ext/src/main/java/org/apache/guacamole/token/TokenFilter.java
+++ b/guacamole-ext/src/main/java/org/apache/guacamole/token/TokenFilter.java
@@ -39,7 +39,7 @@
      * escape character preceding the token, the name of the token, and the
      * entire token itself.
      */
-    private final Pattern tokenPattern = Pattern.compile("(.*?)(^|.)(\\$\\{([A-Za-z0-9_]*)\\})");
+    private final Pattern tokenPattern = Pattern.compile("(.*?)(^|.)(\\$\\{([A-Za-z0-9_]*)(\\:(.*))?\\})");
 
     /**
      * The index of the capturing group within tokenPattern which matches
@@ -67,6 +67,12 @@
     private static final int TOKEN_NAME_GROUP = 4;
     
     /**
+     * The index of the capturing group within tokenPattern which matches the
+     * string of the actual modifier for the token.
+     */
+    private static final int TOKEN_MODIFIER = 6;
+    
+    /**
      * The values of all known tokens.
      */
     private final Map<String, String> tokenValues;
@@ -182,6 +188,7 @@
             // Pull possible leading text and first char before possible token
             String literal = tokenMatcher.group(LEADING_TEXT_GROUP);
             String escape = tokenMatcher.group(ESCAPE_CHAR_GROUP);
+            String modifier = tokenMatcher.group(TOKEN_MODIFIER);
 
             // Append leading non-token text
             output.append(literal);
@@ -208,9 +215,33 @@
                     output.append(notToken);
                 }
 
-                // Otherwise, substitute value
-                else
-                    output.append(tokenValue);
+                // Otherwise, check for modifiers and substitute value appropriately
+                else {
+                    
+                    // If a modifier is present, try to use it.
+                    if (modifier != null && !modifier.isEmpty()) {
+                        switch (modifier) {
+                            // Switch token to upper-case
+                            case "upper":
+                                output.append(tokenValue.toUpperCase());
+                                break;
+                                
+                            // Switch token to lower case
+                            case "lower":
+                                output.append(tokenValue.toLowerCase());
+                                break;
+                                
+                            // Just append the token value
+                            default:
+                                output.append(tokenValue);
+                        }
+                    }
+                    
+                    // No modifier present, so just append token value.
+                    else
+                        output.append(tokenValue);
+                    
+                }
 
             }
 
diff --git a/guacamole-ext/src/test/java/org/apache/guacamole/token/TokenFilterTest.java b/guacamole-ext/src/test/java/org/apache/guacamole/token/TokenFilterTest.java
index 810651b..7061e4f 100644
--- a/guacamole-ext/src/test/java/org/apache/guacamole/token/TokenFilterTest.java
+++ b/guacamole-ext/src/test/java/org/apache/guacamole/token/TokenFilterTest.java
@@ -39,6 +39,7 @@
         TokenFilter tokenFilter = new TokenFilter();
         tokenFilter.setToken("TOKEN_A", "value-of-a");
         tokenFilter.setToken("TOKEN_B", "value-of-b");
+        tokenFilter.setToken("TOKEN_C", "Value-of-C");
 
         // Test basic substitution and escaping
         assertEquals(
@@ -48,8 +49,23 @@
         
         // Unknown tokens must be interpreted as literals
         assertEquals(
-            "${NOPE}hellovalue-of-aworld${TOKEN_C}",
-            tokenFilter.filter("${NOPE}hello${TOKEN_A}world${TOKEN_C}")
+            "${NOPE}hellovalue-of-aworld${TOKEN_D}",
+            tokenFilter.filter("${NOPE}hello${TOKEN_A}world${TOKEN_D}")
+        );
+        
+        assertEquals(
+            "Value-of-C",
+            tokenFilter.filter("${TOKEN_C}")
+        );
+        
+        assertEquals(
+            "value-of-c",
+            tokenFilter.filter("${TOKEN_C:lower}")
+        );
+        
+        assertEquals(
+            "VALUE-OF-C",
+            tokenFilter.filter("${TOKEN_C:upper}")
         );
         
     }
diff --git a/guacamole/src/main/webapp/translations/ru.json b/guacamole/src/main/webapp/translations/ru.json
index 63df958..7243e94 100644
--- a/guacamole/src/main/webapp/translations/ru.json
+++ b/guacamole/src/main/webapp/translations/ru.json
@@ -6,9 +6,11 @@
 
         "ACTION_ACKNOWLEDGE"        : "ОК",
         "ACTION_CANCEL"             : "Отмена",
-        "ACTION_CLONE"              : "Скопировать",
+        "ACTION_CLONE"              : "Клонировать",
+        "ACTION_CONTINUE"           : "Продолжить",
         "ACTION_DELETE"             : "Удалить",
         "ACTION_DELETE_SESSIONS"    : "Завершить сессии",
+        "ACTION_DOWNLOAD"           : "Скачать",
         "ACTION_LOGIN"              : "Вход",
         "ACTION_LOGOUT"             : "Выход",
         "ACTION_MANAGE_CONNECTIONS" : "Подключения",
@@ -16,13 +18,18 @@
         "ACTION_MANAGE_SETTINGS"    : "Опции",
         "ACTION_MANAGE_SESSIONS"    : "Активные сессии",
         "ACTION_MANAGE_USERS"       : "Пользователи",
+        "ACTION_MANAGE_USER_GROUPS" : "Группы",
         "ACTION_NAVIGATE_BACK"      : "Назад",
         "ACTION_NAVIGATE_HOME"      : "Главная",
         "ACTION_SAVE"               : "Сохранить",
+        "ACTION_SEARCH"             : "Искать",
+        "ACTION_SHARE"              : "Расшарить",
         "ACTION_UPDATE_PASSWORD"    : "Обновить пароль",
+        "ACTION_VIEW_HISTORY"       : "История",
 
         "DIALOG_HEADER_ERROR" : "Ошибка",
 
+        "ERROR_PAGE_UNAVAILABLE"  : "Произошла ошибка, действие не может быть завершено. Если проблема будет повторяться, обратитесь к системному администратору или проверьте системные журналы.",
         "ERROR_PASSWORD_BLANK"    : "Пароль не может быть пустым.",
         "ERROR_PASSWORD_MISMATCH" : "Указанные пароли не совпадают.",
 
@@ -31,11 +38,12 @@
 
         "FIELD_PLACEHOLDER_FILTER" : "Фильтр",
 
-        "FORMAT_DATE_TIME_PRECISE" : "yyyy-MM-dd HH:mm:ss",
+        "FORMAT_DATE_TIME_PRECISE" : "dd.MM.yyyy HH:mm:ss",
 
-        "INFO_ACTIVE_USER_COUNT" : "Подключено пользователей {USERS}.",
+        "INFO_ACTIVE_USER_COUNT" : "Сейчас в системе {USERS} {USERS, plural, one{пользователь} few{пользователя} many{пользователей} other{пользователя}}.",
 
-        "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{секунда} other{сек}}} minute{{VALUE, plural, one{минута} other{мин}}} hour{{VALUE, plural, one{час} other{ч}}} day{{VALUE, plural, one{день} other{дн}}} other{}}"
+        "TEXT_ANONYMOUS_USER"   : "Аноним",
+        "TEXT_HISTORY_DURATION" : "{VALUE} {UNIT, select, second{{VALUE, plural, one{секунда} few{секуны} many{секунд} other{секуны}}} minute{{VALUE, plural, one{минута} few{минуты} many{минут} other{минуты}}} hour{{VALUE, plural, one{час} few{часа} many{часов} other{часа}}} day{{VALUE, plural, one{день} few{дня} many{дней} other{дня}}} other{}}"
 
     },
 
@@ -49,6 +57,7 @@
         "ACTION_NAVIGATE_HOME"             : "@:APP.ACTION_NAVIGATE_HOME",
         "ACTION_RECONNECT"                 : "Переподключиться",
         "ACTION_SAVE_FILE"                 : "@:APP.ACTION_SAVE",
+        "ACTION_SHARE"                     : "@:APP.ACTION_SHARE",
         "ACTION_UPLOAD_FILES"              : "Загрузка файлов",
 
         "DIALOG_HEADER_CONNECTING"       : "Подключение",
@@ -56,81 +65,108 @@
         "DIALOG_HEADER_DISCONNECTED"     : "Отключено",
 
         "ERROR_CLIENT_201"     : "Соединение было закрыто, так как сервер перегружен. Пожалуйста, попробуйте повторить попытку позднее.",
-        "ERROR_CLIENT_202"     : "Сервер закрыл соединение, так как удаленные рабочий стол не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору..",
-        "ERROR_CLIENT_203"     : "На сервере удаленные рабочих столов произошла ошибка, и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
-        "ERROR_CLIENT_205"     : "Соединение было закрыто, так как оно конфликтовало с другим соединением. Пожалуйста, попробуйте повторить попытку позднее.",
+        "ERROR_CLIENT_202"     : "Сервер Guacamole закрыл соединение, так как удаленный рабочий стол долго не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_CLIENT_203"     : "На сервере удаленных рабочих столов произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_CLIENT_207"     : "Сервер удаленных рабочих столов недосягаем. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.",
+        "ERROR_CLIENT_208"     : "Сервер удаленных рабочих столов недоступен. Если проблема сохранится, свяжитесь с системным администратором или проверьте логи.",
+        "ERROR_CLIENT_209"     : "Сервер удаленных рабочих столов закрыл соединение, так как оно конфликтует с другим соединением. Пожалуйста, попробуйте повторить попытку позднее.",
+        "ERROR_CLIENT_20A"     : "Сервер удаленных рабочих столов закрыл соединение, так как оно долгое время было неактивно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.",
+        "ERROR_CLIENT_20B"     : "Сервер удаленных рабочих столов закрыл соединение принудительно. Если это нежелательное поведение, обратитесь к системному администратору или проверьте настройки.",
         "ERROR_CLIENT_301"     : "Не удалось выполнить вход. Пожалуйста, переподключитесь и повторите попытку.",
-        "ERROR_CLIENT_303"     : "У вас нет разрешения для доступа к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.",
+        "ERROR_CLIENT_303"     : "Сервер удаленных рабочих столов запретил доступ к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.",
         "ERROR_CLIENT_308"     : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
         "ERROR_CLIENT_31D"     : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте ненужные соединения и повторите попытку.",
-        "ERROR_CLIENT_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_CLIENT_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
 
-        "ERROR_TUNNEL_201"     : "Сервер запретил соединение, так как открыто слишком много соединений. Пожалуйста, попробуйте повторить попытку позднее.",
-        "ERROR_TUNNEL_202"     : "Сервер закрыл соединение, так как удаленные рабочий стол не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору",
-        "ERROR_TUNNEL_203"     : "На сервере удаленные рабочих столов произошла ошибка, и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_TUNNEL_201"     : "Сервер Guacamole отклонил соединение, так как уже открыто слишком много соединений. Пожалуйста, попробуйте повторить попытку позднее.",
+        "ERROR_TUNNEL_202"     : "Соединение было закрыто, так как сервер долго не отвечает. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
+        "ERROR_TUNNEL_203"     : "На сервере произошла ошибка и соединение было закрыто. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
         "ERROR_TUNNEL_204"     : "Соединение не существует. Проверьте, пожалуйста, название соединения.",
-        "ERROR_TUNNEL_205"     : "Соединение в настоящий момент занято, и доступ к этому соединению не разрешен. ожалуйста, попробуйте повторить попытку позднее.",
+        "ERROR_TUNNEL_205"     : "Соединение в настоящий момент занято и доступ к этому соединению не разрешен. Пожалуйста, попробуйте повторить попытку позднее.",
+        "ERROR_TUNNEL_207"     : "Сервер Guacamole на данный момент недоступен. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
+        "ERROR_TUNNEL_208"     : "Сервер Guacamole не принимает соединения. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
         "ERROR_TUNNEL_301"     : "У вас нет разрешения для доступа к этому соединению, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку.",
         "ERROR_TUNNEL_303"     : "У вас нет разрешения для доступа к этому соединению. Для получения доступа, пожалуйста, обратитесь к администратору.",
         "ERROR_TUNNEL_308"     : "Сервер Guacamole закрыл соединение, так как браузер не ответил в течение отведенного времени. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
-        "ERROR_TUNNEL_31D"     : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте ненужные соединения и повторите попытку.",
-        "ERROR_TUNNEL_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_TUNNEL_31D"     : "Сервер Guacamole отклонил доступ к соединению, так как вы превысили максимальное количество одновременных подключений. Пожалуйста, закройте несколько установленных соединений и повторите попытку.",
+        "ERROR_TUNNEL_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
 
-        "ERROR_UPLOAD_100"     : "Передача файлов либо не поддерживается, либо не включена. Пожалуйста, обратитесь к администратору.",
-        "ERROR_UPLOAD_201"     : "Слишком много задач передачи файлов активно. Подождите завершения текущих передач и повторите попытку снова.",
+        "ERROR_UPLOAD_100"     : "Передача файлов либо не поддерживается, либо выключена. Пожалуйста, обратитесь к администратору или проверьте логи.",
+        "ERROR_UPLOAD_201"     : "Слишком много задач передачи файлов уже активно. Подождите завершения текущих задач и повторите попытку снова.",
         "ERROR_UPLOAD_202"     : "Файл не может быть передан, так как удаленный рабочий стол не отвечает. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
         "ERROR_UPLOAD_203"     : "Произошла ошибка при передаче файла. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
-        "ERROR_UPLOAD_204"     : "Назначение для передаваемого файла не существует. Пожалуйста, проверьте назначение и повторите попытку снова.",
-        "ERROR_UPLOAD_205"     : "Назнечение для передаваемого файла заблокировано. Пожалуйста, дождитесь завершения других передач и повторите попытку снова.",
+        "ERROR_UPLOAD_204"     : "Место назначения для передаваемого файла не существует. Пожалуйста, проверьте правильность указания места назначения и повторите попытку снова.",
+        "ERROR_UPLOAD_205"     : "Место назначения для передаваемого файла заблокировано. Пожалуйста, дождитесь завершения других передач и повторите попытку снова.",
         "ERROR_UPLOAD_301"     : "У вас нет разрешения на загрузку файла, так как вы не выполнили вход. Пожалуйста, выполните вход и повторите попытку передачи файла.",
-        "ERROR_UPLOAD_303"     : "У вас нет разрешения на загрузку файла. Для получения разрешения проверьте нестройки или обратитесь к администратору.",
+        "ERROR_UPLOAD_303"     : "У вас нет разрешения на загрузку файла. Для получения разрешения проверьте настройки или обратитесь к администратору.",
         "ERROR_UPLOAD_308"     : "Передача файла зависла. Такое бывает в случае возникновения проблем с доступом в сеть, связанных со слабым беспроводным сигналом или низкими скоростями передачи данных. Пожалуйста, проверьте ваше сетевое подключение и повторите попытку снова.",
-        "ERROR_UPLOAD_31D"     : "Слишком много файлов передается в настоящий момент. Подождите завершения текущих передач и повторите попытку снова.",
-        "ERROR_UPLOAD_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
+        "ERROR_UPLOAD_31D"     : "Слишком много файлов уже передается в настоящий момент. Подождите завершения текущих передач и повторите попытку снова.",
+        "ERROR_UPLOAD_DEFAULT" : "Соединение было прервано из-за внутренней ошибки сервера Guacamole. Пожалуйста, попробуйте повторить попытку позднее или обратитесь к администратору.",
 
-        "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
-
-        "HELP_CLIPBOARD"           : "Текст, скопированный или вырезанный внутри сеанса, появится в этом поле. Изменение текста также отразиться на буфере обмена удаленного рабочего стола.",
-        "HELP_INPUT_METHOD_NONE"   : "Не выбран метод ввода. Ввод разрешен для физической клавиатуры.",
+        "HELP_CLIPBOARD"           : "Текст, скопированный или вырезанный внутри сеанса, появится в этом поле. Изменение текста в этом поле также отобразится в буфере обмена удаленного рабочего стола.",
+        "HELP_INPUT_METHOD_NONE"   : "Никакой метод ввода не используется. Ввод разрешен только для физической клавиатуры.",
         "HELP_INPUT_METHOD_OSK"    : "Отображать и принимать ввод со встроенной экранной клавиатуры. Экранная клавиатура позволяет вводить любые комбинации, недоступные в других режимах (например Alt-Ctrl-Del).",
-        "HELP_INPUT_METHOD_TEXT"   : "Разрешить ввод текста и эмулировать события клавиатуры в зависимости от нажатых клавиш. Это необходимо для устройств без физической клавиатуры (смартфоны, планшеты).",
+        "HELP_INPUT_METHOD_TEXT"   : "Разрешить ввод текста, эмулировать события клавиатуры в зависимости от нажатых клавиш. Это необходимо для устройств без физической клавиатуры (смартфоны, планшеты).",
         "HELP_MOUSE_MODE"          : "Определяет поведение курсора мыши при прикосновении.",
         "HELP_MOUSE_MODE_ABSOLUTE" : "Прикоснитесь, чтобы сделать клик. Клик происходит в точке прикосновения к экрану.",
         "HELP_MOUSE_MODE_RELATIVE" : "Потяните, чтобы перемещать курсор. Прикоснитесь, чтобы сделать клик. Клик происходит в точке нахождения курсора.",
+        "HELP_SHARE_LINK"          : "Это соединение расшарено и доступно всем по следующ{LINKS, plural, one{ей ссылке} other{им ссылкам}}:",
 
+        "INFO_CONNECTION_SHARED" : "Это соединение теперь расшарено.",
         "INFO_NO_FILE_TRANSFERS" : "Нет загрузок.",
 
         "NAME_INPUT_METHOD_NONE"   : "Нет",
         "NAME_INPUT_METHOD_OSK"    : "Экранная клавиатура",
         "NAME_INPUT_METHOD_TEXT"   : "Ввод текста",
-        "NAME_KEY_CTRL"            : "Ctrl",
-        "NAME_KEY_ALT"             : "Alt",
-        "NAME_KEY_ESC"             : "Esc",
-        "NAME_KEY_TAB"             : "Tab",
-        "NAME_MOUSE_MODE_ABSOLUTE" : "Touchscreen",
-        "NAME_MOUSE_MODE_RELATIVE" : "Touchpad",
+        "NAME_MOUSE_MODE_ABSOLUTE" : "Тачскрин",
+        "NAME_MOUSE_MODE_RELATIVE" : "Тачпад",
 
         "SECTION_HEADER_CLIPBOARD"      : "Буфер обмена",
+        "SECTION_HEADER_DEVICES"        : "Устройства",
         "SECTION_HEADER_DISPLAY"        : "Экран",
         "SECTION_HEADER_FILE_TRANSFERS" : "Загрузки файлов",
         "SECTION_HEADER_INPUT_METHOD"   : "Метод ввода",
         "SECTION_HEADER_MOUSE_MODE"     : "Режим эмуляции мыши",
 
-        "TEXT_ZOOM_AUTO_FIT"              : "Автоматически умещать в окне",
+        "TEXT_ZOOM_AUTO_FIT"              : "Автоматически умещать в браузере",
         "TEXT_CLIENT_STATUS_IDLE"         : "Бездействие.",
         "TEXT_CLIENT_STATUS_CONNECTING"   : "Подключение к Guacamole...",
-        "TEXT_CLIENT_STATUS_DISCONNECTED" : "Вы были успешно подключены.",
+        "TEXT_CLIENT_STATUS_DISCONNECTED" : "Вы были отключены.",
+        "TEXT_CLIENT_STATUS_UNSTABLE"     : "Сетевое соединение с сервером Guacamole нестабильно.",
         "TEXT_CLIENT_STATUS_WAITING"      : "Подключено к Guacamole. Ожидание ответа...",
-        "TEXT_RECONNECT_COUNTDOWN"        : "Переподключение через {REMAINING} сек...",
+        "TEXT_RECONNECT_COUNTDOWN"        : "Переподключение через {REMAINING} {REMAINING, plural, one{секунду} few{секунды} many{секунд} other{секунды}}...",
         "TEXT_FILE_TRANSFER_PROGRESS"     : "{PROGRESS} {UNIT, select, b{B} kb{KB} mb{MB} gb{GB} other{}}",
 
         "URL_OSK_LAYOUT" : "layouts/ru-ru-qwerty.json"
 
     },
 
+    "COLOR_SCHEME" : {
+
+        "ACTION_CANCEL"       : "@:APP.ACTION_CANCEL",
+        "ACTION_HIDE_DETAILS" : "Спрятать",
+        "ACTION_SAVE"         : "@:APP.ACTION_SAVE",
+        "ACTION_SHOW_DETAILS" : "Показать",
+
+        "FIELD_HEADER_BACKGROUND" : "Цвет фона",
+        "FIELD_HEADER_FOREGROUND" : "Основной цвет",
+
+        "FIELD_OPTION_CUSTOM" : "Выбрать...",
+
+        "SECTION_HEADER_DETAILS" : "Подробно:"
+
+    },
+
+    "DATA_SOURCE_DEFAULT" : {
+        "NAME" : "По умолчанию (XML)"
+    },
+
     "FORM" : {
 
-        "HELP_SHOW_PASSWORD" : "Нажмите, чтобы посмотреть пароль",
+        "FIELD_PLACEHOLDER_DATE" : "DD.MM.YYYY",
+        "FIELD_PLACEHOLDER_TIME" : "HH:MM:SS",
+
+        "HELP_SHOW_PASSWORD" : "Нажмите, чтобы показать пароль",
         "HELP_HIDE_PASSWORD" : "Нажмите, чтобы спрятать пароль"
 
     },
@@ -141,18 +177,25 @@
 
         "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
 
-        "INFO_NO_RECENT_CONNECTIONS" : "Нет недавних подключения.",
+        "INFO_NO_RECENT_CONNECTIONS" : "Нет недавних подключений.",
 
-        "PASSWORD_CHANGED" : "Пароль был успешно изменен.",
+        "PASSWORD_CHANGED" : "Пароль был изменен.",
 
         "SECTION_HEADER_ALL_CONNECTIONS"    : "Все подключения",
         "SECTION_HEADER_RECENT_CONNECTIONS" : "Недавние подключения"
 
     },
 
+    "LIST" : {
+
+        "TEXT_ANONYMOUS_USER" : "@:APP.TEXT_ANONYMOUS_USER"
+
+    },
+
     "LOGIN": {
 
         "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_CONTINUE"    : "@:APP.ACTION_CONTINUE",
         "ACTION_LOGIN"       : "@:APP.ACTION_LOGIN",
 
         "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
@@ -185,13 +228,14 @@
         "INFO_CONNECTION_ACTIVE_NOW"       : "Активно",
         "INFO_CONNECTION_NOT_USED"         : "Это подключение еще не использовалось.",
 
-        "SECTION_HEADER_EDIT_CONNECTION" : "Редактировать подключение",
+        "SECTION_HEADER_EDIT_CONNECTION" : "Редактирование подключения",
         "SECTION_HEADER_HISTORY"         : "История использования",
         "SECTION_HEADER_PARAMETERS"      : "Настройки",
 
-        "TABLE_HEADER_HISTORY_USERNAME" : "Имя пользователя",
-        "TABLE_HEADER_HISTORY_START"    : "Время начала",
-        "TABLE_HEADER_HISTORY_DURATION" : "Продолжительность",
+        "TABLE_HEADER_HISTORY_USERNAME"   : "Имя пользователя",
+        "TABLE_HEADER_HISTORY_START"      : "Время начала",
+        "TABLE_HEADER_HISTORY_DURATION"   : "Продолжительность",
+        "TABLE_HEADER_HISTORY_REMOTEHOST" : "Удаленный узел",
 
         "TEXT_CONFIRM_DELETE"   : "Подключения не могут быть восстановлены после удаления. Вы уверены, что хотите удалить подключение?",
         "TEXT_HISTORY_DURATION" : "@:APP.TEXT_HISTORY_DURATION"
@@ -202,6 +246,7 @@
 
         "ACTION_ACKNOWLEDGE"   : "@:APP.ACTION_ACKNOWLEDGE",
         "ACTION_CANCEL"        : "@:APP.ACTION_CANCEL",
+        "ACTION_CLONE"         : "@:APP.ACTION_CLONE",
         "ACTION_DELETE"        : "@:APP.ACTION_DELETE",
         "ACTION_SAVE"          : "@:APP.ACTION_SAVE",
 
@@ -212,10 +257,10 @@
         "FIELD_HEADER_NAME"     : "Название:",
         "FIELD_HEADER_TYPE"     : "Тип:",
 
-        "NAME_TYPE_BALANCING"       : "Балансировщик",
-        "NAME_TYPE_ORGANIZATIONAL"  : "Корпоративный",
+        "NAME_TYPE_BALANCING"       : "Балансирующая",
+        "NAME_TYPE_ORGANIZATIONAL"  : "Структурная",
 
-        "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Редактировать группу подключений",
+        "SECTION_HEADER_EDIT_CONNECTION_GROUP" : "Редактирование группы подключений",
 
         "TEXT_CONFIRM_DELETE" : "Группы подключений не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу подключений?"
 
@@ -229,11 +274,16 @@
         "ACTION_DELETE"      : "@:APP.ACTION_DELETE",
         "ACTION_SAVE"        : "@:APP.ACTION_SAVE",
 
-        "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
+        "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить профиль расшаривания",
+        "DIALOG_HEADER_ERROR"          : "@:APP.DIALOG_HEADER_ERROR",
 
-        "FIELD_HEADER_NAME" : "Название:",
+        "FIELD_HEADER_NAME"               : "Название:",
+        "FIELD_HEADER_PRIMARY_CONNECTION" : "Изначальное подключение:",
 
-        "SECTION_HEADER_PARAMETERS" : "Настройки"
+        "SECTION_HEADER_EDIT_SHARING_PROFILE" : "Редактирование профиля расшаривания",
+        "SECTION_HEADER_PARAMETERS"           : "Настройки",
+
+        "TEXT_CONFIRM_DELETE" : "Профили расшаривания не могут быть восстановлены после удаления. Вы уверены, что хотите удалить профиль расшаривания?"
 
     },
 
@@ -251,195 +301,359 @@
         "ERROR_PASSWORD_MISMATCH" : "@:APP.ERROR_PASSWORD_MISMATCH",
 
         "FIELD_HEADER_ADMINISTER_SYSTEM"             : "Администрирование системы:",
-        "FIELD_HEADER_CHANGE_OWN_PASSWORD"           : "Изменить собственный пароль:",
-        "FIELD_HEADER_CREATE_NEW_USERS"              : "Создать нового пользователя:",
-        "FIELD_HEADER_CREATE_NEW_CONNECTIONS"        : "Создать новое подключение:",
-        "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS"  : "Создать новую группу подключений:",
+        "FIELD_HEADER_CHANGE_OWN_PASSWORD"           : "Изменение собственного пароля:",
+        "FIELD_HEADER_CREATE_NEW_USERS"              : "Создание нового пользователя:",
+        "FIELD_HEADER_CREATE_NEW_USER_GROUPS"        : "Создание новой группы пользователей:",
+        "FIELD_HEADER_CREATE_NEW_CONNECTIONS"        : "Создание нового подключения:",
+        "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS"  : "Создание новой группы подключений:",
+        "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES"   : "Создание нового профиля расшаривания:",
         "FIELD_HEADER_PASSWORD"                      : "@:APP.FIELD_HEADER_PASSWORD",
         "FIELD_HEADER_PASSWORD_AGAIN"                : "@:APP.FIELD_HEADER_PASSWORD_AGAIN",
         "FIELD_HEADER_USERNAME"                      : "Имя пользователя:",
 
         "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
 
-        "SECTION_HEADER_CONNECTIONS" : "Подключения",
-        "SECTION_HEADER_EDIT_USER"   : "Редактировать пользователя",
-        "SECTION_HEADER_PERMISSIONS" : "Разрешения",
+        "HELP_NO_USER_GROUPS" : "Этот пользователь еще не сопоставлен ни с одной группой. Раскройте эту секцию для добавления групп.",
+
+        "INFO_READ_ONLY"                : "Извините, этот пользователь не может быть изменен.",
+        "INFO_NO_USER_GROUPS_AVAILABLE" : "Нет доступных групп.",
+
+        "SECTION_HEADER_ALL_CONNECTIONS"     : "Все подключения",
+        "SECTION_HEADER_CONNECTIONS"         : "Подключения",
+        "SECTION_HEADER_CURRENT_CONNECTIONS" : "Текущие подключения",
+        "SECTION_HEADER_EDIT_USER"           : "Редактирование пользователя",
+        "SECTION_HEADER_PERMISSIONS"         : "Разрешения",
+        "SECTION_HEADER_USER_GROUPS"         : "Группы",
 
         "TEXT_CONFIRM_DELETE" : "Пользователи не могут быть восстановлены после удаления. Вы уверены, что хотите удалить пользователя?"
 
     },
 
+    "MANAGE_USER_GROUP" : {
+
+        "ACTION_ACKNOWLEDGE"   : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_CANCEL"        : "@:APP.ACTION_CANCEL",
+        "ACTION_CLONE"         : "@:APP.ACTION_CLONE",
+        "ACTION_DELETE"        : "@:APP.ACTION_DELETE",
+        "ACTION_SAVE"          : "@:APP.ACTION_SAVE",
+
+        "DIALOG_HEADER_CONFIRM_DELETE" : "Удалить группу",
+        "DIALOG_HEADER_ERROR"          : "@:APP.DIALOG_HEADER_ERROR",
+
+        "FIELD_HEADER_ADMINISTER_SYSTEM"             : "@:MANAGE_USER.FIELD_HEADER_ADMINISTER_SYSTEM",
+        "FIELD_HEADER_CHANGE_OWN_PASSWORD"           : "@:MANAGE_USER.FIELD_HEADER_CHANGE_OWN_PASSWORD",
+        "FIELD_HEADER_CREATE_NEW_USERS"              : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USERS",
+        "FIELD_HEADER_CREATE_NEW_USER_GROUPS"        : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_USER_GROUPS",
+        "FIELD_HEADER_CREATE_NEW_CONNECTIONS"        : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTIONS",
+        "FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS"  : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_CONNECTION_GROUPS",
+        "FIELD_HEADER_CREATE_NEW_SHARING_PROFILES"   : "@:MANAGE_USER.FIELD_HEADER_CREATE_NEW_SHARING_PROFILES",
+        "FIELD_HEADER_USER_GROUP_NAME"               : "Название:",
+
+        "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
+
+        "HELP_NO_USER_GROUPS"        : "Эта группа еще не сопоставлена ни с одной группой. Раскройте эту секцию для добавления групп.",
+        "HELP_NO_MEMBER_USER_GROUPS" : "Эта группа еще не содержит ни одной группы. Раскройте эту секцию для добавления групп.",
+        "HELP_NO_MEMBER_USERS"       : "Эта группа еще не содержит ни одного пользователя. Раскройте эту секцию для добавления пользователей.",
+
+        "INFO_READ_ONLY"                : "Извините, эта группа не может быть изменена.",
+        "INFO_NO_USER_GROUPS_AVAILABLE" : "@:MANAGE_USER.INFO_NO_USER_GROUPS_AVAILABLE",
+        "INFO_NO_USERS_AVAILABLE"       : "Нет доступных пользователей.",
+
+        "SECTION_HEADER_ALL_CONNECTIONS"     : "@:MANAGE_USER.SECTION_HEADER_ALL_CONNECTIONS",
+        "SECTION_HEADER_CONNECTIONS"         : "@:MANAGE_USER.SECTION_HEADER_CONNECTIONS",
+        "SECTION_HEADER_CURRENT_CONNECTIONS" : "@:MANAGE_USER.SECTION_HEADER_CURRENT_CONNECTIONS",
+        "SECTION_HEADER_EDIT_USER_GROUP"     : "Редактирование группы",
+        "SECTION_HEADER_MEMBER_USERS"        : "Пользователи в группе",
+        "SECTION_HEADER_MEMBER_USER_GROUPS"  : "Дочерние группы",
+        "SECTION_HEADER_PERMISSIONS"         : "@:MANAGE_USER.SECTION_HEADER_PERMISSIONS",
+        "SECTION_HEADER_USER_GROUPS"         : "Родительские группы",
+
+        "TEXT_CONFIRM_DELETE" : "Группы не могут быть восстановлены после удаления. Вы уверены, что хотите удалить группу?"
+
+    },
+
+    "PROTOCOL_KUBERNETES" : {
+
+        "FIELD_HEADER_BACKSPACE"                : "Клавиша Backspace посылает:",
+        "FIELD_HEADER_CA_CERT"                  : "Сертификат центра сертификации (CA):",
+        "FIELD_HEADER_CLIENT_CERT"              : "Сертификат клиента:",
+        "FIELD_HEADER_CLIENT_KEY"               : "Ключ клиента:",
+        "FIELD_HEADER_COLOR_SCHEME"             : "Цветовая схема:",
+        "FIELD_HEADER_CONTAINER"                : "Название контейнера:",
+        "FIELD_HEADER_CREATE_RECORDING_PATH"    : "Автоматически создавать путь для записи:",
+        "FIELD_HEADER_CREATE_TYPESCRIPT_PATH"   : "Автоматически создавать путь typescript:",
+        "FIELD_HEADER_FONT_NAME"                : "Шрифт:",
+        "FIELD_HEADER_FONT_SIZE"                : "Размер шрифта:",
+        "FIELD_HEADER_HOSTNAME"                 : "Сервер:",
+        "FIELD_HEADER_IGNORE_CERT"              : "Игнорировать сертификат сервера:",
+        "FIELD_HEADER_NAMESPACE"                : "Пространство имен:",
+        "FIELD_HEADER_POD"                      : "Название пода:",
+        "FIELD_HEADER_PORT"                     : "Порт:",
+        "FIELD_HEADER_READ_ONLY"                : "Только просмотр:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE"  : "Исключить мышь:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:",
+        "FIELD_HEADER_RECORDING_INCLUDE_KEYS"   : "Включить события клавиатуры:",
+        "FIELD_HEADER_RECORDING_NAME"           : "Название записи:",
+        "FIELD_HEADER_RECORDING_PATH"           : "Путь для записи:",
+        "FIELD_HEADER_SCROLLBACK"               : "Размер буфера прокрутки:",
+        "FIELD_HEADER_TYPESCRIPT_NAME"          : "Название typescript:",
+        "FIELD_HEADER_TYPESCRIPT_PATH"          : "Путь typescript:",
+        "FIELD_HEADER_USE_SSL"                  : "Использовать SSL/TLS",
+
+        "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом",
+        "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK"  : "Серое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном",
+
+        "NAME" : "Kubernetes",
+
+        "SECTION_HEADER_AUTHENTICATION" : "Аутентификация",
+        "SECTION_HEADER_BEHAVIOR"       : "Поведение терминала",
+        "SECTION_HEADER_CONTAINER"      : "Контейнер",
+        "SECTION_HEADER_DISPLAY"        : "Экран",
+        "SECTION_HEADER_RECORDING"      : "Запись экрана",
+        "SECTION_HEADER_TYPESCRIPT"     : "Typescript (запись текстовой сессии)",
+        "SECTION_HEADER_NETWORK"        : "Сеть"
+
+    },
+
     "PROTOCOL_RDP" : {
 
-        "FIELD_HEADER_CLIENT_NAME"     : "Имя клиента:",
-        "FIELD_HEADER_COLOR_DEPTH"     : "Глубина цвета:",
-        "FIELD_HEADER_CONSOLE_AUDIO"   : "Поддержка звука:",
-        "FIELD_HEADER_CONSOLE"         : "Консоль администратора:",
-        "FIELD_HEADER_DISABLE_AUDIO"   : "Отключить звук:",
-        "FIELD_HEADER_DISABLE_AUTH"    : "Отключить аутентификацию:",
-        "FIELD_HEADER_DOMAIN"          : "Домен:",
-        "FIELD_HEADER_DPI"             : "Разрешение экрана (DPI):",
-        "FIELD_HEADER_DRIVE_PATH"      : "Путь до диска:",
-        "FIELD_HEADER_ENABLE_DRIVE"    : "Включить диск:",
-        "FIELD_HEADER_ENABLE_PRINTING" : "Включить печать:",
-        "FIELD_HEADER_ENABLE_SFTP"      : "Включить SFTP:",
-        "FIELD_HEADER_GATEWAY_DOMAIN"   : "Домен:",
-        "FIELD_HEADER_GATEWAY_HOSTNAME" : "Название сервера:",
-        "FIELD_HEADER_GATEWAY_PASSWORD" : "Пароль:",
-        "FIELD_HEADER_GATEWAY_PORT"     : "Порт:",
-        "FIELD_HEADER_GATEWAY_USERNAME" : "Имя пользователя:",
-        "FIELD_HEADER_HEIGHT"          : "Высота:",
-        "FIELD_HEADER_HOSTNAME"        : "Название сервера:",
-        "FIELD_HEADER_IGNORE_CERT"     : "Игнорировать сертификат сервера:",
-        "FIELD_HEADER_INITIAL_PROGRAM" : "Запуск программ при подключении:",
-        "FIELD_HEADER_PASSWORD"        : "Пароль:",
-        "FIELD_HEADER_PORT"            : "Порт:",
-        "FIELD_HEADER_READ_ONLY"       : "Только просмотр:",
-        "FIELD_HEADER_REMOTE_APP_ARGS" : "Параметры RemoteApp:",
-        "FIELD_HEADER_REMOTE_APP_DIR"  : "Рабочий каталог RemoteApp:",
-        "FIELD_HEADER_REMOTE_APP"      : "Программы RemoteApp:",
-        "FIELD_HEADER_SECURITY"        : "Режим безопасности:",
-        "FIELD_HEADER_SERVER_LAYOUT"   : "Раскладка клавиатуры:",
-        "FIELD_HEADER_SFTP_HOSTNAME"    : "Название сервера:",
-        "FIELD_HEADER_SFTP_PASSPHRASE"  : "Секретная фраза:",
-        "FIELD_HEADER_SFTP_PASSWORD"    : "Пароль:",
-        "FIELD_HEADER_SFTP_PORT"        : "Порт:",
-        "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:",
-        "FIELD_HEADER_SFTP_USERNAME"    : "Имя пользователя:",
-        "FIELD_HEADER_STATIC_CHANNELS" : "Статичное название канала:",
-        "FIELD_HEADER_USERNAME"        : "Имя пользователя:",
-        "FIELD_HEADER_WIDTH"           : "Ширина:",
+        "FIELD_HEADER_CLIENT_NAME"                : "Имя клиента:",
+        "FIELD_HEADER_COLOR_DEPTH"                : "Глубина цвета:",
+        "FIELD_HEADER_CONSOLE"                    : "Консоль администратора:",
+        "FIELD_HEADER_CONSOLE_AUDIO"              : "Поддержка звука в консоли:",
+        "FIELD_HEADER_CREATE_DRIVE_PATH"          : "Автоматически создавать путь для диска:",
+        "FIELD_HEADER_CREATE_RECORDING_PATH"      : "Автоматически создавать путь для записи:",
+        "FIELD_HEADER_DISABLE_AUDIO"              : "Отключить звук:",
+        "FIELD_HEADER_DISABLE_AUTH"               : "Отключить аутентификацию:",
+        "FIELD_HEADER_DISABLE_COPY"               : "Отключить копирование в буфер обмена:",
+        "FIELD_HEADER_DISABLE_PASTE"              : "Отключить вставку из буфера обмена:",
+        "FIELD_HEADER_DOMAIN"                     : "Домен:",
+        "FIELD_HEADER_DPI"                        : "Разрешение экрана (DPI):",
+        "FIELD_HEADER_DRIVE_NAME"                 : "Название диска:",
+        "FIELD_HEADER_DRIVE_PATH"                 : "Путь для диска:",
+        "FIELD_HEADER_ENABLE_AUDIO_INPUT"         : "Включить звуковой вход (микрофон):",
+        "FIELD_HEADER_ENABLE_DESKTOP_COMPOSITION" : "Включить композитор рабочего стола (Aero):",
+        "FIELD_HEADER_ENABLE_DRIVE"               : "Включить диск:",
+        "FIELD_HEADER_ENABLE_FONT_SMOOTHING"      : "Включить сглаживание шрифтов (ClearType):",
+        "FIELD_HEADER_ENABLE_FULL_WINDOW_DRAG"    : "Включить отображение содержимого окна при перетаскивании:",
+        "FIELD_HEADER_ENABLE_MENU_ANIMATIONS"     : "Включить анимации меню:",
+        "FIELD_HEADER_DISABLE_BITMAP_CACHING"     : "Отключить кеширование битмапов:",
+        "FIELD_HEADER_DISABLE_OFFSCREEN_CACHING"  : "Отключить кеширование скрытых элементов:",
+        "FIELD_HEADER_DISABLE_GLYPH_CACHING"      : "Отключить кеширование глифов:",
+        "FIELD_HEADER_ENABLE_PRINTING"            : "Включить печать:",
+        "FIELD_HEADER_ENABLE_SFTP"                : "Включить SFTP:",
+        "FIELD_HEADER_ENABLE_THEMING"             : "Включить темы:",
+        "FIELD_HEADER_ENABLE_WALLPAPER"           : "Включить обои:",
+        "FIELD_HEADER_GATEWAY_DOMAIN"             : "Домен:",
+        "FIELD_HEADER_GATEWAY_HOSTNAME"           : "Сервер:",
+        "FIELD_HEADER_GATEWAY_PASSWORD"           : "Пароль:",
+        "FIELD_HEADER_GATEWAY_PORT"               : "Порт:",
+        "FIELD_HEADER_GATEWAY_USERNAME"           : "Имя пользователя:",
+        "FIELD_HEADER_HEIGHT"                     : "Высота:",
+        "FIELD_HEADER_HOSTNAME"                   : "Сервер:",
+        "FIELD_HEADER_IGNORE_CERT"                : "Игнорировать сертификат сервера:",
+        "FIELD_HEADER_INITIAL_PROGRAM"            : "Запуск программ при подключении:",
+        "FIELD_HEADER_LOAD_BALANCE_INFO"          : "Информация о балансировке нагрузки:",
+        "FIELD_HEADER_PASSWORD"                   : "Пароль:",
+        "FIELD_HEADER_PORT"                       : "Порт:",
+        "FIELD_HEADER_PRINTER_NAME"               : "Название принтера:",
+        "FIELD_HEADER_PRECONNECTION_BLOB"         : "Данные BLOB (HyperV VM ID):",
+        "FIELD_HEADER_PRECONNECTION_ID"           : "Данные RDP ID:",
+        "FIELD_HEADER_READ_ONLY"                  : "Только просмотр:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE"    : "Исключить мышь:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT"   : "Исключить графику/потоки:",
+        "FIELD_HEADER_RECORDING_INCLUDE_KEYS"     : "Включить события клавиатуры:",
+        "FIELD_HEADER_RECORDING_NAME"             : "Название записи:",
+        "FIELD_HEADER_RECORDING_PATH"             : "Путь для записи:",
+        "FIELD_HEADER_RESIZE_METHOD"              : "Метод изменения размера стола:",
+        "FIELD_HEADER_REMOTE_APP_ARGS"            : "Параметры RemoteApp:",
+        "FIELD_HEADER_REMOTE_APP_DIR"             : "Рабочий каталог RemoteApp:",
+        "FIELD_HEADER_REMOTE_APP"                 : "Программа RemoteApp:",
+        "FIELD_HEADER_SECURITY"                   : "Режим безопасности:",
+        "FIELD_HEADER_SERVER_LAYOUT"              : "Раскладка клавиатуры:",
+        "FIELD_HEADER_SFTP_DIRECTORY"             : "Директория загрузки по умолчанию:",
+        "FIELD_HEADER_SFTP_HOST_KEY"              : "Публичный ключ сервера (Base64):",
+        "FIELD_HEADER_SFTP_HOSTNAME"              : "Сервер:",
+        "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:",
+        "FIELD_HEADER_SFTP_PASSPHRASE"            : "Секретная фраза:",
+        "FIELD_HEADER_SFTP_PASSWORD"              : "Пароль:",
+        "FIELD_HEADER_SFTP_PORT"                  : "Порт:",
+        "FIELD_HEADER_SFTP_PRIVATE_KEY"           : "Приватный ключ:",
+        "FIELD_HEADER_SFTP_ROOT_DIRECTORY"        : "Директория просмотра по умолчанию:",
+        "FIELD_HEADER_SFTP_USERNAME"              : "Имя пользователя:",
+        "FIELD_HEADER_STATIC_CHANNELS"            : "Названия статических каналов:",
+        "FIELD_HEADER_TIMEZONE"                   : "Часовой пояс:",
+        "FIELD_HEADER_USERNAME"                   : "Имя пользователя:",
+        "FIELD_HEADER_WIDTH"                      : "Ширина:",
 
-        "FIELD_OPTION_COLOR_DEPTH_16"    : "Low color (16-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_24"    : "True color (24-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_32"    : "True color (32-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_8"     : "256 цветов",
-        "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "",
+        "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)",
+        "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)",
+        "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)",
+        "FIELD_OPTION_COLOR_DEPTH_8"  : "256 цветов",
 
-        "FIELD_OPTION_SECURITY_ANY"   : "Любой",
-        "FIELD_OPTION_SECURITY_EMPTY" : "",
-        "FIELD_OPTION_SECURITY_NLA"   : "NLA (Network Level Authentication)",
-        "FIELD_OPTION_SECURITY_RDP"   : "RDP шифрование",
-        "FIELD_OPTION_SECURITY_TLS"   : "TLS шифрование",
+        "FIELD_OPTION_RESIZE_METHOD_DISPLAY_UPDATE" : "Виртуальный канал \"Display Update\" (RDP 8.1+)",
+        "FIELD_OPTION_RESIZE_METHOD_RECONNECT"      : "Переподключение",
 
-        "FIELD_OPTION_SERVER_LAYOUT_DE_DE_QWERTZ" : "German (Qwertz)",
-        "FIELD_OPTION_SERVER_LAYOUT_EMPTY"        : "",
-        "FIELD_OPTION_SERVER_LAYOUT_EN_US_QWERTY" : "US English (Qwerty)",
-        "FIELD_OPTION_SERVER_LAYOUT_FAILSAFE"     : "Unicode",
-        "FIELD_OPTION_SERVER_LAYOUT_FR_FR_AZERTY" : "French (Azerty)",
-        "FIELD_OPTION_SERVER_LAYOUT_IT_IT_QWERTY" : "Italian (Qwerty)",
-        "FIELD_OPTION_SERVER_LAYOUT_SV_SE_QWERTY" : "Swedish (Qwerty)",
-        "FIELD_OPTION_SERVER_LAYOUT_RU_RU_QWERTY" : "Russian (Qwerty)",
+        "FIELD_OPTION_SECURITY_ANY" : "Любой",
+        "FIELD_OPTION_SECURITY_NLA" : "NLA (аутентификация уровня сети)",
+        "FIELD_OPTION_SECURITY_RDP" : "RDP-шифрование",
+        "FIELD_OPTION_SECURITY_TLS" : "TLS-шифрование",
 
-        "NAME" : "RDP",
-
-        "SECTION_HEADER_CLIPBOARD" : "Буфер обмена"
+        "SECTION_HEADER_AUTHENTICATION"     : "Аутентификация",
+        "SECTION_HEADER_BASIC_PARAMETERS"   : "Основные настройки",
+        "SECTION_HEADER_DEVICE_REDIRECTION" : "Перенаправление устройств",
+        "SECTION_HEADER_DISPLAY"            : "Экран",
+        "SECTION_HEADER_GATEWAY"            : "Шлюз удаленных рабочих столов",
+        "SECTION_HEADER_LOAD_BALANCING"     : "Балансировщик нагрузки",
+        "SECTION_HEADER_NETWORK"            : "Сеть",
+        "SECTION_HEADER_PERFORMANCE"        : "Производительность",
+        "SECTION_HEADER_PRECONNECTION_PDU"  : "Предварительные данные подключения (Hyper-V)",
+        "SECTION_HEADER_RECORDING"          : "Запись экрана"
 
     },
 
     "PROTOCOL_SSH" : {
 
-        "FIELD_HEADER_FONT_NAME"   : "Шрифт:",
-        "FIELD_HEADER_FONT_SIZE"   : "Размер шрифта:",
-        "FIELD_HEADER_ENABLE_SFTP" : "Включить SFTP:",
-        "FIELD_HEADER_HOSTNAME"    : "Название сервера:",
-        "FIELD_HEADER_USERNAME"    : "Имя пользователя:",
-        "FIELD_HEADER_PASSWORD"    : "Пароль:",
-        "FIELD_HEADER_PASSPHRASE"  : "Секретная фраза:",
-        "FIELD_HEADER_PORT"        : "Порт:",
-        "FIELD_HEADER_PRIVATE_KEY" : "Приватный ключ:",
-        "FIELD_HEADER_READ_ONLY"   : "Только просмотр:",
+        "FIELD_HEADER_BACKSPACE"                : "Клавиша Backspace посылает:",
+        "FIELD_HEADER_COLOR_SCHEME"             : "Цветовая схема:",
+        "FIELD_HEADER_COMMAND"                  : "Команда для выполнения:",
+        "FIELD_HEADER_CREATE_RECORDING_PATH"    : "Автоматически создавать путь для записи:",
+        "FIELD_HEADER_CREATE_TYPESCRIPT_PATH"   : "Автоматически создавать путь typescript:",
+        "FIELD_HEADER_DISABLE_COPY"             : "Отключить копирование в буфер обмена:",
+        "FIELD_HEADER_DISABLE_PASTE"            : "Отключить вставку из буфера обмена:",
+        "FIELD_HEADER_FONT_NAME"                : "Шрифт:",
+        "FIELD_HEADER_FONT_SIZE"                : "Размер шрифта:",
+        "FIELD_HEADER_ENABLE_SFTP"              : "Включить SFTP:",
+        "FIELD_HEADER_HOST_KEY"                 : "Публичный ключ сервера (Base64):",
+        "FIELD_HEADER_HOSTNAME"                 : "Сервер:",
+        "FIELD_HEADER_LOCALE"                   : "Language/Locale ($LANG):",
+        "FIELD_HEADER_USERNAME"                 : "Имя пользователя:",
+        "FIELD_HEADER_PASSWORD"                 : "Пароль:",
+        "FIELD_HEADER_PASSPHRASE"               : "Секретная фраза:",
+        "FIELD_HEADER_PORT"                     : "Порт:",
+        "FIELD_HEADER_PRIVATE_KEY"              : "Приватный ключ:",
+        "FIELD_HEADER_SCROLLBACK"               : "Размер буфера прокрутки:",
+        "FIELD_HEADER_READ_ONLY"                : "Только просмотр:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE"  : "Исключить мышь:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:",
+        "FIELD_HEADER_RECORDING_INCLUDE_KEYS"   : "Включить события клавиатуры:",
+        "FIELD_HEADER_RECORDING_NAME"           : "Название записи:",
+        "FIELD_HEADER_RECORDING_PATH"           : "Путь для записи:",
+        "FIELD_HEADER_SERVER_ALIVE_INTERVAL"    : "Интервал keepalive для сервера:",
+        "FIELD_HEADER_SFTP_ROOT_DIRECTORY"      : "Директория просмотра по умолчанию:",
+        "FIELD_HEADER_TERMINAL_TYPE"            : "Тип терминала:",
+        "FIELD_HEADER_TIMEZONE"                 : "Часовой пояс ($TZ):",
+        "FIELD_HEADER_TYPESCRIPT_NAME"          : "Название typescript:",
+        "FIELD_HEADER_TYPESCRIPT_PATH"          : "Путь typescript:",
 
-        "FIELD_OPTION_FONT_SIZE_8"     : "8",
-        "FIELD_OPTION_FONT_SIZE_9"     : "9",
-        "FIELD_OPTION_FONT_SIZE_10"    : "10",
-        "FIELD_OPTION_FONT_SIZE_11"    : "11",
-        "FIELD_OPTION_FONT_SIZE_12"    : "12",
-        "FIELD_OPTION_FONT_SIZE_14"    : "14",
-        "FIELD_OPTION_FONT_SIZE_18"    : "18",
-        "FIELD_OPTION_FONT_SIZE_24"    : "24",
-        "FIELD_OPTION_FONT_SIZE_30"    : "30",
-        "FIELD_OPTION_FONT_SIZE_36"    : "36",
-        "FIELD_OPTION_FONT_SIZE_48"    : "48",
-        "FIELD_OPTION_FONT_SIZE_60"    : "60",
-        "FIELD_OPTION_FONT_SIZE_72"    : "72",
-        "FIELD_OPTION_FONT_SIZE_96"    : "96",
-        "FIELD_OPTION_FONT_SIZE_EMPTY" : "",
+        "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом",
+        "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK"  : "Серое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном",
 
-        "NAME" : "SSH",
-
-        "SECTION_HEADER_CLIPBOARD" : "Буфер обмена"
+        "SECTION_HEADER_AUTHENTICATION" : "Аутентификация",
+        "SECTION_HEADER_BEHAVIOR"       : "Поведение терминала",
+        "SECTION_HEADER_DISPLAY"        : "Экран",
+        "SECTION_HEADER_NETWORK"        : "Сеть",
+        "SECTION_HEADER_RECORDING"      : "Запись экрана",
+        "SECTION_HEADER_SESSION"        : "Сессия / среда:",
+        "SECTION_HEADER_TYPESCRIPT"     : "Typescript (запись текстовой сессии)"
 
     },
 
     "PROTOCOL_TELNET" : {
 
-        "FIELD_HEADER_FONT_NAME"      : "Шрифт:",
-        "FIELD_HEADER_FONT_SIZE"      : "Размер шрифта:",
-        "FIELD_HEADER_HOSTNAME"       : "Название сервера:",
-        "FIELD_HEADER_USERNAME"       : "Имя пользователя:",
-        "FIELD_HEADER_PASSWORD"       : "Пароль:",
-        "FIELD_HEADER_PASSWORD_REGEX" : "Регулярное выражение для пароля:",
-        "FIELD_HEADER_PORT"           : "Порт:",
-        "FIELD_HEADER_READ_ONLY"      : "Только просмотр:",
+        "FIELD_HEADER_BACKSPACE"                : "Клавиша Backspace посылает:",
+        "FIELD_HEADER_COLOR_SCHEME"             : "Цветовая схема:",
+        "FIELD_HEADER_CREATE_RECORDING_PATH"    : "Автоматически создавать путь для записи:",
+        "FIELD_HEADER_CREATE_TYPESCRIPT_PATH"   : "Автоматически создавать путь typescript:",
+        "FIELD_HEADER_DISABLE_COPY"             : "Отключить копирование в буфер обмена:",
+        "FIELD_HEADER_DISABLE_PASTE"            : "Отключить вставку из буфера обмена:",
+        "FIELD_HEADER_FONT_NAME"                : "Шрифт:",
+        "FIELD_HEADER_FONT_SIZE"                : "Размер шрифта:",
+        "FIELD_HEADER_HOSTNAME"                 : "Сервер:",
+        "FIELD_HEADER_LOGIN_FAILURE_REGEX"      : "Regex определения отказа во входе:",
+        "FIELD_HEADER_LOGIN_SUCCESS_REGEX"      : "Regex определения успешного входа:",
+        "FIELD_HEADER_USERNAME"                 : "Имя пользователя:",
+        "FIELD_HEADER_USERNAME_REGEX"           : "Regex определения запроса имени пользователя:",
+        "FIELD_HEADER_PASSWORD"                 : "Пароль:",
+        "FIELD_HEADER_PASSWORD_REGEX"           : "Regex определения запроса пароля:",
+        "FIELD_HEADER_PORT"                     : "Порт:",
+        "FIELD_HEADER_READ_ONLY"                : "Только просмотр:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE"  : "Исключить мышь:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT" : "Исключить графику/потоки:",
+        "FIELD_HEADER_RECORDING_INCLUDE_KEYS"   : "Включить события клавиатуры:",
+        "FIELD_HEADER_RECORDING_NAME"           : "Название записи:",
+        "FIELD_HEADER_RECORDING_PATH"           : "Путь для записи:",
+        "FIELD_HEADER_SCROLLBACK"               : "Размер буфера прокрутки:",
+        "FIELD_HEADER_TERMINAL_TYPE"            : "Тип терминала:",
+        "FIELD_HEADER_TYPESCRIPT_NAME"          : "Название typescript:",
+        "FIELD_HEADER_TYPESCRIPT_PATH"          : "Путь typescript:",
 
-        "FIELD_OPTION_FONT_SIZE_8"     : "8",
-        "FIELD_OPTION_FONT_SIZE_9"     : "9",
-        "FIELD_OPTION_FONT_SIZE_10"    : "10",
-        "FIELD_OPTION_FONT_SIZE_11"    : "11",
-        "FIELD_OPTION_FONT_SIZE_12"    : "12",
-        "FIELD_OPTION_FONT_SIZE_14"    : "14",
-        "FIELD_OPTION_FONT_SIZE_18"    : "18",
-        "FIELD_OPTION_FONT_SIZE_24"    : "24",
-        "FIELD_OPTION_FONT_SIZE_30"    : "30",
-        "FIELD_OPTION_FONT_SIZE_36"    : "36",
-        "FIELD_OPTION_FONT_SIZE_48"    : "48",
-        "FIELD_OPTION_FONT_SIZE_60"    : "60",
-        "FIELD_OPTION_FONT_SIZE_72"    : "72",
-        "FIELD_OPTION_FONT_SIZE_96"    : "96",
-        "FIELD_OPTION_FONT_SIZE_EMPTY" : "",
+        "FIELD_OPTION_COLOR_SCHEME_BLACK_WHITE" : "Черное на белом",
+        "FIELD_OPTION_COLOR_SCHEME_GRAY_BLACK"  : "Серое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_GREEN_BLACK" : "Зеленое на черном",
+        "FIELD_OPTION_COLOR_SCHEME_WHITE_BLACK" : "Белое на черном",
 
-        "NAME" : "Telnet",
-
-        "SECTION_HEADER_CLIPBOARD" : "Буфер обмена"
+        "SECTION_HEADER_AUTHENTICATION" : "Аутентификация",
+        "SECTION_HEADER_BEHAVIOR"       : "Поведение терминала",
+        "SECTION_HEADER_DISPLAY"        : "Экран",
+        "SECTION_HEADER_RECORDING"      : "Запись экрана",
+        "SECTION_HEADER_TYPESCRIPT"     : "Typescript (запись текстовой сессии)",
+        "SECTION_HEADER_NETWORK"        : "Сеть"
 
     },
 
     "PROTOCOL_VNC" : {
 
-        "FIELD_HEADER_AUDIO_SERVERNAME" : "Название аудио-сервера:",
-        "FIELD_HEADER_COLOR_DEPTH"      : "Глубина цвета:",
-        "FIELD_HEADER_CURSOR"           : "Курсор:",
-        "FIELD_HEADER_DEST_HOST"        : "Repeater destination host:",
-        "FIELD_HEADER_DEST_PORT"        : "Repeater destination port:",
-        "FIELD_HEADER_ENABLE_AUDIO"     : "Включить звук:",
-        "FIELD_HEADER_ENABLE_SFTP"      : "Включить SFTP:",
-        "FIELD_HEADER_HOSTNAME"         : "Название сервера:",
-        "FIELD_HEADER_USERNAME"         : "Имя пользователя:",
-        "FIELD_HEADER_PASSWORD"         : "Пароль:",
-        "FIELD_HEADER_PORT"             : "Порт:",
-        "FIELD_HEADER_READ_ONLY"        : "Только просмотр:",
-        "FIELD_HEADER_SFTP_HOSTNAME"    : "Название сервера:",
-        "FIELD_HEADER_SFTP_PASSPHRASE"  : "Секретная фраза:",
-        "FIELD_HEADER_SFTP_PASSWORD"    : "Пароль:",
-        "FIELD_HEADER_SFTP_PORT"        : "Порт:",
-        "FIELD_HEADER_SFTP_PRIVATE_KEY" : "Приватный ключ:",
-        "FIELD_HEADER_SFTP_USERNAME"    : "Имя пользователя:",
-        "FIELD_HEADER_SWAP_RED_BLUE"    : "Поменять синий и красный компоненты:",
+        "FIELD_HEADER_AUDIO_SERVERNAME"           : "Название аудио-сервера:",
+        "FIELD_HEADER_CLIPBOARD_ENCODING"         : "Кодировка:",
+        "FIELD_HEADER_COLOR_DEPTH"                : "Глубина цвета:",
+        "FIELD_HEADER_CREATE_RECORDING_PATH"      : "Автоматически создавать путь для записи:",
+        "FIELD_HEADER_CURSOR"                     : "Курсор:",
+        "FIELD_HEADER_DEST_HOST"                  : "Сервер назначения:",
+        "FIELD_HEADER_DEST_PORT"                  : "Порт назначения:",
+        "FIELD_HEADER_DISABLE_COPY"               : "Отключить копирование в буфер обмена:",
+        "FIELD_HEADER_DISABLE_PASTE"              : "Отключить вставку из буфера обмена:",
+        "FIELD_HEADER_ENABLE_AUDIO"               : "Включить звук:",
+        "FIELD_HEADER_ENABLE_SFTP"                : "Включить SFTP:",
+        "FIELD_HEADER_HOSTNAME"                   : "Сервер:",
+        "FIELD_HEADER_PASSWORD"                   : "Пароль:",
+        "FIELD_HEADER_PORT"                       : "Порт:",
+        "FIELD_HEADER_READ_ONLY"                  : "Только просмотр:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_MOUSE"    : "Исключить мышь:",
+        "FIELD_HEADER_RECORDING_EXCLUDE_OUTPUT"   : "Исключить графику/потоки:",
+        "FIELD_HEADER_RECORDING_INCLUDE_KEYS"     : "Включить события клавиатуры:",
+        "FIELD_HEADER_RECORDING_NAME"             : "Название записи:",
+        "FIELD_HEADER_RECORDING_PATH"             : "Путь для записи:",
+        "FIELD_HEADER_SFTP_DIRECTORY"             : "Директория загрузки по умолчанию:",
+        "FIELD_HEADER_SFTP_HOST_KEY"              : "Публичный ключ сервера (Base64):",
+        "FIELD_HEADER_SFTP_HOSTNAME"              : "Сервер:",
+        "FIELD_HEADER_SFTP_SERVER_ALIVE_INTERVAL" : "Интервал keepalive для SFTP:",
+        "FIELD_HEADER_SFTP_PASSPHRASE"            : "Секретная фраза:",
+        "FIELD_HEADER_SFTP_PASSWORD"              : "Пароль:",
+        "FIELD_HEADER_SFTP_PORT"                  : "Порт:",
+        "FIELD_HEADER_SFTP_PRIVATE_KEY"           : "Приватный ключ:",
+        "FIELD_HEADER_SFTP_ROOT_DIRECTORY"        : "Директория просмотра по умолчанию:",
+        "FIELD_HEADER_SFTP_USERNAME"              : "Имя пользователя:",
+        "FIELD_HEADER_SWAP_RED_BLUE"              : "Поменять синий и красный компоненты:",
 
-        "FIELD_OPTION_COLOR_DEPTH_8"     : "256 цветов",
-        "FIELD_OPTION_COLOR_DEPTH_16"    : "Low color (16-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_24"    : "True color (24-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_32"    : "True color (32-бит)",
-        "FIELD_OPTION_COLOR_DEPTH_EMPTY" : "",
+        "FIELD_OPTION_COLOR_DEPTH_8"  : "256 цветов",
+        "FIELD_OPTION_COLOR_DEPTH_16" : "Low color (16-бит)",
+        "FIELD_OPTION_COLOR_DEPTH_24" : "True color (24-бит)",
+        "FIELD_OPTION_COLOR_DEPTH_32" : "True color (32-бит)",
 
-        "FIELD_OPTION_CURSOR_EMPTY"  : "",
         "FIELD_OPTION_CURSOR_LOCAL"  : "Локальный",
         "FIELD_OPTION_CURSOR_REMOTE" : "Удаленный",
 
-        "NAME" : "VNC",
-
-        "SECTION_HEADER_CLIPBOARD" : "Буфер обмена"
+        "SECTION_HEADER_AUDIO"          : "Аудио",
+        "SECTION_HEADER_AUTHENTICATION" : "Аутентификация",
+        "SECTION_HEADER_CLIPBOARD"      : "Буфер обмена",
+        "SECTION_HEADER_DISPLAY"        : "Экран",
+        "SECTION_HEADER_NETWORK"        : "Сеть",
+        "SECTION_HEADER_RECORDING"      : "Запись экрана"
 
     },
 
@@ -449,34 +663,23 @@
 
     },
 
-    "SETTINGS_CONNECTIONS" : {
-
-        "ACTION_ACKNOWLEDGE"          : "@:APP.ACTION_ACKNOWLEDGE",
-        "ACTION_NEW_CONNECTION"       : "Новое подключение",
-        "ACTION_NEW_CONNECTION_GROUP" : "Новая группа",
-
-        "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
-
-        "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
-
-        "HELP_CONNECTIONS"   : "Нажмите на подключение, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление подключений, а также изменение их свойств (протокол, название сервера, порт и пр.).",
-
-        "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
-
-        "SECTION_HEADER_CONNECTIONS"     : "Подключения"
-
-    },
-
     "SETTINGS_CONNECTION_HISTORY" : {
 
+        "ACTION_DOWNLOAD" : "@:APP.ACTION_DOWNLOAD",
+        "ACTION_SEARCH"   : "@:APP.ACTION_SEARCH",
+
         "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
 
         "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
 
+        "HELP_CONNECTION_HISTORY" : "Здесь отображается журнал предыдущих подключений, который можно отсортировать, кликнув на заголовке колонки. Для поиска конкретных записей введите нужные данные и нажмите «Поиск». Тогда будут отображаться только записи, соответствующие данным для поиска.",
+
         "INFO_CONNECTION_DURATION_UNKNOWN" : "--",
+        "INFO_NO_HISTORY"                  : "Подходящих записей нет",
 
         "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения",
         "TABLE_HEADER_SESSION_DURATION"        : "Продолжительность",
+        "TABLE_HEADER_SESSION_REMOTEHOST"      : "Удаленный узел",
         "TABLE_HEADER_SESSION_STARTDATE"       : "Время начала",
         "TABLE_HEADER_SESSION_USERNAME"        : "Имя пользователя",
 
@@ -484,11 +687,30 @@
 
     },
 
+    "SETTINGS_CONNECTIONS" : {
+
+        "ACTION_ACKNOWLEDGE"          : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_NEW_CONNECTION"       : "Новое подключение",
+        "ACTION_NEW_CONNECTION_GROUP" : "Новая группа",
+        "ACTION_NEW_SHARING_PROFILE"  : "Новый профиль расшаривания",
+
+        "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
+
+        "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
+
+        "HELP_CONNECTIONS"   : "Нажмите на подключение, чтобы управлять им. В зависимости от прав доступа возможно добавление и удаление подключений, а также изменение их свойств (протокол, название сервера, порт и т.д.).",
+
+        "INFO_ACTIVE_USER_COUNT" : "@:APP.INFO_ACTIVE_USER_COUNT",
+
+        "SECTION_HEADER_CONNECTIONS" : "Подключения"
+
+    },
+
     "SETTINGS_PREFERENCES" : {
 
-        "ACTION_ACKNOWLEDGE"        : "@:APP.ACTION_ACKNOWLEDGE",
-        "ACTION_CANCEL"             : "@:APP.ACTION_CANCEL",
-        "ACTION_UPDATE_PASSWORD"    : "@:APP.ACTION_UPDATE_PASSWORD",
+        "ACTION_ACKNOWLEDGE"     : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_CANCEL"          : "@:APP.ACTION_CANCEL",
+        "ACTION_UPDATE_PASSWORD" : "@:APP.ACTION_UPDATE_PASSWORD",
 
         "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
 
@@ -499,7 +721,8 @@
         "FIELD_HEADER_PASSWORD"           : "Пароль:",
         "FIELD_HEADER_PASSWORD_OLD"       : "Текущий пароль:",
         "FIELD_HEADER_PASSWORD_NEW"       : "Новый пароль:",
-        "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Подтверждение пароля:",
+        "FIELD_HEADER_PASSWORD_NEW_AGAIN" : "Повтор нового пароля:",
+        "FIELD_HEADER_TIMEZONE"           : "Часовой пояс:",
         "FIELD_HEADER_USERNAME"           : "Имя пользователя:",
 
         "HELP_DEFAULT_INPUT_METHOD" : "Режим ввода по умолчанию определяет, каким образом нажатия на клавиатуру будут передаваться Guacamole. Изменение данной настройки может быть полезным при работе с мобильных устройств или при вводе через IME. Данная настройка может быть сделана для каждого подключения через основное меню Guacamole.",
@@ -507,10 +730,10 @@
         "HELP_INPUT_METHOD_NONE"    : "@:CLIENT.HELP_INPUT_METHOD_NONE",
         "HELP_INPUT_METHOD_OSK"     : "@:CLIENT.HELP_INPUT_METHOD_OSK",
         "HELP_INPUT_METHOD_TEXT"    : "@:CLIENT.HELP_INPUT_METHOD_TEXT",
-        "HELP_LANGUAGE"             : "Выберите другой язык из списка ниже, чтобы использовать его в Guacamole. Доступность опций зависит от установленных в системе языков.",
+        "HELP_LOCALE"               : "Ниже вы можете выбрать язык и установить другие настройки локали, влияющие на отображение интерфейса пользователя.",
         "HELP_MOUSE_MODE_ABSOLUTE"  : "@:CLIENT.HELP_MOUSE_MODE_ABSOLUTE",
         "HELP_MOUSE_MODE_RELATIVE"  : "@:CLIENT.HELP_MOUSE_MODE_RELATIVE",
-        "HELP_UPDATE_PASSWORD"      : "Если вы хотите изменить пароль, укажите ваш текущий пароль и дважды новый пароль. Затем нажмите на \"Изменить пароль\". Изменения вступят в силу моментально.",
+        "HELP_UPDATE_PASSWORD"      : "Если вы хотите изменить пароль, укажите ваш текущий пароль и дважды укажите новый. Затем нажмите «Обновить пароль». Изменения вступят в силу моментально.",
 
         "INFO_PASSWORD_CHANGED" : "Пароль успешно изменен.",
 
@@ -526,8 +749,8 @@
 
     "SETTINGS_USERS" : {
 
-        "ACTION_ACKNOWLEDGE"   : "@:APP.ACTION_ACKNOWLEDGE",
-        "ACTION_NEW_USER"      : "Новый пользователь",
+        "ACTION_ACKNOWLEDGE" : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_NEW_USER"    : "Создать пользователя",
 
         "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
 
@@ -539,7 +762,29 @@
 
         "SECTION_HEADER_USERS"       : "Пользователи",
 
-        "TABLE_HEADER_USERNAME" : "Имя пользователя"
+        "TABLE_HEADER_FULL_NAME"    : "Полное имя",
+        "TABLE_HEADER_LAST_ACTIVE"  : "Был активен",
+        "TABLE_HEADER_ORGANIZATION" : "Организация",
+        "TABLE_HEADER_USERNAME"     : "Имя пользователя"
+
+    },
+
+    "SETTINGS_USER_GROUPS" : {
+
+        "ACTION_ACKNOWLEDGE"    : "@:APP.ACTION_ACKNOWLEDGE",
+        "ACTION_NEW_USER_GROUP" : "Создать группу",
+
+        "DIALOG_HEADER_ERROR" : "@:APP.DIALOG_HEADER_ERROR",
+
+        "FIELD_PLACEHOLDER_FILTER" : "@:APP.FIELD_PLACEHOLDER_FILTER",
+
+        "FORMAT_DATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
+
+        "HELP_USER_GROUPS" : "Нажмите на группу, чтобы управлять ей. В зависимости от прав доступа возможно добавление и удаление групп, а также изменение членства других групп и пользователей.",
+
+        "SECTION_HEADER_USER_GROUPS" : "Группы",
+
+        "TABLE_HEADER_USER_GROUP_NAME" : "Название группы"
 
     },
 
@@ -556,7 +801,7 @@
 
         "FORMAT_STARTDATE" : "@:APP.FORMAT_DATE_TIME_PRECISE",
 
-        "HELP_SESSIONS" : "Эта страница будет заполнена активными в настоящее время соединениями. Перечисленные соединения и возможность убивать эти соединения зависят от вашего уровня доступа. Если вы хотите завершить одну или несколько сессий, выберите нужные сессии и нажмите на \"Завершить сессии\". Принудительное завершение сессий приведет к немедленному отключению пользователей, которые ими пользуются.",
+        "HELP_SESSIONS" : "Здесь показаны текущие активные сессии Guacamole. Отображаемые сессии и возможность их завершения зависит от ваших прав доступа. Если вы хотите завершить одну или несколько сессий, выберите нужные и нажмите «Завершить сессии». Принудительное завершение сессий приведет к немедленному отключению пользователей.",
 
         "INFO_NO_SESSIONS" : "Нет активных сессий",
 
@@ -564,13 +809,22 @@
 
         "TABLE_HEADER_SESSION_USERNAME"        : "Имя пользователя",
         "TABLE_HEADER_SESSION_STARTDATE"       : "Активен с",
-        "TABLE_HEADER_SESSION_REMOTEHOST"      : "Удаленный сервер",
+        "TABLE_HEADER_SESSION_REMOTEHOST"      : "Удаленный узел",
         "TABLE_HEADER_SESSION_CONNECTION_NAME" : "Название подключения",
 
         "TEXT_CONFIRM_DELETE" : "Вы уверены, что хотите завершить все выбранные сессии? Пользователи, работающие в этих сессиях, будут немедленно отключены."
 
     },
 
+    "USER_ATTRIBUTES" : {
+
+        "FIELD_HEADER_GUAC_EMAIL_ADDRESS"       : "Адрес электронной почты:",
+        "FIELD_HEADER_GUAC_FULL_NAME"           : "Полное имя:",
+        "FIELD_HEADER_GUAC_ORGANIZATION"        : "Организация:",
+        "FIELD_HEADER_GUAC_ORGANIZATIONAL_ROLE" : "Роль:"
+
+    },
+
     "USER_MENU" : {
 
         "ACTION_LOGOUT"             : "@:APP.ACTION_LOGOUT",
@@ -579,7 +833,9 @@
         "ACTION_MANAGE_SESSIONS"    : "@:APP.ACTION_MANAGE_SESSIONS",
         "ACTION_MANAGE_SETTINGS"    : "@:APP.ACTION_MANAGE_SETTINGS",
         "ACTION_MANAGE_USERS"       : "@:APP.ACTION_MANAGE_USERS",
-        "ACTION_NAVIGATE_HOME"      : "@:APP.ACTION_NAVIGATE_HOME"
+        "ACTION_MANAGE_USER_GROUPS" : "@:APP.ACTION_MANAGE_USER_GROUPS",
+        "ACTION_NAVIGATE_HOME"      : "@:APP.ACTION_NAVIGATE_HOME",
+        "ACTION_VIEW_HISTORY"       : "@:APP.ACTION_VIEW_HISTORY"
 
     }