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 086b37e..fbf5d66 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 38c51dd..3df1198 100755
--- a/guacamole-docker/bin/start.sh
+++ b/guacamole-docker/bin/start.sh
@@ -418,6 +418,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" \
@@ -586,6 +587,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.
@@ -756,6 +772,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"
}