Browse Source

Merge remote-tracking branch 'origin/master'

James Albright 8 years ago
parent
commit
0f74025a72
48 changed files with 474 additions and 232 deletions
  1. 1 1
      pom.xml
  2. 4 1
      src/main/java/password/pwm/AppProperty.java
  3. 62 0
      src/main/java/password/pwm/bean/TokenDestinationItem.java
  4. 2 0
      src/main/java/password/pwm/config/PwmSetting.java
  5. 6 0
      src/main/java/password/pwm/http/PwmRequest.java
  6. 2 0
      src/main/java/password/pwm/http/PwmRequestAttribute.java
  7. 0 5
      src/main/java/password/pwm/http/filter/RequestInitializationFilter.java
  8. 16 8
      src/main/java/password/pwm/http/servlet/ActivateUserServlet.java
  9. 1 1
      src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java
  10. 33 11
      src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordServlet.java
  11. 10 3
      src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordUtil.java
  12. 5 2
      src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java
  13. 24 13
      src/main/java/password/pwm/ldap/LdapConnectionService.java
  14. 57 6
      src/main/java/password/pwm/svc/token/TokenService.java
  15. 37 0
      src/main/java/password/pwm/util/ValueObfuscator.java
  16. 4 1
      src/main/resources/password/pwm/AppProperty.properties
  17. 9 12
      src/main/resources/password/pwm/config/PwmSetting.xml
  18. 2 2
      src/main/resources/password/pwm/i18n/Display.properties
  19. 16 14
      src/main/resources/password/pwm/i18n/Display_ca.properties
  20. 5 5
      src/main/resources/password/pwm/i18n/Display_da.properties
  21. 6 6
      src/main/resources/password/pwm/i18n/Display_de.properties
  22. 0 1
      src/main/resources/password/pwm/i18n/Display_el.properties
  23. 5 5
      src/main/resources/password/pwm/i18n/Display_en_CA.properties
  24. 16 16
      src/main/resources/password/pwm/i18n/Display_es.properties
  25. 6 6
      src/main/resources/password/pwm/i18n/Display_fr.properties
  26. 7 10
      src/main/resources/password/pwm/i18n/Display_fr_CA.properties
  27. 6 6
      src/main/resources/password/pwm/i18n/Display_it.properties
  28. 6 9
      src/main/resources/password/pwm/i18n/Display_iw.properties
  29. 6 6
      src/main/resources/password/pwm/i18n/Display_ja.properties
  30. 14 10
      src/main/resources/password/pwm/i18n/Display_nl.properties
  31. 3 3
      src/main/resources/password/pwm/i18n/Display_pl.properties
  32. 6 6
      src/main/resources/password/pwm/i18n/Display_pt_BR.properties
  33. 6 6
      src/main/resources/password/pwm/i18n/Display_ru.properties
  34. 7 7
      src/main/resources/password/pwm/i18n/Display_sv.properties
  35. 9 9
      src/main/resources/password/pwm/i18n/Display_zh_CN.properties
  36. 6 6
      src/main/resources/password/pwm/i18n/Display_zh_TW.properties
  37. 2 2
      src/main/resources/password/pwm/i18n/Message_ca.properties
  38. 1 1
      src/main/resources/password/pwm/i18n/Message_de.properties
  39. 2 2
      src/main/resources/password/pwm/i18n/Message_es.properties
  40. 1 1
      src/main/resources/password/pwm/i18n/Message_nl.properties
  41. 1 1
      src/main/resources/password/pwm/i18n/Message_ru.properties
  42. 2 0
      src/main/resources/password/pwm/i18n/PwmSetting.properties
  43. 17 9
      src/main/webapp/WEB-INF/jsp/changepassword-agreement.jsp
  44. 1 1
      src/main/webapp/WEB-INF/jsp/forgottenpassword-entertoken.jsp
  45. 25 1
      src/main/webapp/WEB-INF/jsp/forgottenpassword-tokenchoice.jsp
  46. 0 5
      src/main/webapp/WEB-INF/jsp/fragment/header.jsp
  47. 16 8
      src/main/webapp/WEB-INF/jsp/updateprofile-agreement.jsp
  48. 1 4
      src/test/java/password/pwm/health/HealthMessageTest.java

+ 1 - 1
pom.xml

@@ -701,7 +701,7 @@
         <dependency>
             <groupId>com.github.ldapchai</groupId>
             <artifactId>ldapchai</artifactId>
-            <version>0.6.10</version>
+            <version>0.6.11</version>
         </dependency>
         <dependency>
             <groupId>commons-net</groupId>

+ 4 - 1
src/main/java/password/pwm/AppProperty.java

@@ -282,8 +282,11 @@ public enum AppProperty {
     SECURITY_DEFAULT_EPHEMERAL_HASH_ALG             ("security.defaultEphemeralHashAlg"),
     SEEDLIST_BUILTIN_PATH                           ("seedlist.builtin.path"),
     SMTP_SUBJECT_ENCODING_CHARSET                   ("smtp.subjectEncodingCharset"),
+    TOKEN_MASK_EMAIL_REGEX                          ("token.mask.email.regex"),
+    TOKEN_MASK_EMAIL_REPLACE                        ("token.mask.email.replace"),
+    TOKEN_MASK_SMS_REGEX                            ("token.mask.sms.regex"),
+    TOKEN_MASK_SMS_REPLACE                          ("token.mask.sms.replace"),
     TOKEN_MAX_UNIQUE_CREATE_ATTEMPTS                ("token.maxUniqueCreateAttempts"),
-    TOKEN_RESEND_ENABLED                            ("token.resend.enabled"),
     TOKEN_RESEND_DELAY_MS                           ("token.resend.delayMS"),
     TOKEN_REMOVE_ON_CLAIM                           ("token.removeOnClaim"),
     TOKEN_VERIFY_PW_MODIFY_TIME                     ("token.verifyPwModifyTime"),

+ 62 - 0
src/main/java/password/pwm/bean/TokenDestinationItem.java

@@ -0,0 +1,62 @@
+package password.pwm.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import password.pwm.config.Configuration;
+import password.pwm.error.PwmUnrecoverableException;
+import password.pwm.ldap.UserInfo;
+import password.pwm.util.ValueObfuscator;
+import password.pwm.util.java.StringUtil;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+@Getter
+@AllArgsConstructor
+public class TokenDestinationItem {
+    private String id;
+    private String display;
+    private String value;
+    private Type type;
+
+    public enum Type {
+        sms,
+        email,
+    }
+
+    public static List<TokenDestinationItem> allFromConfig(final Configuration configuration, final UserInfo userInfo)
+            throws PwmUnrecoverableException
+    {
+        final ValueObfuscator valueObfuscator = new ValueObfuscator(configuration);
+        int counter = 0;
+
+        final List<TokenDestinationItem> results = new ArrayList<>();
+
+        {
+            final String smsValue = userInfo.getUserSmsNumber();
+            if (!StringUtil.isEmpty(smsValue)) {
+                results.add(new TokenDestinationItem(
+                        String.valueOf(++counter),
+                        valueObfuscator.maskPhone(smsValue),
+                        smsValue,
+                        Type.sms
+                ));
+            }
+        }
+
+        {
+            final String emailValue = userInfo.getUserEmailAddress();
+            if (!StringUtil.isEmpty(emailValue)) {
+                results.add(new TokenDestinationItem(
+                        String.valueOf(++counter),
+                        valueObfuscator.maskEmail(emailValue),
+                        emailValue,
+                        Type.email
+                ));
+            }
+        }
+
+        return Collections.unmodifiableList(results);
+    }
+}

+ 2 - 0
src/main/java/password/pwm/config/PwmSetting.java

@@ -736,6 +736,8 @@ public enum PwmSetting {
             "challenge.requiredAttributes", PwmSettingSyntax.FORM, PwmSettingCategory.RECOVERY_DEF),
     RECOVERY_ALLOW_WHEN_LOCKED(
             "recovery.allowWhenLocked", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_DEF),
+    TOKEN_RESEND_ENABLE(
+            "recovery.token.resend.enable", PwmSettingSyntax.BOOLEAN, PwmSettingCategory.RECOVERY_DEF),
 
     // recovery oauth
     RECOVERY_OAUTH_ID_LOGIN_URL(

+ 6 - 0
src/main/java/password/pwm/http/PwmRequest.java

@@ -31,6 +31,7 @@ import password.pwm.PwmApplication;
 import password.pwm.PwmApplicationMode;
 import password.pwm.PwmConstants;
 import password.pwm.bean.LocalSessionStateBean;
+import password.pwm.bean.LoginInfoBean;
 import password.pwm.bean.SessionLabel;
 import password.pwm.bean.UserIdentity;
 import password.pwm.ldap.UserInfo;
@@ -422,6 +423,11 @@ public class PwmRequest extends PwmHttpRequestWrapper implements Serializable {
         final PwmURL pwmURL = getURL();
         final UserInfo userInfoBean = pwmSession.getUserInfo();
 
+
+        if (pwmSession.getLoginInfoBean().isLoginFlag(LoginInfoBean.LoginFlag.forcePwChange) && pwmURL.isChangePasswordURL()) {
+            return true;
+        }
+
         if (userInfoBean.isRequiresNewPassword() && pwmURL.isChangePasswordURL()) {
             return true;
         }

+ 2 - 0
src/main/java/password/pwm/http/PwmRequestAttribute.java

@@ -76,6 +76,8 @@ public enum PwmRequestAttribute {
     ForgottenPasswordPrompts,
     ForgottenPasswordInstructions,
     ForgottenPasswordOtpRecord,
+    ForgottenPasswordResendTokenEnabled,
+    ForgottenPasswordTokenDestItems,
 
     GuestCurrentExpirationDate,
     GuestMaximumExpirationDate,

+ 0 - 5
src/main/java/password/pwm/http/filter/RequestInitializationFilter.java

@@ -343,11 +343,6 @@ public class RequestInitializationFilter implements Filter {
             resp.setHeader(HttpHeader.Server, value);
         }
 
-
-        if (pwmRequest.getURL().isResourceURL()) {
-            return;
-        }
-
         // ----- non-resource urls only for the following operations -----
 
         final boolean includeXFrameDeny = config.readSettingAsBoolean(PwmSetting.SECURITY_PREVENT_FRAMING);

+ 16 - 8
src/main/java/password/pwm/http/servlet/ActivateUserServlet.java

@@ -33,15 +33,15 @@ import password.pwm.bean.EmailItemBean;
 import password.pwm.bean.LocalSessionStateBean;
 import password.pwm.bean.LoginInfoBean;
 import password.pwm.bean.SmsItemBean;
+import password.pwm.bean.TokenDestinationItem;
 import password.pwm.bean.UserIdentity;
-import password.pwm.config.value.data.ActionConfiguration;
 import password.pwm.config.Configuration;
-import password.pwm.config.value.data.FormConfiguration;
-import password.pwm.util.form.FormUtility;
 import password.pwm.config.PwmSetting;
-import password.pwm.config.value.data.UserPermission;
 import password.pwm.config.option.MessageSendMethod;
 import password.pwm.config.profile.LdapProfile;
+import password.pwm.config.value.data.ActionConfiguration;
+import password.pwm.config.value.data.FormConfiguration;
+import password.pwm.config.value.data.UserPermission;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmDataValidationException;
 import password.pwm.error.PwmError;
@@ -70,6 +70,7 @@ import password.pwm.svc.token.TokenService;
 import password.pwm.svc.token.TokenType;
 import password.pwm.util.CaptchaUtility;
 import password.pwm.util.PostChangePasswordAction;
+import password.pwm.util.form.FormUtility;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.macro.MacroMachine;
@@ -670,8 +671,8 @@ public class ActivateUserServlet extends AbstractPwmServlet {
             throw new PwmUnrecoverableException(e.getErrorInformation());
         }
 
-        sendToken(pwmRequest, userIdentity, locale, outputDestTokenData.getEmail(), outputDestTokenData.getSms(), tokenKey);
-        activateUserBean.setTokenDisplayText(outputDestTokenData.getDisplayValue());
+        final String displayValue = sendToken(pwmRequest, userIdentity, locale, outputDestTokenData.getEmail(), outputDestTokenData.getSms(), tokenKey);
+        activateUserBean.setTokenDisplayText(displayValue);
         activateUserBean.setTokenIssued(true);
     }
 
@@ -714,7 +715,7 @@ public class ActivateUserServlet extends AbstractPwmServlet {
         this.advanceToNextStage(pwmRequest);
     }
 
-    private static void sendToken(
+    private static String sendToken(
             final PwmRequest pwmRequest,
             final UserIdentity userIdentity,
             final Locale userLocale,
@@ -732,7 +733,7 @@ public class ActivateUserServlet extends AbstractPwmServlet {
 
         final MacroMachine macroMachine = MacroMachine.forUser(pwmRequest, userIdentity);
 
-        TokenService.TokenSender.sendToken(
+        final List<TokenDestinationItem.Type> sentTypes = TokenService.TokenSender.sendToken(
                 pwmApplication,
                 null,
                 macroMachine,
@@ -743,6 +744,13 @@ public class ActivateUserServlet extends AbstractPwmServlet {
                 smsMessage,
                 tokenKey
         );
+
+        return TokenService.TokenSender.figureDisplayString(
+                pwmApplication.getConfig(),
+                sentTypes,
+                toAddress,
+                toSmsNumber
+                );
     }
 
     private static String figureLdapSearchFilter(final PwmRequest pwmRequest)

+ 1 - 1
src/main/java/password/pwm/http/servlet/configeditor/ConfigEditorServlet.java

@@ -643,7 +643,7 @@ public class ConfigEditorServlet extends AbstractPwmServlet {
                 outputMap.put(key, new TreeMap<>(returnData.get(key)));
             }
 
-            restResultBean.setData(returnData);
+            restResultBean.setData(outputMap);
             LOGGER.trace(pwmRequest, "finished search operation with " + returnData.size() + " results in " + TimeDuration.fromCurrent(startTime).asCompactString());
         } else {
             restResultBean.setData(new ArrayList<StoredConfigurationImpl.ConfigRecordID>());

+ 33 - 11
src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordServlet.java

@@ -36,12 +36,9 @@ import password.pwm.VerificationMethodSystem;
 import password.pwm.bean.LoginInfoBean;
 import password.pwm.bean.PasswordStatus;
 import password.pwm.bean.SessionLabel;
+import password.pwm.bean.TokenDestinationItem;
 import password.pwm.bean.UserIdentity;
-import password.pwm.ldap.UserInfo;
-import password.pwm.config.value.data.ActionConfiguration;
 import password.pwm.config.Configuration;
-import password.pwm.config.value.data.FormConfiguration;
-import password.pwm.util.form.FormUtility;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.option.IdentityVerificationMethod;
 import password.pwm.config.option.MessageSendMethod;
@@ -49,6 +46,8 @@ import password.pwm.config.option.RecoveryAction;
 import password.pwm.config.profile.ForgottenPasswordProfile;
 import password.pwm.config.profile.ProfileType;
 import password.pwm.config.profile.ProfileUtility;
+import password.pwm.config.value.data.ActionConfiguration;
+import password.pwm.config.value.data.FormConfiguration;
 import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmDataValidationException;
 import password.pwm.error.PwmError;
@@ -71,6 +70,7 @@ import password.pwm.http.servlet.oauth.OAuthMachine;
 import password.pwm.http.servlet.oauth.OAuthSettings;
 import password.pwm.i18n.Message;
 import password.pwm.ldap.LdapOperationsHelper;
+import password.pwm.ldap.UserInfo;
 import password.pwm.ldap.auth.AuthenticationType;
 import password.pwm.ldap.auth.AuthenticationUtility;
 import password.pwm.ldap.auth.PwmAuthenticationSource;
@@ -88,6 +88,7 @@ import password.pwm.util.LocaleHelper;
 import password.pwm.util.PasswordData;
 import password.pwm.util.PostChangePasswordAction;
 import password.pwm.util.RandomPasswordGenerator;
+import password.pwm.util.form.FormUtility;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.logging.PwmLogger;
@@ -221,13 +222,22 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
         pwmRequest.getPwmApplication().getSessionStateService().clearBean(pwmRequest, ForgottenPasswordBean.class);
     }
 
+    private static ForgottenPasswordProfile forgottenPasswordProfile(final PwmRequest pwmRequest) throws PwmUnrecoverableException {
+        final ForgottenPasswordBean forgottenPasswordBean = forgottenPasswordBean(pwmRequest);
+        return pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
+    }
+
+
+
+
     @ActionHandler(action = "actionChoice")
     private ProcessStatus processActionChoice(final PwmRequest pwmRequest)
             throws PwmUnrecoverableException, ServletException, IOException, ChaiUnavailableException
     {
         final ForgottenPasswordBean forgottenPasswordBean = forgottenPasswordBean(pwmRequest);
+        final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
 
-        final boolean resendEnabled = Boolean.parseBoolean(pwmRequest.getConfig().readAppProperty(AppProperty.TOKEN_RESEND_ENABLED));
+        final boolean resendEnabled = forgottenPasswordProfile.readSettingAsBoolean(PwmSetting.TOKEN_RESEND_ENABLE);
 
         if (resendEnabled) {
             // clear token dest info in case we got here from a user 'go-back' request
@@ -678,7 +688,8 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
             throws PwmUnrecoverableException, IOException
     {
         {
-            final boolean resendEnabled = Boolean.parseBoolean(pwmRequest.getConfig().readAppProperty(AppProperty.TOKEN_RESEND_ENABLED));
+            final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
+            final boolean resendEnabled = forgottenPasswordProfile.readSettingAsBoolean(PwmSetting.TOKEN_RESEND_ENABLE);
             if (!resendEnabled) {
                 final String errorMsg = "token resend is not enabled";
                 final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_SERVICE_NOT_AVAILABLE, errorMsg);
@@ -779,7 +790,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
             return;
         }
 
-        final ForgottenPasswordProfile forgottenPasswordProfile = pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
+        final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
         {
             final Map<String, ForgottenPasswordProfile> profileIDList = pwmRequest.getConfig().getForgottenPasswordProfiles();
             final String profileDebugMsg = forgottenPasswordProfile != null && profileIDList != null && profileIDList.size() > 1
@@ -998,7 +1009,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final ForgottenPasswordBean forgottenPasswordBean = forgottenPasswordBean(pwmRequest);
-        final ForgottenPasswordProfile forgottenPasswordProfile = pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
+        final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
         final RecoveryAction recoveryAction = ForgottenPasswordUtil.getRecoveryAction(pwmApplication.getConfig(), forgottenPasswordBean);
 
         LOGGER.trace(pwmRequest,"beginning process to send new password to user");
@@ -1188,7 +1199,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
             throw new PwmUnrecoverableException(PwmError.ERROR_NO_PROFILE_ASSIGNED.toInfo());
         }
         forgottenPasswordBean.setForgottenPasswordProfileID(forgottenProfileID);
-        final ForgottenPasswordProfile forgottenPasswordProfile = pwmApplication.getConfig().getForgottenPasswordProfiles().get(forgottenProfileID);
+        final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
 
         final ForgottenPasswordBean.RecoveryFlags recoveryFlags = calculateRecoveryFlags(
                 pwmApplication,
@@ -1372,7 +1383,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
                 }
 
                 if (progress.getTokenSendChoice() == MessageSendMethod.CHOICE_SMS_EMAIL) {
-                    pwmRequest.forwardToJsp(JspUrl.RECOVER_PASSWORD_TOKEN_CHOICE);
+                    forwardToTokenChoiceJsp(pwmRequest);
                     return;
                 }
 
@@ -1384,6 +1395,8 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
                 }
 
                 if (!progress.getSatisfiedMethods().contains(IdentityVerificationMethod.TOKEN)) {
+                    final boolean resendEnabled = forgottenPasswordProfile(pwmRequest).readSettingAsBoolean(PwmSetting.TOKEN_RESEND_ENABLE);
+                    pwmRequest.setAttribute(PwmRequestAttribute.ForgottenPasswordResendTokenEnabled, resendEnabled);
                     pwmRequest.forwardToJsp(JspUrl.RECOVER_PASSWORD_ENTER_TOKEN);
                     return;
                 }
@@ -1417,7 +1430,7 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
 
             case OAUTH:
                 forgottenPasswordBean.getProgress().setInProgressVerificationMethod(IdentityVerificationMethod.OAUTH);
-                final ForgottenPasswordProfile forgottenPasswordProfile = pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
+                final ForgottenPasswordProfile forgottenPasswordProfile = forgottenPasswordProfile(pwmRequest);
                 final OAuthSettings oAuthSettings = OAuthSettings.forForgottenPassword(forgottenPasswordProfile);
                 final OAuthMachine oAuthMachine = new OAuthMachine(oAuthSettings);
                 pwmRequest.getPwmApplication().getSessionStateService().saveSessionBeans(pwmRequest);
@@ -1431,6 +1444,15 @@ public class ForgottenPasswordServlet extends ControlledPwmServlet {
         }
 
     }
+
+    private void forwardToTokenChoiceJsp(final PwmRequest pwmRequest)
+            throws ServletException, PwmUnrecoverableException, IOException
+    {
+        final UserInfo userInfo = ForgottenPasswordUtil.readUserInfo(pwmRequest, forgottenPasswordBean(pwmRequest));
+        final ArrayList<TokenDestinationItem> destItems = new ArrayList<>(TokenDestinationItem.allFromConfig(pwmRequest.getConfig(), userInfo));
+        pwmRequest.setAttribute(PwmRequestAttribute.ForgottenPasswordTokenDestItems, destItems);
+        pwmRequest.forwardToJsp(JspUrl.RECOVER_PASSWORD_TOKEN_CHOICE);
+    }
 }
 
 

+ 10 - 3
src/main/java/password/pwm/http/servlet/forgottenpw/ForgottenPasswordUtil.java

@@ -32,6 +32,7 @@ import password.pwm.AppProperty;
 import password.pwm.PwmApplication;
 import password.pwm.PwmConstants;
 import password.pwm.bean.EmailItemBean;
+import password.pwm.bean.TokenDestinationItem;
 import password.pwm.bean.UserIdentity;
 import password.pwm.config.Configuration;
 import password.pwm.config.value.data.FormConfiguration;
@@ -397,7 +398,6 @@ class ForgottenPasswordUtil {
                 userIdentity,
                 pwmRequest.getLocale());
 
-        final String tokenDestinationAddress = outputDestrestTokenDataClient.getDisplayValue();
         final Set<String> destinationValues = new LinkedHashSet<>();
         if (outputDestrestTokenDataClient.getEmail() != null) {
             destinationValues.add(outputDestrestTokenDataClient.getEmail());
@@ -417,7 +417,7 @@ class ForgottenPasswordUtil {
 
         final String smsMessage = config.readSettingAsLocalizedString(PwmSetting.SMS_CHALLENGE_TOKEN_TEXT, pwmRequest.getLocale());
 
-        TokenService.TokenSender.sendToken(
+        final List<TokenDestinationItem.Type> sentTypes = TokenService.TokenSender.sendToken(
                 pwmRequest.getPwmApplication(),
                 userInfo,
                 macroMachine,
@@ -430,7 +430,14 @@ class ForgottenPasswordUtil {
         );
 
         StatisticsManager.incrementStat(pwmRequest, Statistic.RECOVERY_TOKENS_SENT);
-        return tokenDestinationAddress;
+
+        final String displayDestAddress = TokenService.TokenSender.figureDisplayString(
+                pwmRequest.getConfig(),
+                sentTypes,
+                outputDestrestTokenDataClient.getEmail(),
+                outputDestrestTokenDataClient.getSms()
+        );
+        return displayDestAddress;
     }
 
 }

+ 5 - 2
src/main/java/password/pwm/http/servlet/newuser/NewUserUtils.java

@@ -63,6 +63,7 @@ import password.pwm.svc.token.TokenPayload;
 import password.pwm.svc.token.TokenService;
 import password.pwm.util.PasswordData;
 import password.pwm.util.RandomPasswordGenerator;
+import password.pwm.util.ValueObfuscator;
 import password.pwm.util.java.JavaHelper;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.StringUtil;
@@ -498,7 +499,8 @@ class NewUserUtils {
                 }
 
                 newUserBean.getTokenVerificationProgress().getIssuedTokens().add(TokenVerificationProgress.TokenChannel.SMS);
-                newUserBean.getTokenVerificationProgress().setTokenDisplayText(outputDestTokenData.getDisplayValue());
+                final ValueObfuscator valueObfuscator = new ValueObfuscator(pwmApplication.getConfig());
+                newUserBean.getTokenVerificationProgress().setTokenDisplayText(valueObfuscator.maskPhone(toNum));
                 newUserBean.getTokenVerificationProgress().setPhase(TokenVerificationProgress.TokenChannel.SMS);
             }
             break;
@@ -533,7 +535,8 @@ class NewUserUtils {
 
                 newUserBean.getTokenVerificationProgress().getIssuedTokens().add(TokenVerificationProgress.TokenChannel.EMAIL);
                 newUserBean.getTokenVerificationProgress().setPhase(TokenVerificationProgress.TokenChannel.EMAIL);
-                newUserBean.getTokenVerificationProgress().setTokenDisplayText(outputDestTokenData.getDisplayValue());
+                final ValueObfuscator valueObfuscator = new ValueObfuscator(pwmApplication.getConfig());
+                newUserBean.getTokenVerificationProgress().setTokenDisplayText(valueObfuscator.maskEmail(toAddress));
 
                 final EmailItemBean emailItemBean = new EmailItemBean(
                         outputDestTokenData.getEmail(),

+ 24 - 13
src/main/java/password/pwm/ldap/LdapConnectionService.java

@@ -53,7 +53,7 @@ public class LdapConnectionService implements PwmService {
     private PwmApplication pwmApplication;
     private STATUS status = STATUS.NEW;
     private AtomicLoopIntIncrementer slotIncrementer;
-    private final ThreadLocal<ChaiProvider> threadLocalProvider = new ThreadLocal<>();
+    private final ThreadLocal<Map<LdapProfile,ChaiProvider>> threadLocalProvider = new ThreadLocal<>();
 
     public STATUS status()
     {
@@ -115,40 +115,51 @@ public class LdapConnectionService implements PwmService {
         return getProxyChaiProvider(ldapProfile);
     }
 
-    public ChaiProvider getProxyChaiProvider(final LdapProfile identifier)
+    public ChaiProvider getProxyChaiProvider(final LdapProfile ldapProfile)
             throws PwmUnrecoverableException
     {
-        if (threadLocalProvider.get() != null) {
-            return threadLocalProvider.get();
+        final LdapProfile effectiveProfile = ldapProfile == null
+                ? pwmApplication.getConfig().getDefaultLdapProfile()
+                : ldapProfile;
+
+        if (threadLocalProvider.get() != null && threadLocalProvider.get().containsKey(effectiveProfile)) {
+            return threadLocalProvider.get().get(effectiveProfile);
+        }
+
+        final ChaiProvider chaiProvider = getNewProxyChaiProvider(effectiveProfile);
+
+        if (threadLocalProvider.get() == null) {
+            threadLocalProvider.set(new ConcurrentHashMap<>());
         }
+        threadLocalProvider.get().put(effectiveProfile, chaiProvider);
+
+        return chaiProvider;
+    }
 
+    private ChaiProvider getNewProxyChaiProvider(final LdapProfile ldapProfile)
+            throws PwmUnrecoverableException
+    {
         final int slot = slotIncrementer.next();
 
-        final ChaiProvider proxyChaiProvider = proxyChaiProviders.get(identifier).get(slot);
+        final ChaiProvider proxyChaiProvider = proxyChaiProviders.get(ldapProfile).get(slot);
 
         if (proxyChaiProvider != null) {
             return proxyChaiProvider;
         }
 
-        final LdapProfile ldapProfile = identifier == null
-                ? pwmApplication.getConfig().getDefaultLdapProfile()
-                : identifier;
-
         if (ldapProfile == null) {
-            final String errorMsg = "unknown ldap profile requested connection: " + identifier;
+            final String errorMsg = "unknown ldap profile requested connection: " + ldapProfile;
             throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_NO_LDAP_CONNECTION,errorMsg));
         }
 
         try {
-
             final ChaiProvider newProvider = LdapOperationsHelper.openProxyChaiProvider(
                     null,
                     ldapProfile,
                     pwmApplication.getConfig(),
                     pwmApplication.getStatisticsManager()
             );
-            proxyChaiProviders.get(identifier).put(slot, newProvider);
-            threadLocalProvider.set(newProvider);
+            proxyChaiProviders.get(ldapProfile).put(slot, newProvider);
 
             return newProvider;
         } catch (PwmUnrecoverableException e) {

+ 57 - 6
src/main/java/password/pwm/svc/token/TokenService.java

@@ -29,8 +29,8 @@ import password.pwm.PwmConstants;
 import password.pwm.bean.EmailItemBean;
 import password.pwm.bean.SessionLabel;
 import password.pwm.bean.SmsItemBean;
+import password.pwm.bean.TokenDestinationItem;
 import password.pwm.bean.UserIdentity;
-import password.pwm.ldap.UserInfo;
 import password.pwm.config.Configuration;
 import password.pwm.config.PwmSetting;
 import password.pwm.config.option.DataStorageMethod;
@@ -46,6 +46,7 @@ import password.pwm.error.PwmUnrecoverableException;
 import password.pwm.health.HealthMessage;
 import password.pwm.health.HealthRecord;
 import password.pwm.http.PwmSession;
+import password.pwm.ldap.UserInfo;
 import password.pwm.ldap.auth.SessionAuthenticator;
 import password.pwm.svc.PwmService;
 import password.pwm.svc.event.AuditEvent;
@@ -55,6 +56,7 @@ import password.pwm.svc.intruder.RecordType;
 import password.pwm.svc.stats.Statistic;
 import password.pwm.svc.stats.StatisticsManager;
 import password.pwm.util.DataStore;
+import password.pwm.util.ValueObfuscator;
 import password.pwm.util.db.DatabaseDataStore;
 import password.pwm.util.db.DatabaseTable;
 import password.pwm.util.java.JavaHelper;
@@ -612,7 +614,7 @@ public class TokenService implements PwmService {
     }
 
     public static class TokenSender {
-        public static void sendToken(
+        public static List<TokenDestinationItem.Type> sendToken(
                 final PwmApplication pwmApplication,
                 final UserInfo userInfo,
                 final MacroMachine macroMachine,
@@ -627,6 +629,8 @@ public class TokenService implements PwmService {
         {
             final boolean success;
 
+            final List<TokenDestinationItem.Type> sentTypes = new ArrayList<>();
+
             try {
                 switch (tokenSendMethod) {
                     case NONE:
@@ -636,27 +640,49 @@ public class TokenService implements PwmService {
                     case BOTH:
                         // Send both email and SMS, success if one of both succeeds
                         final boolean suc1 = sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey);
+                        if (suc1) {
+                            sentTypes.add(TokenDestinationItem.Type.email);
+                        }
                         final boolean suc2 = sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey);
+                        if (suc2) {
+                            sentTypes.add(TokenDestinationItem.Type.sms);
+                        }
                         success = suc1 || suc2;
                         break;
                     case EMAILFIRST:
                         // Send email first, try SMS if email is not available
-                        success = sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey) ||
-                                sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey);
+                        final boolean emailSuccess = sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey);
+                        if (emailSuccess) {
+                            success = true;
+                            sentTypes.add(TokenDestinationItem.Type.email);
+                        } else {
+                            success = sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey);
+                            if (success) {
+                                sentTypes.add(TokenDestinationItem.Type.sms);
+                            }
+                        }
                         break;
                     case SMSFIRST:
                         // Send SMS first, try email if SMS is not available
-                        success = sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey) ||
-                                sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey);
+                        final boolean smsSuccess = sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey);
+                        if (smsSuccess) {
+                            success = true;
+                            sentTypes.add(TokenDestinationItem.Type.sms);
+                        } else {
+                            success = sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey);
+                            sentTypes.add(TokenDestinationItem.Type.email);
+                        }
                         break;
                     case SMSONLY:
                         // Only try SMS
                         success = sendSmsToken(pwmApplication, userInfo, macroMachine, smsNumber, smsMessage, tokenKey);
+                        sentTypes.add(TokenDestinationItem.Type.sms);
                         break;
                     case EMAILONLY:
                     default:
                         // Only try email
                         success = sendEmailToken(pwmApplication, userInfo, macroMachine, configuredEmailSetting, emailAddress, tokenKey);
+                        sentTypes.add(TokenDestinationItem.Type.email);
                         break;
                 }
             } catch (ChaiUnavailableException e) {
@@ -667,6 +693,8 @@ public class TokenService implements PwmService {
                 throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_TOKEN_MISSING_CONTACT));
             }
             pwmApplication.getStatisticsManager().incrementValue(Statistic.TOKENS_SENT);
+
+            return sentTypes;
         }
 
         public static boolean sendEmailToken(
@@ -720,5 +748,28 @@ public class TokenService implements PwmService {
             LOGGER.debug("token SMS added to send queue for " + smsNumber);
             return true;
         }
+
+        public static String figureDisplayString(
+                final Configuration configuration,
+                final List<TokenDestinationItem.Type> sentTypes,
+                final String email,
+                final String sms
+        ) {
+            final ValueObfuscator valueObfuscator = new ValueObfuscator(configuration);
+            final StringBuilder displayDestAddress = new StringBuilder();
+            {
+                if (sentTypes.contains(TokenDestinationItem.Type.email)) {
+                    displayDestAddress.append(valueObfuscator.maskEmail(email));
+                }
+
+                if (sentTypes.contains(TokenDestinationItem.Type.sms)) {
+                    if (displayDestAddress.length() > 0) {
+                        displayDestAddress.append(" & ");
+                    }
+                    displayDestAddress.append(valueObfuscator.maskPhone(sms));
+                }
+            }
+            return displayDestAddress.toString();
+        }
     }
 }

+ 37 - 0
src/main/java/password/pwm/util/ValueObfuscator.java

@@ -0,0 +1,37 @@
+package password.pwm.util;
+
+
+import password.pwm.AppProperty;
+import password.pwm.config.Configuration;
+import password.pwm.util.java.StringUtil;
+
+public class ValueObfuscator {
+    private final Configuration configuration;
+
+    public ValueObfuscator(final Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    public String maskEmail(final String email) {
+        if (StringUtil.isEmpty(email)) {
+            return "";
+        }
+
+        final String regex = configuration.readAppProperty(AppProperty.TOKEN_MASK_EMAIL_REGEX);
+        final String replace = configuration.readAppProperty(AppProperty.TOKEN_MASK_EMAIL_REPLACE);
+        return email.replaceAll(regex, replace);
+    }
+
+    public String maskPhone(final String phone) {
+        if (StringUtil.isEmpty(phone)) {
+            return "";
+        }
+
+        final String regex = configuration.readAppProperty(AppProperty.TOKEN_MASK_SMS_REGEX);
+        final String replace = configuration.readAppProperty(AppProperty.TOKEN_MASK_SMS_REPLACE);
+        return phone.replaceAll(regex, replace);
+    }
+}
+
+
+

+ 4 - 1
src/main/resources/password/pwm/AppProperty.properties

@@ -268,8 +268,11 @@ telemetry.senderImplementation=password.pwm.svc.telemetry.HttpTelemetrySender
 telemetry.senderSettings={"url":"https://www.pwm-project.org/pwm-data-service/telemetry"}
 telemetry.sendFrequencySeconds=259203
 telemetry.minimumAuthentications=10
+token.mask.email.regex=(?<=.).(?=[^@]*?@)|(?:(?<=@.)|(?!^)\\G(?=[^@]*$)).(?=.*\\.)
+token.mask.email.replace=*
+token.mask.sms.regex=\\d(?!.{0,3}$)
+token.mask.sms.replace=*
 token.maxUniqueCreateAttempts=100
-token.resend.enabled=true
 token.resend.delayMS=3000
 token.verifyPwModifyTime=true
 token.removeOnClaim=true

+ 9 - 12
src/main/resources/password/pwm/config/PwmSetting.xml

@@ -298,9 +298,7 @@
     </setting>
     <setting hidden="false" key="deleteAccount.agreement" level="1" required="false">
         <flag>MacroSupport</flag>
-        <default>
-            <value/>
-        </default>
+        <default/>
     </setting>
     <setting hidden="false" key="deleteAccount.deleteEntry" level="1" required="false">
         <default>
@@ -398,9 +396,7 @@
     </setting>
     <setting hidden="false" key="display.password.changeAgreement" level="1">
         <flag>MacroSupport</flag>
-        <default>
-            <value />
-        </default>
+        <default/>
     </setting>
     <setting hidden="false" key="display.password.completeMessage" level="1">
         <flag>MacroSupport</flag>
@@ -2491,6 +2487,11 @@
             <value>false</value>
         </default>
     </setting>
+    <setting hidden="false" key="recovery.token.resend.enable" level="1" required="true">
+        <default>
+            <value>true</value>
+        </default>
+    </setting>
     <setting hidden="false" key="forgottenUsername.enable" level="1" required="true">
         <default>
             <value>false</value>
@@ -2780,9 +2781,7 @@
     </setting>
     <setting hidden="false" key="display.activateUser.agreement" level="1">
         <flag>MacroSupport</flag>
-        <default>
-            <value />
-        </default>
+        <default/>
     </setting>
     <setting hidden="false" key="activateUser.form" level="1" required="true">
         <ldapPermission actor="proxy" access="read"/>
@@ -2871,9 +2870,7 @@
     </setting>
     <setting hidden="false" key="display.updateAttributes.agreement" level="1">
         <flag>MacroSupport</flag>
-        <default>
-            <value />
-        </default>
+        <default/>
     </setting>
     <setting hidden="false" key="updateAttributes.queryMatch" level="1" required="true">
         <ldapPermission actor="proxy" access="read"/>

+ 2 - 2
src/main/resources/password/pwm/i18n/Display.properties

@@ -138,8 +138,8 @@ Display_RecoverTokenSendChoiceEmail=Send code to your registered email address.
 Display_RecoverTokenSendChoiceSMS=Send code to your mobile phone using text messaging (SMS).
 Display_RecoverChoiceReset=Set a new password.  If you have forgotten your password and would like to set a new one, click here.  Your account will also be unlocked when you set a new password.
 Display_RecoverChoiceUnlock=Unlock your account.  If you remember your password, you can unlock your account by selecting this option.  Your password will not be changed.
-Display_RecoverEnterCode=To verify your identity, a security code has been sent to you.  Please click the link in the email or copy and paste the security code here.
-Display_RecoverEnterCodeSMS=To verify your identity, a security code has been sent to you by SMS.  Please enter the security code in the message here.
+Display_RecoverEnterCode=To verify your identity, a security code has been sent to you at %1%.  Please click the link in the email or copy and paste the security code here.
+Display_RecoverEnterCodeSMS=To verify your identity, a security code has been sent to your phone at %1%.  Please enter the security code in the message here.
 Display_RecoverPassword=Please answer the following questions. If you answer these questions correctly, you will then be able to reset your password.
 Display_RecoverPasswordChoices=Your account has been locked due to excessive incorrect login attempts.  You may continue by unlocking your account or by changing your password.
 Display_RecoverRandomResponses=You must answer the following questions to continue.

+ 16 - 14
src/main/resources/password/pwm/i18n/Display_ca.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,11 +77,12 @@ Display_ChangePasswordForm=Introdueixi les dades seg\u00fcents. Aquest pas \u00e
 Display_CheckingData=S'estan comprovant les dades...
 Display_CheckingPassword=S'est\u00e0 comprovant la contrasenya...
 Display_CheckingResponses=S'estan comprovant les respostes...
+Display_ClientDisconnect=No s'ha pogut connectar amb el servidor.
 Display_CommunicationError=No s'ha pogut comunicar amb el servidor. Continu\u00ef quan estigui preparat.
 Display_ConfirmResponses=Asseguri's que les preguntes i les respostes s\u00f3n correctes. Comprovi l'ortografia i la puntuaci\u00f3. Si no recorda la contrasenya, podr\u00e0 accedir al compte proporcionant les respostes a aquestes preguntes de seguretat.
 Display_Day=dia
 Display_Days=dies
-Display_DeleteUserConfirm=Confirmeu que voleu suprimir el compte? Aquesta acci\u00f3 no es pot desfer.
+Display_DeleteUserConfirm=Confirma que vol suprimir el compte? Aquesta acci\u00f3 no es pot desfer.
 Display_ErrorBody=Hi ha hagut un error. Tanqui el navegador i torni a provar-ho m\u00e9s tard. Si l'error continua, contacti amb el servei d'assist\u00e8ncia.
 Display_ErrorReference=refer\u00e8ncia de l'error %1%
 Display_ExpirationDate=Data de caducitat del compte (m\u00e0xim %1% dies)
@@ -92,11 +92,11 @@ Display_ForgottenUsername=Introdu\u00efu la informaci\u00f3 seg\u00fcent. S'util
 Display_GuestRegistration=Per registrar un compte de convidat nou, introdueixi la informaci\u00f3 seg\u00fcent.
 Display_GuestUpdate=Per actualitzar un compte de convidat, comprovi i modifiqui la informaci\u00f3 seg\u00fcent.
 Display_Helpdesk=Introdueixi dades de cerca de l'usuari.
-Display_HelpdeskOtpValidation=Indiqueu a l'usuari que carregui l'aplicaci\u00f3 d'autenticaci\u00f3 m\u00f2bil i comparteixi el codi de contrasenya actual.
+Display_HelpdeskOtpValidation=Indiqui a l'usuari que carregui l'aplicaci\u00f3 d'autenticaci\u00f3 m\u00f2bil i comparteixi el codi de contrasenya actual.
 Display_Hour=hora
 Display_Hours=hores
-Display_IdleTimeout=Temps l\u00edmit d'inactivitat\:
-Display_IdleWarningMessage=El temps l\u00edmit de la sessi\u00f3 del navegador est\u00e0 a punt complir-se. Cliqueu en qualsevol lloc de la p\u00e0gina per reprendre la sessi\u00f3.
+Display_IdleTimeout=Temps d'espera d'inactivitat\:
+Display_IdleWarningMessage=El temps l\u00edmit de la sessi\u00f3 del navegador est\u00e0 a punt complir-se. Faci clic en qualsevol lloc de la p\u00e0gina per reprendre la sessi\u00f3.
 Display_IdleWarningTitle=Temps l\u00edmit d'inactivitat
 Display_JavascriptRequired=Es necessita JavaScript per visualitzar aquesta p\u00e0gina.
 Display_LeaveDirtyPasswordPage=Si surt d'aquesta p\u00e0gina, no es canviar\u00e0 la contrasenya.
@@ -132,7 +132,7 @@ Display_PleaseWait=S'est\u00e0 carregant...
 Display_PleaseWaitNewUser=S'est\u00e0 configurant el compte nou. Aquest proc\u00e9s pot durar uns quants minuts, tingui paci\u00e8ncia.
 Display_PleaseWaitPassword=S'est\u00e0 canviant la contrasenya. Aquest proc\u00e9s pot durar uns quants minuts, tingui paci\u00e8ncia.
 Display_Random=Aleatori
-Display_RecoverVerificationChoice=Seleccioneu un dels m\u00e8todes que hi ha a continuaci\u00f3 per verificar la vostra identitat. Nota\: si l'administrador us sol\u00b7licita diverses maneres de verificaci\u00f3, se us redirigir\u00e0 a aquesta p\u00e0gina de nou fins que compliu tots els criteris de verificaci\u00f3.
+Display_RecoverVerificationChoice=Seleccioneu un dels m\u00e8todes seg\u00fcents per verificar la vostra identitat. Tingueu en compte que, si l'administrador exigeix diversos m\u00e8todes de verificaci\u00f3, tornareu a aquesta p\u00e0gina fins que compliu tots els criteris de comprovaci\u00f3.
 Display_RecoverTokenSendChoices=Per verificar la seva identitat, se li enviar\u00e0 un codi de seguretat. Tri\u00ef el m\u00e8tode pel qual prefereix rebre'l.
 Display_RecoverTokenSendChoiceEmail=Enviar el codi al seu correu electr\u00f2nic registrat.
 Display_RecoverTokenSendChoiceSMS=Enviar el codi al seu tel\u00e8fon m\u00f2bil amb un missatge de text (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Introdueixi les respostes de seguretat
 Display_SelectionIndicator=Seleccioni una pregunta de la llista
 Display_SearchCompleted=Cerca finalitzada.
 Display_SearchResultsInfo=S'han retornat %1% resultats en %2%.
-Display_SearchResultsExceeded=Els resultats de la cerca han superat la mida de cerca m\u00e0xima.
+Display_SearchResultsExceeded=Els resultats de la cerca han superat la mida de cerca m\u00e0xima
 Display_SetRandomPasswordPrompt=Vol establir una contrasenya aleat\u00f2ria nova per a aquest usuari?
-Display_SearchResultsNone=Cap resultat.
+Display_SearchResultsNone=No hi ha cap resultat
 Display_Second=segon
 Display_Seconds=segons
 Display_SetupHelpdeskResponses=<p>L'administrador necessita que proporcioneu les seg\u00fcents respostes. Aquestes respostes s'utilitzen per verificar la vostra identitat en cas que contacteu amb el servei d'assist\u00e8ncia.</p>
@@ -161,16 +161,18 @@ Display_SetupRequiredResponses=
 Display_SetupResponses=<p>Si oblida la contrasenya, pot accedir al seu compte responent les preguntes de seguretat.</p><p>Tri\u00ef les preguntes i les respostes que cal utilitzar per verificar la seva identitat en cas que oblidi la contrasenya. Com que les respostes a aquestes preguntes es poden utilitzar per accedir al seu compte, asseguri's que d\u00f3na respostes que no s\u00f3n f\u00e0cils d'endevinar ni de descobrir. </p>
 Display_SetupOtpSecret=Si oblida la contrasenya, pot accedir al compte utilitzant el seu dispositiu m\u00f2bil. Segueixi les instruccions seg\u00fcents en funci\u00f3 del tipus de dispositiu.
 Display_SetupOtp_Android_Title=Android
-Display_SetupOtp_Android_Steps=<b>Instal\u00b7li l'aplicaci\u00f3 Google Authenticator per a Android.</b><ol><li>Al tel\u00e8fon, vagi al Google Play Store.</li><li>Cerqui <b>Google Authenticator</b>.<br/>(<a target\="playstore" href\="https\://play.google.com/store/apps/details?id\=com.google.android.apps.authenticator2">Baixi'l del Google Play Store</a>)</li><li>Baixi i instal\u00b7li l'aplicaci\u00f3.</li></ol><b>Despr\u00e9s, obri i configuri el Google Authenticator.</b><ol><li>Al Google Authenticator, toqui Men\u00fa i seleccioni "Configura el compte".</li><li>Seleccioni "Escanejar un codi de barres".</li><li>Utilitzi la c\u00e0mera del tel\u00e8fon per escanejar el codi de barres.</li><li>Quan hagi escanejat el codi de barres, cliqui el bot\u00f3 Continua.</li></ol>
+Display_SetupOtp_Android_Steps=<b>Instal\u00b7li l'aplicaci\u00f3 Google Authenticator per a l'Android.</b><ol><li>Al tel\u00e8fon, vagi al Google Play Store.</li><li>Cerqui <b>Google Authenticator</b>.<br/>(<a target\="playstore" href\="https\://play.google.com/store/apps/details?id\=com.google.android.apps.authenticator2">Baixi'l del Google Play Store</a>)</li><li>Baixi i instal\u00b7li l'aplicaci\u00f3.</li></ol><b>Despr\u00e9s, obri i configuri el Google Authenticator.</b><ol><li>Al Google Authenticator, toqui Men\u00fa i seleccioni "Configura el compte".</li><li>Seleccioni "Escanejar un codi de barres".</li><li>Utilitzi la c\u00e0mera del tel\u00e8fon per escanejar el codi de barres.</li><li>Quan hagi escanejat el codi de barres, cliqui el bot\u00f3 Continua.</li></ol>
 Display_SetupOtp_iPhone_Title=iPhone
 Display_SetupOtp_iPhone_Steps=<b>A l'iPhone, toqui la icona de l'App Store.</b><ol><li>Al tel\u00e8fon, vagi a l'App Store.</li><li>Cerqui <b>Google Authenticator</b>.<br/>(<a target\="itunesstore" href\="https\://itunes.apple.com/us/app/google-authenticator/id388497605?mt\=8">Baixi'l de l'App Store</a>)</li><li>Toqui l'aplicaci\u00f3 i despr\u00e9s toqui Gratis per baixar-la i instal\u00b7lar-la.</li></ol><b>Despr\u00e9s, obri i configuri el Google Authenticator.</b><ol><li>Al Google Authenticator, toqui "+" i despr\u00e9s "Escanejar un codi de barres".</li><li>Utilitzi la c\u00e0mera del tel\u00e8fon per escanejar el codi de barres.</li><li>Quan hagi escanejat el codi de barres, cliqui el bot\u00f3 Continua.</li></ol>
 Display_SetupOtp_Other_Title=Altres
-Display_SetupOtp_Other_Steps=<b>Trobi una aplicaci\u00f3 compatible de dos factors.</b><ul><li>Intenti cercar a la botiga d'aplicacions del seu dispositiu <b>Google Authenticator</b>.<br/>Molts dispositius tenen aplicacions compatibles.</li><li>Intenti buscar una aplicaci\u00f3 que admeti "<b>testimonis de seguretat TOTP"</b> o "RFC6238"</li><li>Baixi i instal\u00b7li l'aplicaci\u00f3.</li></ul><b>Despr\u00e9s, obri i configuri l'aplicaci\u00f3.</b><ol><li>Introdueixi les dades d'aqu\u00ed sota o escanegi el codi segons les instruccions de l'aplicaci\u00f3.</li><li>Quan hagi configurat l'aplicaci\u00f3, cliqui el bot\u00f3 Continua.</li></ol>
+Display_SetupOtp_Other_Steps=<b>Trobi una aplicaci\u00f3 compatible de dos factors.</b><ul><li>Intenti cercar <b>Google Authenticator</b> a la botiga d'aplicacions del seu dispositiu.<br/>Molts dispositius tenen aplicacions compatibles.</li><li>Intenti buscar una aplicaci\u00f3 que admeti "<b>testimonis de seguretat TOTP"</b> o "RFC6238"</li><li>Baixi i instal\u00b7li l'aplicaci\u00f3.</li></ul><b>Despr\u00e9s, obri i configuri l'aplicaci\u00f3.</b><ol><li>Introdueixi les dades d'aqu\u00ed sota o escanegi el codi segons les instruccions de l'aplicaci\u00f3.</li><li>Quan hagi configurat l'aplicaci\u00f3, cliqui el bot\u00f3 Continua.</li></ol>
+
+
 Display_TokenDestination=Destinaci\u00f3 del testimoni
-Display_TokenResend=El vostre codi de seguretat hauria d'arribar aviat. Si ja ha passat una estona i encara no heu rebut cap codi, feu clic al bot\u00f3 Torna a enviar el codi per rebre'n un de nou.
+Display_TokenResend=El seu codi de seguretat hauria d'arribar aviat. Si ja ha passat una estona i encara no ha rebut cap codi, faci clic al bot\u00f3 Torna a enviar el codi per rebre'n un de nou.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Ja heu inscrit el dispositiu el dia <span class\="timestamp">%1%</span>. Podeu provar el vostre dispositiu actual escrivint el codi generat aqu\u00ed sota. Si continueu, podeu tornar a configurar el dispositiu actual.
+Display_WarnExistingOtpSecretTime=Ja heu inscrit el vostre dispositiu (<span class="timestamp">%1%</span>). Podeu provar el dispositiu actual tocant el codi que s'ha generat a continuaci\u00f3. Si continueu, podreu tornar a configurar-lo.
 Display_WarnExistingOtpSecret=Ja ha inscrit el tel\u00e8fon. Pot provar el seu dispositiu actual escrivint el codi generat aqu\u00ed sota. Si continua, pot tornar a configurar el dispositiu actual.
 Display_WarnExistingResponseTime=Ja ha configurat les preguntes desafiament/resposta el <span class\="timestamp">%1%</span>. Si continua, pot tornar a respondre les preguntes.
 Display_WarnExistingResponse=Ja ha configurat les preguntes desafiament/resposta. Si continua, pot tornar a respondre les preguntes.
@@ -269,7 +271,7 @@ Long_Title_Shortcuts=Dreceres personalitzades.
 Long_Title_UpdateProfile=Actualitzar les dades del perfil d'usuari.
 Long_Title_UserEventHistory=Historial d'esdeveniments de la contrasenya. Miri quan ha canviat la contrasenya en el passat.
 Long_Title_UserInformation=Informaci\u00f3 sobre la contrasenya i sobre la pol\u00edtica de contrasenyes.
-Long_Title_DeleteAccount=Suprimiu el compte i el perfil d'aquest servei
+Long_Title_DeleteAccount=Suprimir el compte i el perfil d'aquest servei
 Long_Title_VerificationSend=Abans de poder seleccionar aquest usuari, cal verificar-ne la identitat. Seleccioni un m\u00e8tode de verificaci\u00f3.
 Title_AnsweredQuestions=Preguntes amb resposta
 Title_ActivateUser=Activa el compte
@@ -320,7 +322,7 @@ Title_DeleteAccount=Suprimeix el meu compte
 Title_Management=Administraci\u00f3
 Title_DirectReports=Informes directes
 Title_Organization=Organitzaci\u00f3
-Tooltip_PasswordStrength=El mesurador de la seguretat de la contrasenya mostra fins a quin punt \u00e9s f\u00e0cil d'endevinar. Segueixi aquests consells per refor\u00e7ar la contrasenya\:<ul><li>Allargui la contrasenya</li><li>No repeteixi lletres ni n\u00fameros</li><li>Barregi maj\u00fascules i min\u00fascules</li><li>Afegeixi m\u00e9s n\u00fameros</li><li>Afegeixi m\u00e9s s\u00edmbols</li></ul>
+Tooltip_PasswordStrength=L'indicador de seguretat de la contrasenya mostra amb quina facilitat es pot endevinar. Seguiu les instruccions seg\u00fcents per crear una contrasenya m\u00e9s segura\:<ul><li>Feu que sigui m\u00e9s llarga.</li><li>No repetiu cap lletra ni n\u00famero.</li><li>Feu servir maj\u00fascules i min\u00fascules.</li><li>Afegiu-hi m\u00e9s n\u00fameros.</li><li>Afegiu-hi m\u00e9s s\u00edmbols.</li></ul>
 Confirm_DeleteUser=Segur que vol procedir? Si continua, l'usuari seleccionat s'eliminar\u00e0 definitivament. Aquesta acci\u00f3 no es pot desfer.
 Confirm=Segur que vol procedir?
 Value_False=Fals

+ 5 - 5
src/main/resources/password/pwm/i18n/Display_da.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Angiv f\u00f8lgende data. Dette er p\u00e5kr\u00e6vet
 Display_CheckingData=Kontrollerer data ...
 Display_CheckingPassword=Kontrollerer adgangskode ...
 Display_CheckingResponses=Kontrollerer svar ...
+Display_ClientDisconnect=Kunne ikke kommunikere med serveren.
 Display_CommunicationError=Kunne ikke kommunikere med serveren. Forts\u00e6t, n\u00e5r du er klar.
 Display_ConfirmResponses=S\u00f8rg for, at dine sp\u00f8rgsm\u00e5l og svar er korrekte. Kontroll\u00e9r stavem\u00e5de og tegns\u00e6tning. Hvis du ikke kan huske din adgangskode, kan du f\u00e5 adgang til din konto, hvis du besvarer disse sikkerhedssp\u00f8rgsm\u00e5l.
 Display_Day=dag
@@ -132,7 +132,7 @@ Display_PleaseWait=Indl\u00e6ser ...
 Display_PleaseWaitNewUser=Din nye konto konfigureres. Denne proces kan tage et par minutter. Vent et \u00f8jeblik.
 Display_PleaseWaitPassword=Din adgangskode \u00e6ndres. Denne proces kan tage et par minutter. Vent et \u00f8jeblik.
 Display_Random=Tilf\u00e6ldig
-Display_RecoverVerificationChoice=V\u00e6lg en af f\u00f8lgende metoder for at bekr\u00e6fte din identitet. Bem\u00e6rk! Hvis din administrator kr\u00e6ver flere former for bekr\u00e6ftelse, omdirigeres du til denne side, indtil alle bekr\u00e6ftelseskriterier er opfyldt.
+Display_RecoverVerificationChoice=V\u00e6lg en af f\u00f8lgende metoder til at bekr\u00e6fte din identitet. Bem\u00e6rk\: Hvis din administrator kr\u00e6ver flere former for bekr\u00e6ftelse, omdirigeres du til denne side, indtil alle bekr\u00e6ftelseskriterier er opfyldt.
 Display_RecoverTokenSendChoices=Der sendes en sikkerhedskode til dig for at bekr\u00e6fte din identitet. V\u00e6lg, hvilken metode du foretr\u00e6kker at modtage sikkerhedskoden med.
 Display_RecoverTokenSendChoiceEmail=Send koden til din registrerede e-mailadresse.
 Display_RecoverTokenSendChoiceSMS=Send koden til din mobiltelefon via sms.
@@ -150,7 +150,7 @@ Display_ResponsesPrompt=Skriv dine sikkerhedssvar
 Display_SelectionIndicator=V\u00e6lg et sp\u00f8rgsm\u00e5l p\u00e5 listen
 Display_SearchCompleted=S\u00f8gningen er gennemf\u00f8rt.
 Display_SearchResultsInfo=Returnerede %1% resultater p\u00e5 %2%.
-Display_SearchResultsExceeded=S\u00f8geresultaterne overskred maksimumst\u00f8rrelsen for s\u00f8gninger
+Display_SearchResultsExceeded=S\u00f8geresultaterne overskrider maksimumst\u00f8rrelsen for s\u00f8gninger
 Display_SetRandomPasswordPrompt=Vil du angive en ny tilf\u00e6ldig adgangskode for denne bruger?
 Display_SearchResultsNone=Ingen resultater
 Display_Second=sekund
@@ -170,7 +170,7 @@ Display_TokenDestination=Tokendestination
 Display_TokenResend=Du b\u00f8r modtage din sikkerhedskode med det samme. Hvis du har ventet et stykket id og endnu ikke har modtaget koden, skal du klikke p\u00e5 knappen Send igen for at f\u00e5 tilsendt en ny kode.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Du har allerede tilmeldt din enhed p\u00e5 <span class\="timestamp">%1%</span>. Du kan teste din aktuelle enhed ved at skrive den genererede kode herunder. Hvis du forts\u00e6tter, kan du konfigurere din aktuelle enhed igen.
+Display_WarnExistingOtpSecretTime=Du har allerede tilmeldt din enhed <span class="timestamp">%1%</span>. Du kan teste din aktuelle enhed ved at skrive den genererede kode herunder. Hvis du forts\u00e6tter, kan du konfigurere din aktuelle enhed igen.
 Display_WarnExistingOtpSecret=Du har allerede tilmeldt din enhed. Du kan teste din aktuelle enhed ved at skrive den genererede kode herunder. Hvis du forts\u00e6tter, kan du konfigurere din aktuelle enhed igen.
 Display_WarnExistingResponseTime=Du har allerede angivet dine verificeringssvar p\u00e5 <span class\="timestamp">%1%</span>. Hvis du forts\u00e6tter, kan du svare p\u00e5 sp\u00f8rgsm\u00e5lene igen.
 Display_WarnExistingResponse=Du har allerede angivet dine verificeringssvar. Hvis du forts\u00e6tter, kan du svare p\u00e5 sp\u00f8rgsm\u00e5lene igen.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Slet min konto
 Title_Management=Administration
 Title_DirectReports=Direkte rapporter
 Title_Organization=Organisation
-Tooltip_PasswordStrength=M\u00e5leren for adgangskodestyrken viser, hvor let det er at g\u00e6tte din adgangskode. Pr\u00f8v f\u00f8lgende for at g\u00f8re din adgangskode st\u00e6rkere\:<ul><li>G\u00f8r adgangskoden l\u00e6ngere</li><li>Gentag ikke bogstaver eller tal</li><li>Brug en blanding af store og sm\u00e5 bogstaver</li><li>Tilf\u00f8j flere tal</li><li>Tilf\u00f8j et eller flere symboler</li></ul>
+Tooltip_PasswordStrength=Adgangskodens styrke viser, hvor let det er at g\u00e6tte adgangskoden. Pr\u00f8v f\u00f8lgende for at g\u00f8re din adgangskode st\u00e6rkere\:<ul><li>G\u00f8r adgangskoden l\u00e6ngere</li><li>Undlad at gentage bogstaver eller tal</li><li>Brug blandede bogstaver (sm\u00e5 og store)</li><li>Tilf\u00f8j flere tal</li><li>Tilf\u00f8j flere symboler</li></ul>
 Confirm_DeleteUser=Er du sikker p\u00e5, at du vil forts\u00e6tte? Hvis du forts\u00e6tter, bliver den valgte bruger slettet permanent. Dette kan ikke fortrydes.
 Confirm=Er du sikker p\u00e5, at du vil forts\u00e6tte?
 Value_False=Falsk

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_de.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Geben Sie die folgenden Daten ein. Dieser Schritt ist
 Display_CheckingData=Daten werden gepr\u00fcft ...
 Display_CheckingPassword=Passwort wird gepr\u00fcft ...
 Display_CheckingResponses=Antworten werden gepr\u00fcft ...
+Display_ClientDisconnect=Kommunikation mit dem Server nicht m\u00f6glich.
 Display_CommunicationError=Kommunikation mit dem Server nicht m\u00f6glich. Fahren Sie fort, wenn die Kommunikation mit dem Server m\u00f6glich ist.
 Display_ConfirmResponses=Vergewissern Sie sich, dass die Antworten und Fragen richtig sind. \u00dcberpr\u00fcfen Sie die Rechtschreibung und Zeichensetzung. Wenn Sie Ihr Passwort vergessen, k\u00f6nnen Sie durch Beantworten dieser Sicherheitsfragen auf Ihr Konto zugreifen.
 Display_Day=Tag
@@ -132,7 +132,7 @@ Display_PleaseWait=Wird geladen ...
 Display_PleaseWaitNewUser=Das neue Konto wird konfiguriert. Dieser Vorgang kann einige Minuten dauern. Bitte gedulden Sie sich.
 Display_PleaseWaitPassword=Das Passwort wird ge\u00e4ndert. Dieser Vorgang kann einige Minuten dauern. Bitte gedulden Sie sich.
 Display_Random=Zufall
-Display_RecoverVerificationChoice=W\u00e4hlen Sie eine der folgenden Methoden zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t aus. Hinweis\: Wenn der Administrator mehrere \u00dcberpr\u00fcfungsarten anfordert, werden Sie wieder auf diese Seite geleitet, bis alle \u00dcberpr\u00fcfungskriterien erf\u00fcllt sind.
+Display_RecoverVerificationChoice=W\u00e4hlen Sie eine der folgenden Methoden zur Identit\u00e4ts\u00fcberpr\u00fcfung. Hinweis: Wenn Ihr Administrator mehrere Formen der Verifizierung fordert, werden Sie so oft zu dieser Seite zur\u00fcckgeleitet, bis alle Verifizierungskriterien erf\u00fcllt sind.
 Display_RecoverTokenSendChoices=Zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t wird Ihnen ein Sicherheitscode gesendet. W\u00e4hlen Sie aus, mit welcher Methode Sie den Sicherheitscode empfangen m\u00f6chten.
 Display_RecoverTokenSendChoiceEmail=Code an die registrierte Email-Adresse senden.
 Display_RecoverTokenSendChoiceSMS=Code in einer Textnachricht (SMS) an das Mobiltelefon senden.
@@ -150,7 +150,7 @@ Display_ResponsesPrompt=Geben Sie die Sicherheitsantworten ein
 Display_SelectionIndicator=W\u00e4hlen Sie ein Frageelement aus der Liste aus
 Display_SearchCompleted=Suche abgeschlossen.
 Display_SearchResultsInfo=%1% Ergebnisse in %2% zur\u00fcckgegeben.
-Display_SearchResultsExceeded=Die Suchergebnisse \u00fcberschreiten die maximale Suchgr\u00f6\u00dfe
+Display_SearchResultsExceeded=Suchergebnisse \u00fcberschreiten den maximalen Umfang f\u00fcr Suchanfragen
 Display_SetRandomPasswordPrompt=F\u00fcr diesen Benutzer ein neues Zufallspasswort festlegen?
 Display_SearchResultsNone=Keine Ergebnisse
 Display_Second=Sekunde
@@ -165,12 +165,12 @@ Display_SetupOtp_Android_Steps=<b>Installieren Sie die Google Authenticator-App
 Display_SetupOtp_iPhone_Title=iPhone
 Display_SetupOtp_iPhone_Steps=<b>Tippen Sie auf dem iPhone auf das App Store-Symbol.</b><ol><li>\u00d6ffnen Sie auf dem Mobiltelefon den App Store.</li><li>Suchen Sie nach <b>Google Authenticator</b>.<br/>(<a target\="itunesstore" href\="https\://itunes.apple.com/us/app/google-authenticator/id388497605?mt\=8">Aus dem App Store herunterladen</a>)</li><li>Tippen Sie auf die App und tippen Sie dann auf 'Kostenlos', um die App herunterzuladen und zu installieren.</li></ol><b>\u00d6ffnen und konfigurieren Sie dann Google Authenticator.</b><ol><li>Tippen Sie in Google Authenticator auf "+" und dann auf "Barcode scannen".</li><li>Scannen Sie den Barcode mit der Kamera des Mobiltelefons.</li><li>Klicken Sie nach dem Scannen des Barcodes auf die Schaltfl\u00e4che 'Weiter'.</li></ol>
 Display_SetupOtp_Other_Title=Sonstige
-Display_SetupOtp_Other_Steps=<b>Suchen Sie eine kompatible Zwei-Faktoren-App.</b><ul><li>Suchen Sie im App-Store Ihres Ger\u00e4ts nach <b>Google Authenticator</b>.<br/>F\u00fcr viele Ger\u00e4te sind kompatible Apps verf\u00fcgbar.</li><li>Suchen Sie nach einer App, die "<b>TOTP-Sicherheitstoken"</b> oder "RFC6238" unterst\u00fctzt</li><li> Laden Sie die Anwendung herunter und installieren Sie sie.</li></ul><b>\u00d6ffnen und konfigurieren Sie dann die App.</b><ol><li>Geben Sie die Daten unten ein oder scannen Sie den Code wie von der App angewiesen.</li><li>Klicken Sie nach der Konfiguration der App auf die Schaltfl\u00e4che 'Weiter'.</li></ol>
+Display_SetupOtp_Other_Steps=<b>Suchen Sie eine kompatible Zwei-Faktoren-App.</b><ul><li>Suchen Sie im App-Store Ihres Ger\u00e4ts nach <b>Google Authenticator</b>.<br/>F\u00fcr viele Ger\u00e4te sind kompatible Apps verf\u00fcgbar.</li><li>Suchen Sie nach einer App, die "<b>TOTP-Sicherheitstoken"</b> oder "RFC6238" unterst\u00fctzt.</li><li> Laden Sie die Anwendung herunter und installieren Sie sie.</li></ul><b>\u00d6ffnen und konfigurieren Sie dann die App.</b><ol><li>Geben Sie die Daten unten ein oder scannen Sie den Code wie von der App angewiesen.</li><li>Klicken Sie nach der Konfiguration der App auf die Schaltfl\u00e4che 'Weiter'.</li></ol>
 Display_TokenDestination=Token-Ziel
 Display_TokenResend=Der Sicherheitscode sollte kurz nach der Anforderung ankommen. Wenn Sie bereits eine gewisse Zeit gewartet haben und keinen Code erhalten haben, klicken Sie auf die Schaltfl\u00e4che 'Code neu senden', damit Ihnen ein neuer Code gesendet wird.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Sie haben das Ger\u00e4t bereits am <span class\="timestamp">%1%</span> registriert. Um das aktuelle Ger\u00e4t zu testen, geben Sie unten den generierten Code ein. Wenn Sie fortfahren, k\u00f6nnen Sie das aktuelle Ger\u00e4t neu konfigurieren.
+Display_WarnExistingOtpSecretTime=Sie haben das Ger\u00e4t bereits am/um <span class="timestamp">%1%</span> registriert.  Um Ihr aktuelles Ger\u00e4t zu testen, geben Sie unten den generierten Code ein. Wenn Sie fortfahren, k\u00f6nnen Sie das aktuelle Ger\u00e4t neu konfigurieren.
 Display_WarnExistingOtpSecret=Sie haben das Ger\u00e4t bereits registriert. Um Ihr aktuelles Ger\u00e4t zu testen, geben Sie unten den generierten Code ein. Wenn Sie fortfahren, k\u00f6nnen Sie das aktuelle Ger\u00e4t neu konfigurieren.
 Display_WarnExistingResponseTime=Sie haben die Sicherheitsantworten bereits am <span class\="timestamp">%1%</span> eingerichtet. Wenn Sie fortfahren, k\u00f6nnen Sie die Fragen neu beantworten.
 Display_WarnExistingResponse=Sie haben die Sicherheitsantworten bereits eingerichtet. Wenn Sie fortfahren, k\u00f6nnen Sie die Fragen neu beantworten.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Mein Konto l\u00f6schen
 Title_Management=Verwaltung
 Title_DirectReports=Direkt Unterstellte
 Title_Organization=Organisation
-Tooltip_PasswordStrength=Die Anzeige der Passwortst\u00e4rke gibt an, wie einfach das Passwort zu erraten ist. Befolgen Sie diese Tipps, um die Passwortst\u00e4rke zu verbessern\:<ul><li>Verwenden Sie ein l\u00e4ngeres Passwort.</li><li>Wiederholen Sie die Buchstaben und Zahlen nicht.</li><li>Verwenden Sie eine Kombination aus Gro\u00df- und Kleinbuchstaben.</li><li>F\u00fcgen Sie weitere Zahlen hinzu.</li><li>F\u00fcgen Sie weitere Symbolzeichen hinzu.</li></ul>
+Tooltip_PasswordStrength=Die Sicherheit des eingegebenen Passworts wird gemessen. Das Ergebnis zeigt an, wie leicht sich Ihr Passwort erraten l\u00e4sst. Wenden Sie folgende Tipps an, um ein sicheres Passwort zu erstellen\:<ul><li>W\u00e4hlen Sie ein langes Passwort.</li><li>Wiederholen Sie keine Buchstaben oder Zahlen.</li><li>Verwenden Sie Gro\u00df- und Kleinschreibung.</li><li>Verwenden Sie mehr Zahlen.</li><li>Verwenden Sie mehr Sonderzeichen.</li></ul>
 Confirm_DeleteUser=Sind Sie sicher, dass Sie fortfahren m\u00f6chten? Wenn Sie fortfahren, wird der ausgew\u00e4hlte Benutzer dauerhaft gel\u00f6scht. Dies kann nicht r\u00fcckg\u00e4ngig gemacht werden.
 Confirm=Weiter?
 Value_False=Falsch

+ 0 - 1
src/main/resources/password/pwm/i18n/Display_el.properties

@@ -205,7 +205,6 @@ Long_Title_UserEventHistory = \u0399\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc \
 Long_Title_UserInformation = \u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2 \u03c3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03b7\u03bd \u03c0\u03bf\u03bb\u03b9\u03c4\u03b9\u03ba\u03ae \u03c0\u03bf\u03c5 \u03b1\u03c6\u03bf\u03c1\u03ac \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2.
 Title_ActivateUser = \u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039b\u03bf\u03b3\u03b1\u03c1\u03b9\u03b1\u03c3\u03bc\u03bf\u03cd
 Title_Admin = \u0394\u03b9\u03b1\u03c7\u03b5\u03af\u03c1\u03b9\u03c3\u03b7
-Title_Application =
 Title_Captcha = \u0395\u03c0\u03b1\u03bb\u03ae\u03b8\u03b5\u03c5\u03c3\u03b7
 Title_ChangePassword = \u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2
 Title_ConfirmResponses = \u0395\u03c0\u03b9\u03b2\u03b5\u03b2\u03b1\u03af\u03c9\u03c3\u03b7 \u03b1\u03c0\u03b1\u03bd\u03c4\u03ae\u03c3\u03b5\u03c9\u03bd \u03ba\u03c9\u03b4\u03b9\u03ba\u03bf\u03cd \u03c0\u03c1\u03cc\u03c3\u03b2\u03b1\u03c3\u03b7\u03c2

+ 5 - 5
src/main/resources/password/pwm/i18n/Display_en_CA.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Please enter the following data. This is required to
 Display_CheckingData=Checking Data....
 Display_CheckingPassword=Checking Password....
 Display_CheckingResponses=Checking Answers....
+Display_ClientDisconnect=Unable to communicate with server.
 Display_CommunicationError=Unable to communicate with server. Continue when ready.
 Display_ConfirmResponses=Be sure your answers and questions are correct. Check the spelling and punctuation. If you are unable to remember your password, you will be able to access your account by supplying the answers to these security questions.
 Display_Day=day
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Please type your security answers
 Display_SelectionIndicator=Please select a question from the list
 Display_SearchCompleted=Search completed.
 Display_SearchResultsInfo=Returned %1% results in %2%.
-Display_SearchResultsExceeded=Search results exceeded maximum search size.
+Display_SearchResultsExceeded=Search results exceeded maximum search size
 Display_SetRandomPasswordPrompt=Set a new random password for this user?
-Display_SearchResultsNone=No results.
+Display_SearchResultsNone=No results
 Display_Second=second
 Display_Seconds=seconds
 Display_SetupHelpdeskResponses=<p>Your administrator requires you to supply the following answers. These answers are used to verify your identity in the event that you contact your Help Desk for assistance.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=Token Destination
 Display_TokenResend=Your security code should arrive right away. If you have waited for a while and haven't yet received a code, click the Resend Code button to receive a new code.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=You have already enrolled your device on <span class\="timestamp">%1%</span>. You can test your current device by typing in the generated code below. If you continue, you can reconfigure your current device.
+Display_WarnExistingOtpSecretTime=You have already enrolled your device on <span class="timestamp">%1%</span>. You can test your current device by typing in the generated code below. If you continue, you can re-configure your current device.
 Display_WarnExistingOtpSecret=You have already enrolled your device. You can test your current device by typing in the generated code below. If you continue, you can reconfigure your current device.
 Display_WarnExistingResponseTime=You have already set up your challenge/response answers on <span class\="timestamp">%1%</span>. If you continue, you can answer your questions again.
 Display_WarnExistingResponse=You have already set up your challenge/response answers. If you continue, you can answer your questions again.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Delete My Account
 Title_Management=Management
 Title_DirectReports=Direct Reports
 Title_Organization=Organization
-Tooltip_PasswordStrength=The password strength meter shows how easy it is to guess your password. Try the following to make your password stronger\:<ul><li>Make the password longer</li><li>Do not repeat letters or numbers</li><li>Use mixed-case letters (upper and lower case)</li><li>Add more numbers</li><li>Add more symbol characters</li></ul>
+Tooltip_PasswordStrength=The password strength meter shows how easy it is to guess your password. Try the following to make your password stronger\:<ul><li>Make the password longer</li><li>Do not repeat letters or numbers</li><li>Use mixed (upper- and lower- case) letters</li><li>Add more numbers</li><li>Add more symbol characters</li></ul>
 Confirm_DeleteUser=Are you sure you wish to proceed? If you continue, the selected user will be deleted permanently. This cannot be undone.
 Confirm=Are you sure you wish to proceed?
 Value_False=False

+ 16 - 16
src/main/resources/password/pwm/i18n/Display_es.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Introduzca los siguientes datos. Esto es necesario pa
 Display_CheckingData=Comprobando datos...
 Display_CheckingPassword=Comprobando contrase\u00f1a...
 Display_CheckingResponses=Comprobando respuestas...
+Display_ClientDisconnect=No es posible la comunicaci\u00f3n con el servidor.
 Display_CommunicationError=No es posible la comunicaci\u00f3n con el servidor. Contin\u00fae cuando est\u00e9 preparado.
 Display_ConfirmResponses=Aseg\u00farese de que sus preguntas y respuestas sean correctas, Compruebe la ortograf\u00eda y la puntuaci\u00f3n. Si no recuerda su contrase\u00f1a, podr\u00e1 acceder a su cuenta introduciendo las respuestas a estas preguntas de seguridad.
 Display_Day=d\u00eda
@@ -92,7 +92,7 @@ Display_ForgottenUsername=Introduzca la siguiente informaci\u00f3n. Esta informa
 Display_GuestRegistration=Para registrar una nueva cuenta de usuario guest, introduzca la siguiente informaci\u00f3n.
 Display_GuestUpdate=Para actualizar una cuenta de usuario guest, compruebe y modifique la siguiente informaci\u00f3n.
 Display_Helpdesk=Introduzca los datos de b\u00fasqueda del usuario.
-Display_HelpdeskOtpValidation=Indique al usuario que cargue su aplicaci\u00f3n de autenticaci\u00f3n m\u00f3vil y comparta la contrase\u00f1a actual.
+Display_HelpdeskOtpValidation=Indique al usuario que cargue su aplicaci\u00f3n de autenticaci\u00f3n m\u00f3vil y comparta el c\u00f3digo de seguridad actual.
 Display_Hour=hora
 Display_Hours=horas
 Display_IdleTimeout=Tiempo l\u00edmite de inactividad\:
@@ -122,8 +122,8 @@ Display_PasswordExpired=Su contrase\u00f1a ha caducado. Debe establecer una nuev
 Display_PasswordGeneration=Las siguientes contrase\u00f1as se han generado de forma aleatoria. Estas contrase\u00f1as se basan en palabras reales para que sea m\u00e1s f\u00e1cil recordarlas, pero se han modificado para que resulte dif\u00edcil adivinarlas.
 Display_PasswordNoExpire=Su contrase\u00f1a no tiene caducidad.
 Display_PasswordPrompt=Introduzca la nueva contrase\u00f1a
-Display_PasswordStrengthHigh=Seguridad\: <b>Fuerte</b>
-Display_PasswordStrengthLow=Seguridad\: <b>D\u00e9bil</b>
+Display_PasswordStrengthHigh=Seguridad\: <b>Alta</b>
+Display_PasswordStrengthLow=Seguridad\: <b>Baja</b>
 Display_PasswordStrengthMedium=Seguridad\: <b>Buena</b>
 Display_PasswordReplicationStatus=R\u00e9plica de contrase\u00f1a (progreso %1%)
 Display_PasswordWarn=<b>Su contrase\u00f1a caducar\u00e1 dentro de poco</b>. Cambie la contrase\u00f1a en breve para evitar problemas de acceso a este servicio. <br/><br/>Su contrase\u00f1a caducar\u00e1 el %1%.
@@ -132,7 +132,7 @@ Display_PleaseWait=Cargando...
 Display_PleaseWaitNewUser=Se est\u00e1 configurando su nueva cuenta. Este proceso puede tardar varios minutos; le rogamos tenga paciencia.
 Display_PleaseWaitPassword=Se est\u00e1 cambiando su contrase\u00f1a. Este proceso puede tardar varios minutos; le rogamos tenga paciencia.
 Display_Random=Aleatoria
-Display_RecoverVerificationChoice=Seleccione uno de los siguientes m\u00e9todos para verificar su identidad. Nota\: Si el administrador requiere varias formas de verificaci\u00f3n, se le dirigir\u00e1 de nuevo a esta p\u00e1gina hasta que se hayan cumplido todos los criterios de verificaci\u00f3n.
+Display_RecoverVerificationChoice=Seleccione uno de los siguientes m\u00e9todos para verificar su identidad. Nota\: Si el administrador requiere varias formas de verificaci\u00f3n, regresar\u00e1 a esta p\u00e1gina hasta que se hayan satisfecho  todos los criterios de verificaci\u00f3n.
 Display_RecoverTokenSendChoices=Se le enviar\u00e1 un c\u00f3digo de seguridad para verificar su identidad. Elija el m\u00e9todo por el que prefiere recibir su c\u00f3digo de seguridad.
 Display_RecoverTokenSendChoiceEmail=Enviar el c\u00f3digo a su direcci\u00f3n de correo electr\u00f3nico registrada.
 Display_RecoverTokenSendChoiceSMS=Enviar el c\u00f3digo a su tel\u00e9fono m\u00f3vil mediante mensaje de texto (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Introduzca sus respuestas de seguridad
 Display_SelectionIndicator=Seleccione una pregunta de la lista
 Display_SearchCompleted=B\u00fasqueda finalizada.
 Display_SearchResultsInfo=Se han obtenido %1% resultados en %2%.
-Display_SearchResultsExceeded=Los resultados de b\u00fasqueda superan el tama\u00f1o m\u00e1ximo de b\u00fasqueda
+Display_SearchResultsExceeded=Los resultados de b\u00fasqueda exceden el tama\u00f1o m\u00e1ximo de b\u00fasqueda permitido
 Display_SetRandomPasswordPrompt=\u00bfDesea establecer una nueva contrase\u00f1a aleatoria para este usuario?
-Display_SearchResultsNone=No se encontraron resultados
+Display_SearchResultsNone=No hay resultados
 Display_Second=segundo
 Display_Seconds=segundos
 Display_SetupHelpdeskResponses=<p>Su administrador requiere que proporcione las siguientes respuestas. Estas respuestas se utilizan para verificar su identidad en caso de que se comunique con el servicio de ayuda t\u00e9cnica para obtener asistencia.</p>
@@ -170,9 +170,9 @@ Display_TokenDestination=Destino del testigo
 Display_TokenResend=Su c\u00f3digo de seguridad debe llegar inmediatamente. Si lleva esperando un rato y a\u00fan no ha recibido un c\u00f3digo, haga clic en el bot\u00f3n Volver a enviar c\u00f3digo para recibir un c\u00f3digo nuevo.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Ya ha inscrito su dispositivo en <span class\="timestamp">%1%</span>. Puede probar su dispositivo actual introduciendo el c\u00f3digo generado a continuaci\u00f3n. Si contin\u00faa, puede volver a configurar su dispositivo actual.
+Display_WarnExistingOtpSecretTime=Ha inscrito su dispositivo el <span class="timestamp">%1%</span>. Puede probar el dispositivo actual introduciendo a continuaci\u00f3n el c\u00f3digo generado. Si contin\u00faa, puede volver a configurar el dispositivo actual.
 Display_WarnExistingOtpSecret=Ya ha inscrito su dispositivo. Puede probar su dispositivo actual introduciendo el c\u00f3digo generado a continuaci\u00f3n. Si contin\u00faa, puede volver a configurar su dispositivo actual.
-Display_WarnExistingResponseTime=Ya ha configurado su pregunta desaf\u00edo y sus respuestas en <span class\="timestamp">%1%</span>. Si contin\u00faa, podr\u00e1 volver a contestar sus preguntas.
+Display_WarnExistingResponseTime=Ya ha configurado sus respuestas a preguntas de seguridad el <span class\="timestamp">%1%</span>. Si contin\u00faa, podr\u00e1 volver a contestar sus preguntas.
 Display_WarnExistingResponse=Ya ha configurado su pregunta desaf\u00edo/respuestas. Si contin\u00faa, podr\u00e1 volver a contestar sus preguntas.
 Display_PleaseVerifyOtp=Introduzca el c\u00f3digo de verificaci\u00f3n de 6 d\u00edgitos del dispositivo. Si su dispositivo no est\u00e1 configurado para ofrecerle un c\u00f3digo de verificaci\u00f3n, regrese a la p\u00e1gina anterior y configure el dispositivo.
 Display_OtpRecoveryInfo=Cada uno de estos c\u00f3digos de recuperaci\u00f3n puede utilizarse exactamente una vez en caso de que no pueda acceder a su tel\u00e9fono. Aseg\u00farese de <a class\="pwm-link-print">imprimir esta p\u00e1gina</a> o anote estos c\u00f3digos y gu\u00e1rdelos en un lugar seguro.
@@ -202,18 +202,18 @@ Field_LastLoginTime=Hora de \u00faltima entrada
 Field_LastLoginTimeDelta=Diferencia horaria de \u00faltima entrada
 Field_LdapProfile=Perfil de LDAP
 Field_Location=Ubicaci\u00f3n
-Field_LogoutURL=URL para salir
+Field_LogoutURL=URL para salir de la sesi\u00f3n
 Field_Method=M\u00e9todo
 Field_NetworkAddress=Direcci\u00f3n de red
 Field_NetworkHost=Host de red
 Field_NewPassword=Contrase\u00f1a nueva
 Field_Option_Select=Seleccione una pregunta
 Field_Password=Contrase\u00f1a
-Field_PasswordExpirationTime=Hora de caducidad de la contrase\u00f1a
+Field_PasswordExpirationTime=Fecha/hora de caducidad de la contrase\u00f1a
 Field_PasswordExpired=Contrase\u00f1a caducada
 Field_PasswordLocked=Contrase\u00f1a bloqueada (detecci\u00f3n de intruso)
 Field_PasswordPreExpired=Contrase\u00f1a a punto de caducar
-Field_PasswordSetTime=Tiempo de establecimiento de la contrase\u00f1a
+Field_PasswordSetTime=Fecha/hora de establecimiento de la contrase\u00f1a
 Field_PasswordSetTimeDelta=Diferencia horaria de establecimiento de contrase\u00f1a
 Field_PasswordViolatesPolicy=Infringe la directiva de contrase\u00f1as
 Field_PasswordWithinWarningPeriod=Dentro del per\u00edodo de advertencia
@@ -233,7 +233,7 @@ Field_OTP_Secret=Secreto
 Field_OTP_Type=Tipo
 Field_OTP_RecoveryCodes=C\u00f3digos de recuperaci\u00f3n
 Field_OTP_Stored=OTP almacenada
-Field_OTP_Timestamp=Hora de almacenamiento de OTP
+Field_OTP_Timestamp=Fecha/hora de almacenamiento de OTP
 Field_VerificationMethodPreviousAuth=Autenticaci\u00f3n anterior
 Field_VerificationMethodToken=Verificaci\u00f3n por SMS/correo electr\u00f3nico
 Field_VerificationMethodOTP=Verificaci\u00f3n de dispositivo m\u00f3vil
@@ -305,14 +305,14 @@ Title_SecurityResponses=Respuestas de seguridad
 Title_SetupRandomResponses=Preguntas aleatorias
 Title_SetupRequiredResponses=Preguntas obligatorias
 Title_SetupResponses=Configurar preguntas de seguridad
-Title_SetupOtpSecret=Configurar autenticaci\u00f3n de aplicaciones m\u00f3viles
+Title_SetupOtpSecret=Configurar autenticaci\u00f3n con aplicaci\u00f3n m\u00f3vil
 Title_Shortcuts=Accesos directos
 Title_Status=Estado
 Title_Success=Correcto
 Title_UpdateProfile=Actualizar perfil
 Title_UpdateProfileConfirm=Confirmar datos del perfil
 Title_UserData=Mis datos
-Title_UserEventHistory=Historial de contrase\u00f1a
+Title_UserEventHistory=Historial de contrase\u00f1as
 Title_UserInformation=Mi cuenta
 Title_ValidateCode=Validar c\u00f3digo
 Title_VerificationSend=Seleccionar m\u00e9todo de verificaci\u00f3n
@@ -320,7 +320,7 @@ Title_DeleteAccount=Suprimir mi cuenta
 Title_Management=Gesti\u00f3n
 Title_DirectReports=Informes directos
 Title_Organization=Organizaci\u00f3n
-Tooltip_PasswordStrength=El medidor de seguridad de la contrase\u00f1a muestra lo f\u00e1cil que es adivinar su contrase\u00f1a. Pruebe lo siguiente para aumentar su seguridad\:<ul><li>Configure una contrase\u00f1a m\u00e1s larga.</li><li>No repita letras ni n\u00fameros.</li><li>Mezcle letras en may\u00fascula y min\u00fascula.</li><li>A\u00f1ada m\u00e1s n\u00fameros.</li><li>A\u00f1ada m\u00e1s caracteres de s\u00edmbolo.</li></ul>
+Tooltip_PasswordStrength=El medidor de nivel de seguridad de la contrase\u00f1a muestra lo f\u00e1cil que es averiguar su contrase\u00f1a. Pruebe las siguientes sugerencias para hacer su contrase\u00f1a m\u00e1s segura\:<ul><li>A\u00f1ada m\u00e1s caracteres a la contrase\u00f1a</li><li>No repita letras ni n\u00fameros</li><li>Use tanto letras en may\u00fascula como en min\u00fascula</li><li>A\u00f1ada m\u00e1s n\u00fameros</li><li>A\u00f1ada m\u00e1s caracteres de s\u00edmbolos</li></ul>
 Confirm_DeleteUser=\u00bfSeguro que desea continuar? Si contin\u00faa, el usuario seleccionado se suprimir\u00e1 de forma permanente. Esta acci\u00f3n no se puede deshacer.
 Confirm=\u00bfSeguro que desea continuar?
 Value_False=Falso

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_fr.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Entrez les donn\u00e9es suivantes. Elles serviront \u
 Display_CheckingData=V\u00e9rification des donn\u00e9es...
 Display_CheckingPassword=V\u00e9rification du mot de passe...
 Display_CheckingResponses=V\u00e9rification des r\u00e9ponses...
+Display_ClientDisconnect=Communication avec le serveur impossible.
 Display_CommunicationError=Communication avec le serveur impossible. Continuez lorsque vous \u00eates pr\u00eat.
 Display_ConfirmResponses=Veillez \u00e0 ce que vos questions et r\u00e9ponses soient correctes. V\u00e9rifiez l'orthographe et la ponctuation. Si vous oubliez votre mot de passe, vous pourrez acc\u00e9der \u00e0 votre compte en r\u00e9pondant \u00e0 ces questions de s\u00e9curit\u00e9.
 Display_Day=jour
@@ -95,7 +95,7 @@ Display_Helpdesk=Entrez les donn\u00e9es de recherche de l'utilisateur.
 Display_HelpdeskOtpValidation=Demandez \u00e0 l'utilisateur de charger son application d'authentification mobile et de partager le code secret actuel.
 Display_Hour=heure
 Display_Hours=heures
-Display_IdleTimeout=Timeout d'inactivit\u00e9\:
+Display_IdleTimeout=Timeout d'inactivit\u00e9 \:
 Display_IdleWarningMessage=Votre session est sur le point d'expirer. Cliquez n'importe o\u00f9 sur cette page pour qu'elle reste active.
 Display_IdleWarningTitle=Timeout d'inactivit\u00e9
 Display_JavascriptRequired=Javascript est requis pour afficher cette page.
@@ -132,7 +132,7 @@ Display_PleaseWait=Chargement...
 Display_PleaseWaitNewUser=Votre nouveau compte est en cours de configuration. Ce processus peut prendre quelques minutes, veuillez patienter.
 Display_PleaseWaitPassword=Votre mot de passe est en cours d'\u00e9dition. Ce processus peut prendre quelques minutes, veuillez patienter.
 Display_Random=Al\u00e9atoire
-Display_RecoverVerificationChoice=S\u00e9lectionnez l'une des m\u00e9thodes suivantes pour v\u00e9rifier votre identit\u00e9. Remarque \: si votre administrateur exige plusieurs formes de v\u00e9rification, vous serez redirig\u00e9 vers cette page jusqu'\u00e0 ce que tous les crit\u00e8res de v\u00e9rification soient remplis.
+Display_RecoverVerificationChoice=Veuillez s\u00e9lectionner l'une des m\u00e9thodes suivantes pour v\u00e9rifier votre identit\u00e9. Remarque \: si votre administrateur a activ\u00e9 la v\u00e9rification en plusieurs \u00e9tapes, vous serez redirig\u00e9 vers cette page jusqu'\u00e0 ce que tous les crit\u00e8res de v\u00e9rification soient remplis.
 Display_RecoverTokenSendChoices=Un code de s\u00e9curit\u00e9 vous sera envoy\u00e9 pour v\u00e9rifier votre identit\u00e9. Choisissez la m\u00e9thode qui vous convient le mieux pour recevoir votre code de s\u00e9curit\u00e9.
 Display_RecoverTokenSendChoiceEmail=Envoyer le code \u00e0 votre adresse \u00e9lectronique enregistr\u00e9e.
 Display_RecoverTokenSendChoiceSMS=Envoyer le code par message texte (SMS) sur votre t\u00e9l\u00e9phone mobile.
@@ -150,7 +150,7 @@ Display_ResponsesPrompt=Veuillez entrer vos r\u00e9ponses de s\u00e9curit\u00e9
 Display_SelectionIndicator=S\u00e9lectionnez une question dans la liste
 Display_SearchCompleted=Recherche effectu\u00e9e.
 Display_SearchResultsInfo=%1% r\u00e9sultats renvoy\u00e9s dans %2%.
-Display_SearchResultsExceeded=Les r\u00e9sultats de la recherche d\u00e9passent la taille maximale de la recherche
+Display_SearchResultsExceeded=Le nombre de r\u00e9sultats de recherche a d\u00e9pass\u00e9 le nombre maximum de recherches
 Display_SetRandomPasswordPrompt=Voulez-vous d\u00e9finir un nouveau mot de passe al\u00e9atoire pour cet utilisateur ?
 Display_SearchResultsNone=Aucun r\u00e9sultat
 Display_Second=seconde
@@ -170,7 +170,7 @@ Display_TokenDestination=Destination du jeton
 Display_TokenResend=Vous devriez recevoir imm\u00e9diatement votre code de s\u00e9curit\u00e9. Si vous attendez depuis un moment sans rien recevoir, cliquez sur le bouton Renvoyer pour en recevoir un nouveau.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique le <span class\="timestamp">%1%</span>. Vous pouvez tester votre p\u00e9riph\u00e9rique actuel en introduisant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
+Display_WarnExistingOtpSecretTime=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique sur <span class="timestamp">%1%</span>. Vous pouvez tester votre p\u00e9riph\u00e9rique actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
 Display_WarnExistingOtpSecret=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique. Vous pouvez tester votre appareil actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
 Display_WarnExistingResponseTime=Vous avez d\u00e9j\u00e0 configur\u00e9 vos questions/r\u00e9ponses de v\u00e9rification d'identit\u00e9 le  <span class\="timestamp">%1%</span>. Si vous continuez, vous pouvez de nouveau r\u00e9pondre \u00e0 vos questions.
 Display_WarnExistingResponse=Vous avez d\u00e9j\u00e0 configur\u00e9 vos questions/r\u00e9ponses de v\u00e9rification d'identit\u00e9. Si vous continuez, vous pouvez de nouveau r\u00e9pondre \u00e0 vos questions.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Supprimer mon compte
 Title_Management=Gestion
 Title_DirectReports=Subordonn\u00e9s directs
 Title_Organization=Organisation
-Tooltip_PasswordStrength=L'\u00e9valuation de la force du mot de passe indique la facilit\u00e9 avec laquelle votre mot de passe peut \u00eatre devin\u00e9. Essayez les astuces suivantes pour renforcer votre mot de passe\:<ul><li>Rallongez votre mot de passe</li><li>Ne r\u00e9p\u00e9tez pas les m\u00eames lettres ou chiffres.</li><li>Combinez des majuscules et des minuscules.</li><li>Ajoutez plus de chiffres.</li><li>Ajoutez plus de symboles.</li></ul>
+Tooltip_PasswordStrength=L'indicateur de complexit\u00e9 de mot de passe rend compte de la faiblesse de votre mot de passe. Veillez \u00e0 suivre les instructions suivantes pour renforcer votre mot de passe \:<ul><li>Utilisez un mot de passe plus long</li><li>Ne r\u00e9p\u00e9tez pas des lettres ou des nombres</li><li>Utilisez des lettres de casse diff\u00e9rente (majuscules et minuscules)</li><li>Ajoutez plus de chiffres</li><li>Ajoutez plus de symboles</li></ul>
 Confirm_DeleteUser=Voulez-vous vraiment continuer ?  Si vous poursuivez, l'utilisateur s\u00e9lectionn\u00e9 sera d\u00e9finitivement supprim\u00e9. Cette op\u00e9ration ne peut pas \u00eatre annul\u00e9e.
 Confirm=Voulez-vous vraiment continuer ?
 Value_False=Faux

+ 7 - 10
src/main/resources/password/pwm/i18n/Display_fr_CA.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Entrez les donn\u00e9es suivantes. Elles serviront \u
 Display_CheckingData=V\u00e9rification des donn\u00e9es...
 Display_CheckingPassword=V\u00e9rification du mot de passe...
 Display_CheckingResponses=V\u00e9rification des r\u00e9ponses...
+Display_ClientDisconnect=Impossible de communiquer avec le serveur.
 Display_CommunicationError=Communication avec le serveur impossible. Continuez lorsque vous \u00eates pr\u00eat.
 Display_ConfirmResponses=Veillez \u00e0 ce que vos questions et r\u00e9ponses soient correctes. V\u00e9rifiez l'orthographe et la ponctuation. Si vous oubliez votre mot de passe, vous pourrez acc\u00e9der \u00e0 votre compte en r\u00e9pondant \u00e0 ces questions de s\u00e9curit\u00e9.
 Display_Day=jour
@@ -95,7 +95,7 @@ Display_Helpdesk=Entrez les donn\u00e9es de recherche de l'utilisateur.
 Display_HelpdeskOtpValidation=Demandez \u00e0 l'utilisateur de charger son application d'authentification mobile et de partager le code secret actuel.
 Display_Hour=heure
 Display_Hours=heures
-Display_IdleTimeout=D\u00e9lai d'inactivit\u00e9\:
+Display_IdleTimeout=D\u00e9lai d'inactivit\u00e9\u00a0\:
 Display_IdleWarningMessage=Votre session est sur le point d'expirer. Cliquez n'importe o\u00f9 sur cette page pour qu'elle reste active.
 Display_IdleWarningTitle=D\u00e9lai d'inactivit\u00e9
 Display_JavascriptRequired=Javascript est requis pour afficher cette page.
@@ -132,7 +132,7 @@ Display_PleaseWait=Chargement...
 Display_PleaseWaitNewUser=Votre nouveau compte est en cours de configuration. Ce processus peut prendre quelques minutes, veuillez patienter.
 Display_PleaseWaitPassword=Votre mot de passe est en cours d'\u00e9dition. Ce processus peut prendre quelques minutes, veuillez patienter.
 Display_Random=Al\u00e9atoire
-Display_RecoverVerificationChoice=S\u00e9lectionnez l'une des m\u00e9thodes suivantes pour v\u00e9rifier votre identit\u00e9. Remarque \: si votre administrateur exige plusieurs formes de v\u00e9rification, vous serez redirig\u00e9 vers cette page jusqu'\u00e0 ce que tous les crit\u00e8res de v\u00e9rification soient remplis.
+Display_RecoverVerificationChoice=Veuillez s\u00e9lectionner une des m\u00e9thodes suivantes pour v\u00e9rifier votre identit\u00e9.  Note\u00a0\: Si votre administrateur exige plusieurs formes de v\u00e9rification, vous serez redirig\u00e9 vers cette page jusqu'\u00e0 ce que tous les crit\u00e8res soient remplis.
 Display_RecoverTokenSendChoices=Un code de s\u00e9curit\u00e9 vous sera envoy\u00e9 pour v\u00e9rifier votre identit\u00e9. Choisissez la m\u00e9thode qui vous convient le mieux pour recevoir votre code de s\u00e9curit\u00e9.
 Display_RecoverTokenSendChoiceEmail=Envoyer le code \u00e0 votre adresse \u00e9lectronique enregistr\u00e9e.
 Display_RecoverTokenSendChoiceSMS=Envoyer le code par messagerie texte (SMS) sur votre t\u00e9l\u00e9phone mobile.
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Veuillez entrer vos r\u00e9ponses de s\u00e9curit\u00e9
 Display_SelectionIndicator=S\u00e9lectionnez un \u00e9l\u00e9ment de question dans la liste
 Display_SearchCompleted=Recherche effectu\u00e9e.
 Display_SearchResultsInfo=%1% r\u00e9sultats renvoy\u00e9s dans %2%.
-Display_SearchResultsExceeded=Les r\u00e9sultats de la recherche d\u00e9passent la taille maximale de la recherche.
+Display_SearchResultsExceeded=Les r\u00e9sultats de recherche d\u00e9passaient la taille de recherche maximale
 Display_SetRandomPasswordPrompt=Voulez-vous d\u00e9finir un nouveau mot de passe al\u00e9atoire pour cet utilisateur?
-Display_SearchResultsNone=Aucun r\u00e9sultat.
+Display_SearchResultsNone=Aucun r\u00e9sultat
 Display_Second=seconde
 Display_Seconds=secondes
 Display_SetupHelpdeskResponses=<p>Votre administrateur exige que vous indiquiez les r\u00e9ponses suivantes. Elles permettent de v\u00e9rifier votre identit\u00e9 si vous devez vous adresser au service d'assistance pour obtenir de l'aide.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=Destination du jeton
 Display_TokenResend=Vous devriez recevoir imm\u00e9diatement votre code de s\u00e9curit\u00e9. Si vous attendez depuis un moment et n'avez rien re\u00e7u, cliquez sur le bouton Renvoyer un code pour recevoir un nouveau code.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique le <span class\="timestamp">%1%</span>. Vous pouvez tester votre p\u00e9riph\u00e9rique actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
+Display_WarnExistingOtpSecretTime=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique sur <span class="timestamp">%1%</span>.  Vous pouvez tester votre p\u00e9riph\u00e9rique en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous.  Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
 Display_WarnExistingOtpSecret=Vous avez d\u00e9j\u00e0 inscrit votre p\u00e9riph\u00e9rique. Vous pouvez tester votre p\u00e9riph\u00e9rique actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre p\u00e9riph\u00e9rique actuel.
 Display_WarnExistingResponseTime=Vous avez d\u00e9j\u00e0 configur\u00e9 vos questions et r\u00e9ponses de v\u00e9rification d'identit\u00e9 le  <span class\="timestamp">%1%</span>. Si vous continuez, vous pouvez de nouveau r\u00e9pondre \u00e0 vos questions.
 Display_WarnExistingResponse=Vous avez d\u00e9j\u00e0 configur\u00e9 vos questions et r\u00e9ponses de v\u00e9rification d'identit\u00e9. Si vous continuez, vous pouvez de nouveau r\u00e9pondre \u00e0 vos questions.
@@ -274,7 +274,6 @@ Long_Title_VerificationSend=Avant de pouvoir s\u00e9lectionner cet utilisateur,
 Title_AnsweredQuestions=Questions auxquelles vous avez r\u00e9pondu
 Title_ActivateUser=Activer le compte
 Title_Admin=Administration
-Title_Application=R\u00e9initialisation du libre-service de mot de passe
 Title_Captcha=V\u00e9rification
 Title_ChangePassword=\u00c9diter le mot de passe
 Title_ConfirmResponses=Confirmer les questions de s\u00e9curit\u00e9
@@ -310,8 +309,6 @@ Title_SetupOtpSecret=Configurer l'authentification de l'application mobile
 Title_Shortcuts=Raccourcis
 Title_Status=\u00c9tat
 Title_Success=R\u00e9ussite
-Title_TitleBarAuthenticated=@User\:ID@ Libre-service de mot de passe
-Title_TitleBar=Libre-service de mot de passe
 Title_UpdateProfile=Mettre \u00e0 jour le profil
 Title_UpdateProfileConfirm=Confirmer les donn\u00e9es du profil
 Title_UserData=Mes donn\u00e9es
@@ -323,7 +320,7 @@ Title_DeleteAccount=Supprimer mon compte
 Title_Management=Gestion
 Title_DirectReports=Subordonn\u00e9s directs
 Title_Organization=Organisation
-Tooltip_PasswordStrength=L'\u00e9valuation de la force du mot de passe indique la facilit\u00e9 avec laquelle votre mot de passe peut \u00eatre devin\u00e9. Essayez les astuces suivantes pour renforcer votre mot de passe\:<ul><li>Rallongez votre mot de passe</li><li>Ne r\u00e9p\u00e9tez pas les m\u00eames lettres ou chiffres.</li><li>Combinez des majuscules et des minuscules.</li><li>Ajoutez plus de chiffres.</li><li>Ajoutez plus de symboles.</li></ul>
+Tooltip_PasswordStrength=L'indicateur de fiabilit\u00e9 de mot de passe signale \u00e0 quel point il est facile de deviner votre mot de passe. Essayez ce qui suit pour renforcer votre mot de passe\u00a0\:<ul><li>Allongez votre mot de passe</li><li>Ne r\u00e9p\u00e9tez pas les lettres ni les chiffres</li><li>Utilisez des lettres majuscules et minuscules</li><li>Ajoutez des chiffres</li><li>Ajoutez des caract\u00e8res symboliques</li></ul>
 Confirm_DeleteUser=Voulez-vous vraiment continuer?  Si vous poursuivez, l'utilisateur s\u00e9lectionn\u00e9 sera d\u00e9finitivement supprim\u00e9. Cette op\u00e9ration ne peut pas \u00eatre annul\u00e9e.
 Confirm=Voulez-vous vraiment continuer?
 Value_False=Faux

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_it.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Immettere i dati seguenti. L'operazione \u00e8 necess
 Display_CheckingData=Controllo dati in corso\u2026
 Display_CheckingPassword=Controllo password in corso\u2026
 Display_CheckingResponses=Controllo risposte in corso\u2026
+Display_ClientDisconnect=Impossibile comunicare con il server.
 Display_CommunicationError=Impossibile comunicare con il server. Quando si \u00e8 pronti, continuare.
 Display_ConfirmResponses=Verificare che risposte e domande siano corrette. Controllare ortografia e punteggiatura. Se si dimentica la password, sar\u00e0 possibile accedere al proprio account rispondendo a queste domande di sicurezza.
 Display_Day=giorno
@@ -132,7 +132,7 @@ Display_PleaseWait=Caricamento in corso\u2026
 Display_PleaseWaitNewUser=\u00c8 in corso la configurazione del nuovo account. La procedura potrebbe richiedere alcuni minuti. Si prega di attendere.
 Display_PleaseWaitPassword=\u00c8 in corso la modifica della password. La procedura potrebbe richiedere alcuni minuti. Si prega di attendere.
 Display_Random=Casuale
-Display_RecoverVerificationChoice=Per verificare la propria identit\u00e0, selezionare uno dei metodi seguenti. Nota\: se l'amministratore richiede pi\u00f9 forme di verifica, l'utente verr\u00e0 reindirizzato a questa pagina fino a quando non soddisfa tutti i criteri di verifica.
+Display_RecoverVerificationChoice=Per verificare la propria identit\u00e0, selezionare uno dei metodi seguenti. Nota\: se l'amministratore richiede pi\u00f9 forme di verifica, l'utente verr\u00e0 reindirizzato a questa pagina fino a quando tutti i criteri non saranno soddisfatti.
 Display_RecoverTokenSendChoices=All'utente verr\u00e0 inviato un codice di sicurezza per verificarne l'identit\u00e0. Scegliere il metodo desiderato per la ricezione del codice di sicurezza.
 Display_RecoverTokenSendChoiceEmail=Inviare il codice all'indirizzo e-mail dell'utente registrato.
 Display_RecoverTokenSendChoiceSMS=Inviare il codice al numero di cellulare dell'utente utilizzando un SMS.
@@ -150,7 +150,7 @@ Display_ResponsesPrompt=Digitare le risposte di sicurezza
 Display_SelectionIndicator=Selezionare una domanda dall'elenco
 Display_SearchCompleted=Ricerca completata.
 Display_SearchResultsInfo=Restituiti %1% risultati su %2%.
-Display_SearchResultsExceeded=I risultati della ricerca hanno superato la dimensione massima della ricerca
+Display_SearchResultsExceeded=I risultati hanno superato la dimensione massima di ricerca
 Display_SetRandomPasswordPrompt=Impostare una nuova password casuale per l'utente?
 Display_SearchResultsNone=Nessun risultato
 Display_Second=secondo
@@ -170,7 +170,7 @@ Display_TokenDestination=Destinazione token
 Display_TokenResend=Il codice di sicurezza dovrebbe arrivare immediatamente. Se dopo aver atteso il codice non \u00e8 stato ricevuto, fare clic sul pulsante Reinvia codice per ricevere un nuovo codice.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Il dispositivo \u00e8 gi\u00e0 stato registrato il <span class\="timestamp">%1%</span>. Per eseguire una prova del dispositivo attuale, digitare di seguito il codice generato. Continuando \u00e8 possibile riconfigurare il dispositivo attuale.
+Display_WarnExistingOtpSecretTime=Il dispositivo \u00e8 gi\u00e0 stato registrato su <span class="timestamp">%1%</span>. Per eseguire una prova del dispositivo attuale, digitare di seguito il codice generato. Continuando \u00e8 possibile riconfigurare il dispositivo attuale.
 Display_WarnExistingOtpSecret=Il dispositivo \u00e8 gi\u00e0 stato registrato. Per eseguire una prova del dispositivo attuale, digitare di seguito il codice generato. Continuando \u00e8 possibile riconfigurare il dispositivo attuale.
 Display_WarnExistingResponseTime=Le domande/risposte di autenticazione sono gi\u00e0 state impostate il <span class\="timestamp">%1%</span>. Continuando \u00e8 possibile rispondere nuovamente alle domande.
 Display_WarnExistingResponse=Le domande/risposte di autenticazione sono gi\u00e0 state impostate. Continuando \u00e8 possibile rispondere nuovamente alle domande.
@@ -212,7 +212,7 @@ Field_Password=Password
 Field_PasswordExpirationTime=Ora di scadenza della password
 Field_PasswordExpired=Password scaduta
 Field_PasswordLocked=Password bloccata (rilevamento di intrusione)
-Field_PasswordPreExpired=Pre-scadenza password
+Field_PasswordPreExpired=Password pre-scaduta
 Field_PasswordSetTime=Ora di impostazione della password
 Field_PasswordSetTimeDelta=Differenza ora di impostazione della password
 Field_PasswordViolatesPolicy=Viola la policy della password
@@ -320,7 +320,7 @@ Title_DeleteAccount=Cancella account personale
 Title_Management=Gestione
 Title_DirectReports=Rapporti diretti
 Title_Organization=Organizzazione
-Tooltip_PasswordStrength=L'indicatore di complessit\u00e0 indica se la password \u00e8 facile da indovinare o meno. Per aumentare il grado di complessit\u00e0 della password, seguire i suggerimenti riportati di seguito\:<ul><li>Creare una password pi\u00f9 lunga</li><li>Non ripetere lettere o numeri</li><li>Usare lettere maiuscole e minuscole</li><li>Aggiungere pi\u00f9 numeri</li><li>Aggiungere pi\u00f9 simboli</li></ul>
+Tooltip_PasswordStrength=Il misuratore di complessit\u00e0 della password mostra il grado di complessit\u00e0 della password dell'utente. Per rendere pi\u00f9 complessa la password, provare a\:<ul><li>Aumentare il numero di caratteri</li><li>Non ripetere lettere o numeri</li><li>Utilizzare lettere maiuscole e minuscole</li><li>Aggiungere altri numeri</li><li>Aggiungere altri simboli</li></ul>
 Confirm_DeleteUser=Continuare? Se si continua, l'utente selezionato verr\u00e0 eliminato definitivamente. L'operazione \u00e8 irreversibile.
 Confirm=Continuare?
 Value_False=Falso

+ 6 - 9
src/main/resources/password/pwm/i18n/Display_iw.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=\u05d4\u05d6\u05df \u05d0\u05ea \u05d4\u05e0\u05ea\u0
 Display_CheckingData=\u05d1\u05d5\u05d3\u05e7 \u05d0\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd...
 Display_CheckingPassword=\u05d1\u05d5\u05d3\u05e7 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4...
 Display_CheckingResponses=\u05d1\u05d5\u05d3\u05e7 \u05d0\u05ea \u05d4\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea...
+Display_ClientDisconnect=\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea \u05e2\u05dd \u05d4\u05e9\u05e8\u05ea.
 Display_CommunicationError=\u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d9\u05e6\u05d5\u05e8 \u05ea\u05e7\u05e9\u05d5\u05e8\u05ea \u05e2\u05dd \u05d4\u05e9\u05e8\u05ea.  \u05d4\u05de\u05e9\u05da \u05db\u05e9\u05ea\u05d4\u05d9\u05d4 \u05de\u05d5\u05db\u05df.
 Display_ConfirmResponses=\u05d5\u05d3\u05d0 \u05e9\u05d4\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea \u05d5\u05d4\u05e9\u05d0\u05dc\u05d5\u05ea \u05e9\u05e1\u05d9\u05e4\u05e7\u05ea \u05e0\u05db\u05d5\u05e0\u05d5\u05ea.  \u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d0\u05d9\u05d5\u05ea \u05d5\u05d4\u05e4\u05d9\u05e1\u05d5\u05e7.  \u05d0\u05dd \u05ea\u05e9\u05db\u05d7 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4, \u05ea\u05d5\u05db\u05dc \u05dc\u05d2\u05e9\u05ea \u05dc\u05d7\u05e9\u05d1\u05d5\u05e0\u05da \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05de\u05e2\u05e0\u05d4 \u05dc\u05e9\u05d0\u05dc\u05d5\u05ea \u05d0\u05d1\u05d8\u05d7\u05d4 \u05d0\u05dc\u05d4.
 Display_Day=\u05d9\u05d5\u05dd
@@ -132,7 +132,7 @@ Display_PleaseWait=\u05d8\u05d5\u05e2\u05df...
 Display_PleaseWaitNewUser=\u05d4\u05d7\u05e9\u05d1\u05d5\u05df \u05d4\u05d7\u05d3\u05e9 \u05e9\u05dc\u05da \u05e0\u05de\u05e6\u05d0 \u05d1\u05ea\u05d4\u05dc\u05d9\u05da \u05d4\u05d2\u05d3\u05e8\u05d4. \u05ea\u05d4\u05dc\u05d9\u05da \u05d6\u05d4 \u05e2\u05e9\u05d5\u05d9 \u05dc\u05d4\u05d9\u05de\u05e9\u05da \u05de\u05e1\u05e4\u05e8 \u05d3\u05e7\u05d5\u05ea, \u05e0\u05d0 \u05d4\u05ea\u05d0\u05d6\u05e8 \u05d1\u05e1\u05d1\u05dc\u05e0\u05d5\u05ea.
 Display_PleaseWaitPassword=\u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da \u05e0\u05de\u05e6\u05d0\u05ea \u05d1\u05ea\u05d4\u05dc\u05d9\u05da \u05e9\u05d9\u05e0\u05d5\u05d9. \u05ea\u05d4\u05dc\u05d9\u05da \u05d6\u05d4 \u05e2\u05e9\u05d5\u05d9 \u05dc\u05d4\u05d9\u05de\u05e9\u05da \u05de\u05e1\u05e4\u05e8 \u05d3\u05e7\u05d5\u05ea, \u05e0\u05d0 \u05d4\u05ea\u05d0\u05d6\u05e8 \u05d1\u05e1\u05d1\u05dc\u05e0\u05d5\u05ea.
 Display_Random=\u05d0\u05e7\u05e8\u05d0\u05d9
-Display_RecoverVerificationChoice=\u05d1\u05d7\u05e8 \u05d1\u05d0\u05d7\u05ea \u05de\u05d4\u05e9\u05d9\u05d8\u05d5\u05ea \u05dc\u05d4\u05dc\u05df \u05db\u05d3\u05d9 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da.  \u05d4\u05e2\u05e8\u05d4\: \u05d0\u05dd \u05de\u05e0\u05d4\u05dc \u05d4\u05de\u05e2\u05e8\u05db\u05ea \u05d3\u05d5\u05e8\u05e9 \u05e9\u05d9\u05de\u05d5\u05e9 \u05d1\u05de\u05e1\u05e4\u05e8 \u05e6\u05d5\u05e8\u05d5\u05ea \u05d0\u05d9\u05de\u05d5\u05ea, \u05ea\u05e0\u05d5\u05ea\u05d1 \u05d1\u05d7\u05d6\u05e8\u05d4 \u05dc\u05d3\u05e3 \u05d6\u05d4 \u05e2\u05d3 \u05e9\u05db\u05dc \u05e7\u05e8\u05d9\u05d8\u05e8\u05d9\u05d5\u05e0\u05d9 \u05d4\u05d0\u05d9\u05de\u05d5\u05ea \u05d9\u05de\u05d5\u05dc\u05d0\u05d5.
+Display_RecoverVerificationChoice=\u05d1\u05d7\u05e8 \u05d0\u05d7\u05ea \u05de\u05d4\u05e9\u05d9\u05d8\u05d5\u05ea \u05dc\u05d4\u05dc\u05df \u05db\u05d3\u05d9 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da.  \u05d4\u05e2\u05e8\u05d4\: \u05d0\u05dd \u05de\u05e0\u05d4\u05dc \u05d4\u05de\u05e2\u05e8\u05db\u05ea \u05d3\u05d5\u05e8\u05e9 \u05de\u05e1\u05e4\u05e8 \u05e6\u05d5\u05e8\u05d5\u05ea \u05d0\u05d9\u05de\u05d5\u05ea, \u05ea\u05d5\u05e4\u05e0\u05d4 \u05d7\u05d6\u05e8\u05d4 \u05dc\u05d3\u05e3 \u05d6\u05d4 \u05e2\u05d3 \u05d0\u05e9\u05e8 \u05ea\u05de\u05dc\u05d0 \u05d0\u05d7\u05e8 \u05db\u05dc \u05e7\u05e8\u05d9\u05d8\u05e8\u05d9\u05d5\u05e0\u05d9 \u05d4\u05d0\u05d9\u05de\u05d5\u05ea.
 Display_RecoverTokenSendChoices=\u05d9\u05d9\u05e9\u05dc\u05d7 \u05d0\u05dc\u05d9\u05da \u05e7\u05d5\u05d3 \u05d0\u05d1\u05d8\u05d7\u05d4 \u05db\u05d3\u05d9 \u05dc\u05d0\u05de\u05ea \u05d0\u05ea \u05d6\u05d4\u05d5\u05ea\u05da.  \u05d1\u05d7\u05e8 \u05d0\u05ea \u05d4\u05e9\u05d9\u05d8\u05d4 \u05d4\u05de\u05d5\u05e2\u05d3\u05e4\u05ea \u05e2\u05dc\u05d9\u05da \u05dc\u05e7\u05d1\u05dc\u05ea \u05e7\u05d5\u05d3 \u05d4\u05d0\u05d1\u05d8\u05d7\u05d4.
 Display_RecoverTokenSendChoiceEmail=\u05e9\u05dc\u05d7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05dc\u05db\u05ea\u05d5\u05d1\u05ea \u05d4\u05d3\u05d5\u05d0\u05e8 \u05d4\u05d0\u05dc\u05e7\u05d8\u05e8\u05d5\u05e0\u05d9 \u05d4\u05e8\u05e9\u05d5\u05de\u05d4 \u05e9\u05dc\u05da.
 Display_RecoverTokenSendChoiceSMS=\u05e9\u05dc\u05d7 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3 \u05dc\u05d8\u05dc\u05e4\u05d5\u05df \u05d4\u05e0\u05d9\u05d9\u05d3 \u05e9\u05dc\u05da \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05e2\u05d1\u05e8\u05ea \u05d4\u05d5\u05d3\u05e2\u05d5\u05ea \u05d8\u05e7\u05e1\u05d8 (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=\u05d4\u05e7\u05dc\u05d3 \u05d0\u05ea \u05ea\u05e9\u05d5
 Display_SelectionIndicator=\u05d1\u05d7\u05e8 \u05e4\u05e8\u05d9\u05d8 \u05e9\u05d0\u05dc\u05d4 \u05de\u05ea\u05d5\u05da \u05d4\u05e8\u05e9\u05d9\u05de\u05d4
 Display_SearchCompleted=\u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d5\u05e9\u05dc\u05dd.
 Display_SearchResultsInfo=\u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05d7\u05d6\u05d9\u05e8 %1% \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d1-%2%.
-Display_SearchResultsExceeded=\u05de\u05e1\u05e4\u05e8 \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d7\u05e8\u05d2 \u05de\u05d4\u05d2\u05d5\u05d3\u05dc \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05dc\u05d9.
+Display_SearchResultsExceeded=\u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d7\u05e8\u05d2\u05d5 \u05de\u05d2\u05d5\u05d3\u05dc \u05d4\u05d7\u05d9\u05e4\u05d5\u05e9 \u05d4\u05de\u05e7\u05e1\u05d9\u05de\u05dc\u05d9
 Display_SetRandomPasswordPrompt=\u05d4\u05d0\u05dd \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05dc\u05de\u05e9\u05ea\u05de\u05e9 \u05d6\u05d4 \u05e1\u05d9\u05e1\u05de\u05d4 \u05d0\u05e7\u05e8\u05d0\u05d9\u05ea \u05d7\u05d3\u05e9\u05d4?
-Display_SearchResultsNone=\u05d0\u05d9\u05df \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea.
+Display_SearchResultsNone=\u05d0\u05d9\u05df \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea
 Display_Second=\u05e9\u05e0\u05d9\u05d4
 Display_Seconds=\u05e9\u05e0\u05d9\u05d5\u05ea
 Display_SetupHelpdeskResponses=<p>\u05de\u05e0\u05d4\u05dc \u05d4\u05de\u05e2\u05e8\u05db\u05ea \u05d3\u05d5\u05e8\u05e9 \u05e9\u05ea\u05e1\u05e4\u05e7 \u05d0\u05ea \u05d4\u05ea\u05e9\u05d5\u05d1\u05d5\u05ea \u05d4\u05d1\u05d0\u05d5\u05ea.  \u05ea\u05e9\u05d5\u05d1\u05d5\u05ea \u05d0\u05dc\u05d4 \u05de\u05e9\u05de\u05e9\u05d5\u05ea \u05dc\u05d0\u05d9\u05de\u05d5\u05ea \u05d6\u05d4\u05d5\u05ea\u05da \u05d1\u05de\u05e7\u05e8\u05d4 \u05e9\u05dc \u05e4\u05e0\u05d9\u05d9\u05d4 \u05dc\u05e6\u05d5\u05d5\u05ea \u05d4\u05ea\u05de\u05d9\u05db\u05d4 \u05dc\u05e7\u05d1\u05dc\u05ea \u05e1\u05d9\u05d5\u05e2.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=\u05d9\u05e2\u05d3 \u05d4\u05d0\u05e1\u05d9\u05de\u05d5
 Display_TokenResend=\u05e7\u05d5\u05d3 \u05d4\u05d0\u05d1\u05d8\u05d7\u05d4 \u05d0\u05de\u05d5\u05e8 \u05dc\u05d4\u05d2\u05d9\u05e2 \u05de\u05d9\u05d3.  \u05d0\u05dd \u05e2\u05d1\u05e8\u05d5 \u05db\u05de\u05d4 \u05d3\u05e7\u05d5\u05ea \u05d5\u05d8\u05e8\u05dd \u05e7\u05d9\u05d1\u05dc\u05ea \u05e7\u05d5\u05d3, \u05dc\u05d7\u05e5 \u05e2\u05dc \u05d4\u05dc\u05d7\u05e6\u05df '\u05e9\u05dc\u05d7 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d3' \u05db\u05d3\u05d9 \u05dc\u05e7\u05d1\u05dc \u05e7\u05d5\u05d3 \u05d7\u05d3\u05e9.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=\u05e8\u05e9\u05de\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d1\u05ea\u05d0\u05e8\u05d9\u05da <span class\="timestamp">%1%</span>.  \u05ea\u05d5\u05db\u05dc \u05dc\u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05e7\u05dc\u05d3\u05ea \u05d4\u05e7\u05d5\u05d3 \u05e9\u05e0\u05d5\u05e6\u05e8 \u05dc\u05d4\u05dc\u05df.  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9.
+Display_WarnExistingOtpSecretTime=\u05e8\u05e9\u05de\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d1\u05ea\u05d0\u05e8\u05d9\u05da <span class="timestamp">%1%</span>.  \u05ea\u05d5\u05db\u05dc \u05dc\u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05e7\u05dc\u05d3\u05ea \u05d4\u05e7\u05d5\u05d3 \u05e9\u05e0\u05d5\u05e6\u05e8 \u05dc\u05d4\u05dc\u05df.  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9.
 Display_WarnExistingOtpSecret=\u05e8\u05e9\u05de\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df.  \u05ea\u05d5\u05db\u05dc \u05dc\u05d1\u05d3\u05d5\u05e7 \u05d0\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05e2\u05dc-\u05d9\u05d3\u05d9 \u05d4\u05e7\u05dc\u05d3\u05ea \u05d4\u05e7\u05d5\u05d3 \u05e9\u05e0\u05d5\u05e6\u05e8 \u05dc\u05d4\u05dc\u05df.  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05ea\u05d5\u05db\u05dc \u05dc\u05d4\u05d2\u05d3\u05d9\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d0\u05ea \u05ea\u05e6\u05d5\u05e8\u05ea \u05d4\u05d4\u05ea\u05e7\u05df \u05d4\u05e0\u05d5\u05db\u05d7\u05d9.
 Display_WarnExistingResponseTime=\u05d4\u05d2\u05d3\u05e8\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05ea\u05e9\u05d5\u05d1\u05d5\u05ea \u05d4\u05d0\u05ea\u05d2\u05e8/\u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05e9\u05dc\u05da \u05d1\u05ea\u05d0\u05e8\u05d9\u05da <span class\="timestamp">%1%</span>.  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05ea\u05d5\u05db\u05dc \u05dc\u05e2\u05e0\u05d5\u05ea \u05de\u05d7\u05d3\u05e9 \u05e2\u05dc \u05d4\u05e9\u05d0\u05dc\u05d5\u05ea.
 Display_WarnExistingResponse=\u05d4\u05d2\u05d3\u05e8\u05ea \u05db\u05d1\u05e8 \u05d0\u05ea \u05ea\u05e9\u05d5\u05d1\u05d5\u05ea \u05d4\u05d0\u05ea\u05d2\u05e8/\u05d4\u05ea\u05d2\u05d5\u05d1\u05d4 \u05e9\u05dc\u05da.  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05ea\u05d5\u05db\u05dc \u05dc\u05e2\u05e0\u05d5\u05ea \u05de\u05d7\u05d3\u05e9 \u05e2\u05dc \u05d4\u05e9\u05d0\u05dc\u05d5\u05ea.
@@ -274,7 +274,6 @@ Long_Title_VerificationSend=\u05dc\u05e4\u05e0\u05d9 \u05e9\u05e0\u05d9\u05ea\u0
 Title_AnsweredQuestions=\u05e9\u05d0\u05dc\u05d5\u05ea \u05e9\u05e0\u05e2\u05e0\u05d5
 Title_ActivateUser=\u05d4\u05e4\u05e2\u05dc\u05ea \u05d7\u05e9\u05d1\u05d5\u05df
 Title_Admin=\u05e0\u05d9\u05d4\u05d5\u05dc
-Title_Application=Self Service Password Reset
 Title_Captcha=\u05d0\u05d9\u05de\u05d5\u05ea
 Title_ChangePassword=\u05e9\u05d9\u05e0\u05d5\u05d9 \u05e1\u05d9\u05e1\u05de\u05d4
 Title_ConfirmResponses=\u05d0\u05d9\u05e9\u05d5\u05e8 \u05e9\u05d0\u05dc\u05d5\u05ea \u05d0\u05d1\u05d8\u05d7\u05d4
@@ -310,8 +309,6 @@ Title_SetupOtpSecret=\u05d4\u05d2\u05d3\u05e8\u05ea \u05d0\u05d9\u05de\u05d5\u05
 Title_Shortcuts=\u05e7\u05d9\u05e6\u05d5\u05e8\u05d9 \u05d3\u05e8\u05da
 Title_Status=\u05e1\u05d8\u05d8\u05d5\u05e1
 Title_Success=\u05d4\u05e6\u05dc\u05d7\u05d4
-Title_TitleBarAuthenticated=@User\:ID@  \u05e1\u05d9\u05e1\u05de\u05d0\u05d5\u05ea \u05d1\u05e9\u05d9\u05e8\u05d5\u05ea \u05e2\u05e6\u05de\u05d9
-Title_TitleBar=\u05e1\u05d9\u05e1\u05de\u05d0\u05d5\u05ea \u05d1\u05e9\u05d9\u05e8\u05d5\u05ea \u05e2\u05e6\u05de\u05d9
 Title_UpdateProfile=\u05e2\u05d3\u05db\u05d5\u05df \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc
 Title_UpdateProfileConfirm=\u05d0\u05d9\u05e9\u05d5\u05e8 \u05e0\u05ea\u05d5\u05e0\u05d9 \u05e4\u05e8\u05d5\u05e4\u05d9\u05dc
 Title_UserData=\u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05e9\u05dc\u05d9
@@ -323,7 +320,7 @@ Title_DeleteAccount=\u05de\u05d7\u05d9\u05e7\u05ea \u05d4\u05d7\u05e9\u05d1\u05d
 Title_Management=\u05e0\u05d9\u05d4\u05d5\u05dc
 Title_DirectReports=\u05d3\u05d5\u05d7\u05d5\u05ea \u05d9\u05e9\u05d9\u05e8\u05d9\u05dd
 Title_Organization=\u05d0\u05e8\u05d2\u05d5\u05df
-Tooltip_PasswordStrength=\u05de\u05d3 \u05d7\u05d5\u05d6\u05e7 \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05de\u05e8\u05d0\u05d4 \u05e2\u05d3 \u05db\u05de\u05d4 \u05e7\u05dc \u05dc\u05e0\u05d7\u05e9 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da.  \u05e0\u05e1\u05d4 \u05dc\u05d1\u05e6\u05e2 \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05d4\u05d1\u05d0\u05d5\u05ea \u05db\u05d3\u05d9 \u05dc\u05d4\u05e4\u05d5\u05da \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da \u05dc\u05d7\u05d6\u05e7\u05d4 \u05d9\u05d5\u05ea\u05e8\:<ul><li>\u05d4\u05e4\u05d5\u05da \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05dc\u05d0\u05e8\u05d5\u05db\u05d4 \u05d9\u05d5\u05ea\u05e8</li><li>\u05d0\u05dc \u05ea\u05d7\u05d6\u05d5\u05e8 \u05e2\u05dc \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8\u05d9\u05dd</li><li>\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e2\u05dd \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea \u05de\u05e2\u05d5\u05e8\u05d1\u05d5\u05ea (\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea/\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea)</li><li>\u05d4\u05d5\u05e1\u05e3 \u05e2\u05d5\u05d3 \u05de\u05e1\u05e4\u05e8\u05d9\u05dd</li><li>\u05d4\u05d5\u05e1\u05e3 \u05e2\u05d5\u05d3 \u05ea\u05d5\u05d5\u05d9 \u05e1\u05d9\u05de\u05e0\u05d9\u05dd</li></ul>
+Tooltip_PasswordStrength=\u05de\u05d3 \u05d7\u05d5\u05d6\u05e7 \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05de\u05e8\u05d0\u05d4 \u05db\u05de\u05d4 \u05e7\u05dc \u05dc\u05e0\u05d7\u05e9 \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da. \u05e0\u05e1\u05d4 \u05dc\u05d1\u05e6\u05e2 \u05d0\u05ea \u05d4\u05e4\u05e2\u05d5\u05dc\u05d5\u05ea \u05dc\u05d4\u05dc\u05df \u05db\u05d3\u05d9 \u05dc\u05d4\u05e4\u05d5\u05da \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05e9\u05dc\u05da \u05dc\u05d7\u05d6\u05e7\u05d4 \u05d9\u05d5\u05ea\u05e8\:<ul><li>\u05d4\u05e4\u05d5\u05da \u05d0\u05ea \u05d4\u05e1\u05d9\u05e1\u05de\u05d4 \u05dc\u05d0\u05e8\u05d5\u05db\u05d4 \u05d9\u05d5\u05ea\u05e8</li><li>\u05d0\u05dc \u05ea\u05d7\u05d6\u05d5\u05e8 \u05e2\u05dc \u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05d0\u05d5 \u05de\u05e1\u05e4\u05e8\u05d9\u05dd</li><li>\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e2\u05dd \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea \u05de\u05e2\u05d5\u05e8\u05d1\u05d5\u05ea (\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e8\u05d9\u05e9\u05d9\u05d5\u05ea \u05d5\u05d0\u05d5\u05ea\u05d9\u05d5\u05ea \u05e7\u05d8\u05e0\u05d5\u05ea)</li><li>\u05d4\u05d5\u05e1\u05e3 \u05e2\u05d5\u05d3 \u05de\u05e1\u05e4\u05e8\u05d9\u05dd</li><li>\u05d4\u05d5\u05e1\u05e3 \u05e2\u05d5\u05d3 \u05ea\u05d5\u05d5\u05d9 \u05e1\u05d9\u05de\u05e0\u05d9\u05dd</li></ul>
 Confirm_DeleteUser=\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da?  \u05d0\u05dd \u05ea\u05de\u05e9\u05d9\u05da, \u05d4\u05de\u05e9\u05ea\u05de\u05e9 \u05e9\u05e0\u05d1\u05d7\u05e8 \u05d9\u05d9\u05de\u05d7\u05e7 \u05dc\u05e6\u05de\u05d9\u05ea\u05d5\u05ea.  \u05dc\u05d0 \u05e0\u05d9\u05ea\u05df \u05dc\u05d1\u05d8\u05dc \u05e4\u05e2\u05d5\u05dc\u05d4 \u05d6\u05d5.
 Confirm=\u05d4\u05d0\u05dd \u05d0\u05ea\u05d4 \u05d1\u05d8\u05d5\u05d7 \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05da \u05dc\u05d4\u05de\u05e9\u05d9\u05da?
 Value_False=False

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_ja.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u305
 Display_CheckingData=\u30c7\u30fc\u30bf\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059...
 Display_CheckingPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059...
 Display_CheckingResponses=\u56de\u7b54\u3092\u78ba\u8a8d\u3057\u3066\u3044\u307e\u3059....
+Display_ClientDisconnect=\u30b5\u30fc\u30d0\u3068\u901a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002
 Display_CommunicationError=\u30b5\u30fc\u30d0\u3068\u901a\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002\u6e96\u5099\u304c\u3067\u304d\u305f\u3089\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Display_ConfirmResponses=\u56de\u7b54\u3068\u8cea\u554f\u304c\u6b63\u3057\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u7db4\u308a\u3084\u53e5\u8aad\u70b9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306e\u56de\u7b54\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u3059\u3002
 Display_Day=\u65e5
@@ -132,7 +132,7 @@ Display_PleaseWait=\u30ed\u30fc\u30c9\u4e2d...
 Display_PleaseWaitNewUser=\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
 Display_PleaseWaitPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306b\u306f\u6570\u5206\u304b\u304b\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u304a\u5f85\u3061\u304f\u3060\u3055\u3044\u3002
 Display_Random=\u30e9\u30f3\u30c0\u30e0
-Display_RecoverVerificationChoice=\u6b21\u306e\u672c\u4eba\u78ba\u8a8d\u306e\u65b9\u6cd5\u304b\u30891\u3064\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u30e1\u30e2\: \u7ba1\u7406\u8005\u306b\u3088\u308a\u8907\u6570\u306e\u65b9\u6cd5\u306b\u3088\u308b\u78ba\u8a8d\u304c\u6c42\u3081\u3089\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u78ba\u8a8d\u306e\u57fa\u6e96\u304c\u3059\u3079\u3066\u6e80\u305f\u3055\u308c\u308b\u307e\u3067\u3053\u306e\u30da\u30fc\u30b8\u306b\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u307e\u3059\u3002
+Display_RecoverVerificationChoice=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u6b21\u306e\u3044\u305a\u308c\u304b\u306e\u65b9\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6ce8\: \u7ba1\u7406\u8005\u306b\u3088\u3063\u3066\u8907\u6570\u306e\u78ba\u8a8d\u65b9\u6cd5\u304c\u5fc5\u8981\u3068\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u78ba\u8a8d\u6761\u4ef6\u3092\u6e80\u305f\u3059\u307e\u3067\u3001\u3053\u306e\u30da\u30fc\u30b8\u306b\u518d\u3073\u30ea\u30c0\u30a4\u30ec\u30af\u30c8\u3055\u308c\u307e\u3059\u3002
 Display_RecoverTokenSendChoices=\u672c\u4eba\u78ba\u8a8d\u306e\u305f\u3081\u306b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u53d7\u3051\u53d6\u308b\u65b9\u6cd5\u3092\u3001\u6b21\u306e\u4e2d\u304b\u30891\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Display_RecoverTokenSendChoiceEmail=\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306b\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
 Display_RecoverTokenSendChoiceSMS=\u30c6\u30ad\u30b9\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8(SMS)\u3067\u643a\u5e2f\u96fb\u8a71\u306b\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u3078\u
 Display_SelectionIndicator=\u30ea\u30b9\u30c8\u304b\u3089\u8cea\u554f\u9805\u76ee\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
 Display_SearchCompleted=\u691c\u7d22\u304c\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
 Display_SearchResultsInfo=%2% \u3067 %1% \u500b\u306e\u7d50\u679c\u304c\u8fd4\u3055\u308c\u307e\u3057\u305f\u3002
-Display_SearchResultsExceeded=\u691c\u7d22\u7d50\u679c\u304c\u6700\u5927\u691c\u7d22\u30b5\u30a4\u30ba\u3092\u8d85\u3048\u307e\u3057\u305f\u3002
+Display_SearchResultsExceeded=\u691c\u7d22\u7d50\u679c\u304c\u6700\u5927\u691c\u7d22\u30b5\u30a4\u30ba\u3092\u8d85\u3048\u3066\u3044\u307e\u3059
 Display_SetRandomPasswordPrompt=\u3053\u306e\u30e6\u30fc\u30b6\u306e\u65b0\u3057\u3044\u30e9\u30f3\u30c0\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u304b?
-Display_SearchResultsNone=\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Display_SearchResultsNone=\u7d50\u679c\u306a\u3057
 Display_Second=\u79d2
 Display_Seconds=\u79d2
 Display_SetupHelpdeskResponses=<p>\u7ba1\u7406\u8005\u304c\u6b21\u306e\u56de\u7b54\u306e\u5165\u529b\u3092\u8981\u6c42\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u56de\u7b54\u306f\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u554f\u3044\u5408\u308f\u305b\u308b\u969b\u306e\u672c\u4eba\u78ba\u8a8d\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=\u30c8\u30fc\u30af\u30f3\u306e\u5b9b\u5148
 Display_TokenResend=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u304c\u9593\u3082\u306a\u304f\u9001\u4fe1\u3055\u308c\u307e\u3059\u3002\u3057\u3070\u3089\u304f\u5f85\u3063\u3066\u3082\u30b3\u30fc\u30c9\u3092\u53d7\u4fe1\u3057\u306a\u3044\u5834\u5408\u306f\u3001\uff3b\u30b3\u30fc\u30c9\u306e\u518d\u9001\u4fe1\uff3d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u65b0\u3057\u3044\u30b3\u30fc\u30c9\u3092\u304a\u53d7\u3051\u53d6\u308a\u304f\u3060\u3055\u3044\u3002
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306f\u3001\u3059\u3067\u306b <span class\="timestamp">%1%</span> \u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u751f\u6210\u3055\u308c\u305f\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
+Display_WarnExistingOtpSecretTime=\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306f\u3001<span class="timestamp">%1%</span> \u306b\u3059\u3067\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u751f\u6210\u3055\u308c\u305f\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
 Display_WarnExistingOtpSecret=\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306f\u3001\u3059\u3067\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u751f\u6210\u3055\u308c\u305f\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u30c6\u30b9\u30c8\u3067\u304d\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u73fe\u5728\u4f7f\u7528\u3057\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
 Display_WarnExistingResponseTime=\u3059\u3067\u306b <span class\="timestamp">%1%</span> \u3067\u79d8\u5bc6\u306e\u8cea\u554f\u306e\u7b54\u3048\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u8cea\u554f\u306b\u5bfe\u3059\u308b\u7b54\u3048\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
 Display_WarnExistingResponse=\u3059\u3067\u306b\u79d8\u5bc6\u306e\u8cea\u554f\u306e\u7b54\u3048\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u8cea\u554f\u306b\u5bfe\u3059\u308b\u7b54\u3048\u3092\u518d\u8a2d\u5b9a\u3067\u304d\u307e\u3059\u3002
@@ -320,7 +320,7 @@ Title_DeleteAccount=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u524a\u9664
 Title_Management=\u7ba1\u7406
 Title_DirectReports=\u30c0\u30a4\u30ec\u30af\u30c8\u30ec\u30dd\u30fc\u30c8
 Title_Organization=\u7d44\u7e54
-Tooltip_PasswordStrength=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6\u30e1\u30fc\u30bf\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u63a8\u6e2c\u306e\u5bb9\u6613\u3055\u3092\u793a\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6\u3092\u4e0a\u3052\u308b\u305f\u3081\u306b\u6b21\u306e\u5bfe\u7b56\u3092\u8b1b\u3058\u3066\u304f\u3060\u3055\u3044\:<ul><li>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u3088\u308a\u9577\u304f\u3057\u307e\u3059\u3002</li><li>\u82f1\u5b57\u307e\u305f\u306f\u6570\u5b57\u3092\u7e70\u308a\u8fd4\u3055\u306a\u3044\u3088\u3046\u306b\u3057\u307e\u3059\u3002</li><li>\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u7d44\u307f\u5408\u308f\u305b\u307e\u3059\u3002</li><li>\u6570\u5b57\u3092\u5897\u3084\u3057\u307e\u3059\u3002</li><li>\u8a18\u53f7\u3092\u5897\u3084\u3057\u307e\u3059\u3002</li></ul>
+Tooltip_PasswordStrength=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6\u30e1\u30fc\u30bf\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u3069\u308c\u307b\u3069\u7c21\u5358\u306b\u63a8\u6e2c\u3067\u304d\u308b\u304b\u3092\u793a\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u3055\u3089\u306b\u5f37\u529b\u306b\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u3053\u3068\u3092\u8a66\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\:<ul><li>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u9577\u304f\u3059\u308b</li><li>\u6587\u5b57\u3084\u6570\u5b57\u3092\u7e70\u308a\u8fd4\u3055\u306a\u3044</li><li>\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u7d44\u307f\u5408\u308f\u305b\u308b</li><li>\u6570\u5b57\u3092\u5897\u3084\u3059</li><li>\u8a18\u53f7\u3092\u5897\u3084\u3059</li></ul>
 Confirm_DeleteUser=\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f\u7d9a\u884c\u3059\u308b\u3068\u3001\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u30e6\u30fc\u30b6\u30fc\u304c\u5b8c\u5168\u306b\u524a\u9664\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001\u5143\u306b\u623b\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002
 Confirm=\u7d9a\u884c\u3057\u307e\u3059\u304b?
 Value_False=\u507d

+ 14 - 10
src/main/resources/password/pwm/i18n/Display_nl.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,8 @@ Display_ChangePasswordForm=Voer de volgende gegevens in. Deze gegevens zijn vere
 Display_CheckingData=Gegevens controleren....
 Display_CheckingPassword=Wachtwoord controleren....
 Display_CheckingResponses=Antwoorden controleren....
+Display_ClientDisconnect=Er is geen verbinding met de server mogelijk.
+
 Display_CommunicationError=Er is geen verbinding met de server mogelijk. Ga verder wanneer u gereed bent.
 Display_ConfirmResponses=Zorg ervoor dat de vragen en antwoorden correct zijn. Controleer de spelling en leestekens. Als u uw wachtwoord bent vergeten, kunt u toegang krijgen tot uw account door de antwoorden op deze beveiligingsvragen op te geven.
 Display_Day=dag
@@ -96,6 +97,7 @@ Display_HelpdeskOtpValidation=Instrueer de gebruiker zijn mobiele verificatie-ap
 Display_Hour=uur
 Display_Hours=uur
 Display_IdleTimeout=Time-out na inactiviteit\:
+
 Display_IdleWarningMessage=Uw sessie staat op het punt een time-out te krijgen. Klik op een willekeurige plaats op deze pagina om de sessie te hervatten.
 Display_IdleWarningTitle=Time-out na inactiviteit
 Display_JavascriptRequired=Javascript is vereist om deze pagina weer te geven.
@@ -132,7 +134,7 @@ Display_PleaseWait=Laden...
 Display_PleaseWaitNewUser=Uw nieuwe account wordt geconfigureerd. Dit proces kan enkele minuten duren. Een ogenblik geduld.
 Display_PleaseWaitPassword=Uw wachtwoord wordt gewijzigd. Dit proces kan enkele minuten duren. Een ogenblik geduld.
 Display_Random=Willekeurig
-Display_RecoverVerificationChoice=Selecteer een van de hierna genoemde methoden om uw identiteit te verifi\u00ebren. Opmerking\: als uw beheerder meerdere vormen van verificatie vereist, wordt u opnieuw naar deze pagina doorgestuurd totdat u aan alle verificatiecriteria hebt voldaan.
+Display_RecoverVerificationChoice=Selecteer een van de volgende methoden om uw identiteit te verifi\u00ebren.  Opmerking\: als uw beheerder meerdere verificatiemethoden vereist, wordt u teruggestuurd naar deze pagina totdat aan alle verificatiecriteria is voldaan.
 Display_RecoverTokenSendChoices=Als u uw identiteit wilt verifi\u00ebren, wordt een beveiligingscode naar u verzonden. Geef aan op welke manier u uw beveiligingscode wilt ontvangen.
 Display_RecoverTokenSendChoiceEmail=Verzend de code naar uw geregistreerde e-mailadres.
 Display_RecoverTokenSendChoiceSMS=Verzend de code naar uw mobiele telefoon met tekstberichten (sms).
@@ -150,9 +152,11 @@ Display_ResponsesPrompt=Typ uw beveilingingsantwoorden
 Display_SelectionIndicator=Selecteer een vraag in de lijst
 Display_SearchCompleted=Zoekopdracht voltooid.
 Display_SearchResultsInfo=%1% resultaten geretourneerd in %2%.
-Display_SearchResultsExceeded=Zoekresultaten hebben maximale grootte voor zoekopdracht overschreden
+Display_SearchResultsExceeded=Zoekresultaten overschrijden de maximale grootte
+
 Display_SetRandomPasswordPrompt=Een nieuw willekeurig wachtwoord instellen voor deze gebruiker?
 Display_SearchResultsNone=Geen resultaten
+
 Display_Second=seconde
 Display_Seconds=seconden
 Display_SetupHelpdeskResponses=<p>Uw beheerder vereist dat u de volgende antwoorden opgeeft. Deze antwoorden worden gebruikt om uw identiteit te verifi\u00ebren in het geval dat u contact opneemt met uw helpdesk voor hulp.</p>
@@ -161,7 +165,7 @@ Display_SetupRequiredResponses=
 Display_SetupResponses=<p>Als u uw wachtwoord bent vergeten, kunt u toegang krijgen tot uw account door uw beveiligingsvragen te beantwoorden.</p><p>Kies uw vragen en antwoorden aan de hand waarvan uw identiteit kan worden geverifieerd als u uw wachtwoord bent vergeten. Omdat u met de antwoorden op deze vragen toegang kunt krijgen tot uw account, moet u antwoorden opgeven die niet gemakkelijk door anderen kunnen worden geraden of ontdekt.</p>
 Display_SetupOtpSecret=Als u uw wachtwoord bent vergeten, kunt u toegang krijgen tot uw account met behulp van uw mobiele apparaat. Volg de onderstaande instructies voor uw apparaattype.
 Display_SetupOtp_Android_Title=Android
-Display_SetupOtp_Android_Steps=<b>Installeer de app Google Authenticator voor Android.</b><ol><li>Ga op uw telefoon naar de Google Play Store.</li><li>Zoek naar <b>Google Authenticator</b>.<br/>(<a target\="playstore" href\="https\://play.google.com/store/apps/details?id\=com.google.android.apps.authenticator2">Download van de Google Play Store</a>)</li><li>Download en installeer de toepassing.</li></ol><b>Open Google Authenticator en en configureer de app vervolgens.</b><ol><li>Raak in Google Authenticator Menu aan en selecteer Account instellen.</li><li>Selecteer Barcode scannen.</li><li>Gebruik de camera van uw telefoon om deze barcode te scannen.</li><li>Zodra u de barcode hebt gescand, klikt u op de knop Doorgaan.</li></ol>
+Display_SetupOtp_Android_Steps=<b>Installeer de app Google Authenticator voor Android.</b><ol><li>Ga op uw telefoon naar de Google Play Store.</li><li>Zoek naar <b>Google Authenticator</b>.<br/>(<a target\="playstore" href\="https\://play.google.com/store/apps/details?id\=com.google.android.apps.authenticator2">Download van de Google Play Store</a>)</li><li>Download en installeer de toepassing.</li></ol><b>Open Google Authenticator en configureer de app vervolgens.</b><ol><li>Raak in Google Authenticator Menu aan en selecteer Account instellen.</li><li>Selecteer Barcode scannen.</li><li>Gebruik de camera van uw telefoon om deze barcode te scannen.</li><li>Zodra u de barcode hebt gescand, klikt u op de knop Doorgaan.</li></ol>
 Display_SetupOtp_iPhone_Title=iPhone
 Display_SetupOtp_iPhone_Steps=<b>Tik op uw iPhone op het pictogram App Store.</b><ol><li>Ga op uw telefoon naar de App Store.</li><li>Zoek naar <b>Google Authenticator</b>.<br/>(<a target\="itunesstore" href\="https\://itunes.apple.com/us/app/google-authenticator/id388497605?mt\=8">Download van de App Store</a>)</li><li>Tik op de app en tik vervolgens op Gratis om het programma te downloaden en te installeren.</li></ol><b>Open en configureer vervolgens Google Authenticator.</b><ol><li>Tik in Google Authenticator op "+" en vervolgens op "Barcode scannen."</li><li>Gebruik de camera van uw telefoon om deze barcode te scannen.</li><li>Zodra u de barcode hebt gescand, klikt u op de knop Doorgaan.</li></ol>
 Display_SetupOtp_Other_Title=Overig
@@ -170,7 +174,7 @@ Display_TokenDestination=Tokenbestemming
 Display_TokenResend=U moet uw beveiligingscode meteen ontvangen. Als u na enige tijd nog geen code hebt ontvangen, klikt u op de knop Opnieuw verzenden om een nieuwe code te ontvangen.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=U hebt uw apparaat al ingeschreven op <span class\="timestamp">%1%</span>. U kunt uw huidige apparaat testen door de gegenereerde code hieronder in te voeren. Als u doorgaat, kunt u uw huidige apparaat opnieuw configureren.
+Display_WarnExistingOtpSecretTime=U hebt uw apparaat al ingeschreven op <span class="timestamp">%1%</span>. U kunt uw huidige apparaat testen door de gegenereerde code hieronder te typen. Als u doorgaat, kunt u uw huidige apparaat opnieuw configureren.
 Display_WarnExistingOtpSecret=U hebt uw apparaat al ingeschreven. U kunt uw huidige apparaat testen door de gegenereerde code hieronder te typen. Als u doorgaat, kunt u uw huidige apparaat configureren.
 Display_WarnExistingResponseTime=U hebt uw challenge/response-antwoorden al ingesteld op <span class\="timestamp">%1%</span>. Als u doorgaat, kunt u uw vragen opnieuw beantwoorden.
 Display_WarnExistingResponse=U hebt uw challenge/response-antwoorden al ingesteld. Als u doorgaat, kunt u uw vragen opnieuw beantwoorden.
@@ -278,8 +282,8 @@ Title_Captcha=Verificatie
 Title_ChangePassword=Wachtwoord wijzigen
 Title_ConfirmResponses=Beveiligingsvragen bevestigen
 Title_Error=Fout
-Title_ForgottenPassword=Vergeten wachtwoord
-Title_ForgottenUsername=Vergeten gebruikersnaam
+Title_ForgottenPassword=Wachtwoord vergeten
+Title_ForgottenUsername=Gebruikersnaam vergeten
 Title_GuestRegistration=Gastregistratie
 Title_GuestUpdate=Gastgebruiker bijwerken
 Title_Helpdesk=Helpdesk
@@ -298,7 +302,7 @@ Title_PeopleSearch=Personen zoeken
 Title_PleaseWait=Een ogenblik geduld
 Title_RandomPasswords=Willekeurige wachtwoorden
 Title_RecentVerifications=Recente verificaties
-Title_RecoverPassword=Vergeten wachtwoord
+Title_RecoverPassword=Wachtwoord vergeten
 Title_RecoverRandomResponses=Willekeurige vragen
 Title_RecoverRequiredResponses=Vereiste vragen
 Title_SecurityResponses=Beveiligingsantwoorden
@@ -308,7 +312,7 @@ Title_SetupResponses=Beveiligingsvragen instellen
 Title_SetupOtpSecret=Verificatie mobiele app instellen
 Title_Shortcuts=Snelkoppelingen
 Title_Status=Status
-Title_Success=Succes
+Title_Success=Voltooid
 Title_UpdateProfile=Profiel bijwerken
 Title_UpdateProfileConfirm=Profielgegevens bevestigen
 Title_UserData=Mijn gegevens
@@ -320,7 +324,7 @@ Title_DeleteAccount=Mijn account verwijderen
 Title_Management=Management
 Title_DirectReports=Directe rapporterenden
 Title_Organization=Organisatie
-Tooltip_PasswordStrength=De wachtwoordsterktemeter geeft aan hoe eenvoudig het is om uw wachtwoord te raden. Probeer het volgende om uw wachtwoord sterker te maken\:<ul><li>Maak het wachtwoord langer</li><li>Herhaal de letters en cijfers niet</li><li>Gebruik hoofd- en kleine letters door elkaar</li><li>Voeg cijfers toe</li><li>Voeg speciale tekens toe</li></ul>
+Tooltip_PasswordStrength=De indicator voor wachtwoordsterkte geeft aan hoe gemakkelijk het is uw wachtwoord te raden. Probeer het volgende om uw wachtwoord sterker te maken\:<ul><li>Kies een langer wachtwoord</li><li>Herhaal niet dezelfde letters of cijfers</li><li>Gebruik zowel hoofdletters als kleine letters</li><li>Voeg meer cijfers toe</li><li>Voeg meer symbolen toe</li></ul>
 Confirm_DeleteUser=Weer u zeker dat u wilt doorgaan? Als u doorgaat, wordt de geselecteerde gebruiker definitief verwijderd. Dit kan niet ongedaan worden gemaakt.
 Confirm=Weet u zeker dat u wilt doorgaan?
 Value_False=Onwaar

+ 3 - 3
src/main/resources/password/pwm/i18n/Display_pl.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Wprowad\u017a nast\u0119puj\u0105ce dane. Jest to wym
 Display_CheckingData=Sprawdzanie danych...
 Display_CheckingPassword=Sprawdzanie has\u0142a...
 Display_CheckingResponses=Sprawdzanie odpowiedzi ....
+Display_ClientDisconnect=Nie mo\u017cna nawi\u0105za\u0107 komunikacji z serwerem.
 Display_CommunicationError=Nie mo\u017cna nawi\u0105za\u0107 komunikacji z serwerem. Kontynuuj, gdy wszystko b\u0119dzie gotowe.
 Display_ConfirmResponses=Upewnij si\u0119, \u017ce odpowiedzi i pytania s\u0105 poprawne. Sprawd\u017a pisowni\u0119 i interpunkcj\u0119. Je\u015bli zapomnisz has\u0142a, dost\u0119p do konta b\u0119dzie mo\u017cliwy przez podanie odpowiedzi na te pytania zabezpieczaj\u0105ce.
 Display_Day=dzie\u0144
@@ -132,7 +132,7 @@ Display_PleaseWait=\u0141adowanie...
 Display_PleaseWaitNewUser=Trwa konfigurowanie nowego konta. Zachowaj cierpliwo\u015b\u0107, ten proces mo\u017ce potrwa\u0107 kilka minut.
 Display_PleaseWaitPassword=Trwa zmienianie has\u0142a. Zachowaj cierpliwo\u015b\u0107, ten proces mo\u017ce potrwa\u0107 kilka minut.
 Display_Random=Losowo
-Display_RecoverVerificationChoice=Wybierz jedn\u0105 z nast\u0119puj\u0105cych metod weryfikowania to\u017csamo\u015bci. Uwaga\: je\u015bli administrator wymaga wielu form weryfikacji, b\u0119dzie nast\u0119powa\u0142o przekierowanie z powrotem do tej strony, a\u017c zostan\u0105 spe\u0142nione wszystkie kryteria weryfikacji.
+Display_RecoverVerificationChoice=Wybierz jedn\u0105 z nast\u0119puj\u0105cych metod weryfikowania to\u017csamo\u015bci. Uwaga\: je\u015bli administrator wymaga kilku form weryfikacji, b\u0119dzie nast\u0119powa\u0142o przekierowanie z powrotem do tej strony, a\u017c zostan\u0105 spe\u0142nione wszystkie kryteria weryfikacji.
 Display_RecoverTokenSendChoices=W celu zweryfikowania Twojej to\u017csamo\u015bci zostanie do Ciebie wys\u0142any kod zabezpiecze\u0144. Wybierz preferowan\u0105 metod\u0119 otrzymania kodu zabezpiecze\u0144.
 Display_RecoverTokenSendChoiceEmail=Wy\u015blij kod na zarejestrowane adresy e-mail.
 Display_RecoverTokenSendChoiceSMS=Wy\u015blij kod na telefon kom\u00f3rkowy przy u\u017cyciu wiadomo\u015bci tekstowej (SMS).
@@ -170,7 +170,7 @@ Display_TokenDestination=Miejsce docelowe tokenu
 Display_TokenResend=Tw\u00f3j kod zabezpiecze\u0144 powinien zosta\u0107 dostarczony od razu. Je\u015bli czekasz od d\u0142u\u017cszego czasu i kod jeszcze nie nadszed\u0142, kliknij przycisk Ponownie wy\u015blij kod, aby otrzyma\u0107 nowy kod.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Urz\u0105dzenie zosta\u0142o ju\u017c zarejestrowane dnia <span class\="timestamp">%1%</span>. Mo\u017cesz przetestowa\u0107 bie\u017c\u0105ce urz\u0105dzenie, wpisuj\u0105c poni\u017cej wygenerowany kod. W przypadku kontynuowania mo\u017cesz skonfigurowa\u0107 ponownie bie\u017c\u0105ce urz\u0105dzenie.
+Display_WarnExistingOtpSecretTime=Urz\u0105dzenie zosta\u0142o ju\u017c zarejestrowane dnia <span class="timestamp">%1%</span>. Mo\u017cesz przetestowa\u0107 bie\u017c\u0105ce urz\u0105dzenie, wpisuj\u0105c poni\u017cej wygenerowany kod. W przypadku kontynuowania mo\u017cesz skonfigurowa\u0107 ponownie bie\u017c\u0105ce urz\u0105dzenie.
 Display_WarnExistingOtpSecret=Urz\u0105dzenie zosta\u0142o ju\u017c zarejestrowane. Mo\u017cesz przetestowa\u0107 bie\u017c\u0105ce urz\u0105dzenie, wpisuj\u0105c poni\u017cej wygenerowany kod. W przypadku kontynuowania mo\u017cesz skonfigurowa\u0107 ponownie bie\u017c\u0105ce urz\u0105dzenie.
 Display_WarnExistingResponseTime=Odpowiedzi polecenia odzew/odpowied\u017a zosta\u0142y ju\u017c skonfigurowane dnia <span class\="timestamp">%1%</span>. W przypadku kontynuowania mo\u017cesz odpowiedzie\u0107 ponownie na pytania.
 Display_WarnExistingResponse=Odpowiedzi polecenia odzew/odpowied\u017a zosta\u0142y ju\u017c skonfigurowane. W przypadku kontynuowania mo\u017cesz odpowiedzie\u0107 ponownie na pytania.

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_pt_BR.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Insira os dados a seguir. Isso \u00e9 necess\u00e1rio
 Display_CheckingData=Verificando Dados...
 Display_CheckingPassword=Verificando Senha...
 Display_CheckingResponses=Verificando Respostas...
+Display_ClientDisconnect=N\u00e3o \u00e9 poss\u00edvel comunicar-se com o servidor.
 Display_CommunicationError=N\u00e3o \u00e9 poss\u00edvel comunicar-se com o servidor. Continue quando estiver pronto.
 Display_ConfirmResponses=Certifique-se de que as respostas e as perguntas estejam corretas. Verifique a ortografia e a pontua\u00e7\u00e3o. Se esquecer a senha, voc\u00ea poder\u00e1 acessar a conta respondendo \u00e0s perguntas de seguran\u00e7a.
 Display_Day=dia
@@ -132,7 +132,7 @@ Display_PleaseWait=Carregando...
 Display_PleaseWaitNewUser=Sua nova conta est\u00e1 sendo configurada. Esse processo pode levar v\u00e1rios minutos, seja paciente.
 Display_PleaseWaitPassword=A senha est\u00e1 sendo mudada. Esse processo pode levar v\u00e1rios minutos, seja paciente.
 Display_Random=Aleat\u00f3rio
-Display_RecoverVerificationChoice=Selecione um dos m\u00e9todos a seguir para verificar sua identidade. Nota\: Se o seu administrador requerer v\u00e1rias formas de verifica\u00e7\u00e3o, voc\u00ea ser\u00e1 redirecionado de volta para esta p\u00e1gina at\u00e9 que todos os crit\u00e9rios de verifica\u00e7\u00e3o sejam atendidos.
+Display_RecoverVerificationChoice=Selecione um dos m\u00e9todos de verifica\u00e7\u00e3o de identidade a seguir. Observa\u00e7\u00e3o\: Se o administrador exigir diversas formas de verifica\u00e7\u00e3o, voc\u00ea ser\u00e1 redirecionado de volta para esta p\u00e1gina at\u00e9 que todos os crit\u00e9rios de verifica\u00e7\u00e3o sejam atendidos.
 Display_RecoverTokenSendChoices=Voc\u00ea receber\u00e1 um c\u00f3digo de seguran\u00e7a para que possa confirmar sua identidade. Escolha o m\u00e9todo pelo qual gostaria de receber seu c\u00f3digo de seguran\u00e7a.
 Display_RecoverTokenSendChoiceEmail=Enviar o c\u00f3digo para seu endere\u00e7o de e-mail registrado.
 Display_RecoverTokenSendChoiceSMS=Enviar o c\u00f3digo para seu telefone celular usando mensagem de texto (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Digite suas respostas de seguran\u00e7a
 Display_SelectionIndicator=Selecione um item de pergunta na lista
 Display_SearchCompleted=Pesquisa conclu\u00edda.
 Display_SearchResultsInfo=Retornou %1% resultados em %2%.
-Display_SearchResultsExceeded=Os resultados da pesquisa excedem o tamanho m\u00e1ximo da pesquisa.
+Display_SearchResultsExceeded=Os resultados ultrapassam o tamanho m\u00e1ximo de pesquisa
 Display_SetRandomPasswordPrompt=Definir uma nova senha aleat\u00f3ria para este usu\u00e1rio?
-Display_SearchResultsNone=Nenhum resultado.
+Display_SearchResultsNone=Nenhum resultado
 Display_Second=segundo
 Display_Seconds=segundos
 Display_SetupHelpdeskResponses=<p>O administrador precisa que voc\u00ea forne\u00e7a as respostas a seguir. Essas respostas s\u00e3o usadas para verificar sua identidade caso voc\u00ea contate o suporte t\u00e9cnico para assist\u00eancia.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=Destino do Token
 Display_TokenResend=Seu c\u00f3digo de seguran\u00e7a deve chegar imediatamente. Se tiver aguardado por um longo tempo e ainda n\u00e3o tiver recebido um c\u00f3digo, clique no bot\u00e3o de reenviar c\u00f3digo para receber um novo c\u00f3digo.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Voc\u00ea j\u00e1 registrou seu dispositivo em <span class\="timestamp">%1%</span>. \u00c9 poss\u00edvel testar o dispositivo atual digitando o c\u00f3digo gerado abaixo. Se continuar, voc\u00ea poder\u00e1 reconfigurar o dispositivo atual.
+Display_WarnExistingOtpSecretTime=Voc\u00ea j\u00e1 registrou seu dispositivo em <span class="timestamp">%1%</span>. \u00c9 poss\u00edvel testar o dispositivo atual digitando o c\u00f3digo gerado abaixo. Se voc\u00ea continuar, poder\u00e1 reconfigurar o dispositivo atual.
 Display_WarnExistingOtpSecret=Voc\u00ea j\u00e1 inscreveu seu dispositivo.  \u00c9 poss\u00edvel testar o dispositivo atual digitando o c\u00f3digo gerado abaixo. Se continuar, ser\u00e1 poss\u00edvel reconfigurar o dispositivo atual.
 Display_WarnExistingResponseTime=Voc\u00ea j\u00e1 configurou as respostas para a pergunta/resposta de verifica\u00e7\u00e3o em <span class\="timestamp">%1%</span>. Se continuar, voc\u00ea poder\u00e1 responder \u00e0s perguntas novamente.
 Display_WarnExistingResponse=Voc\u00ea j\u00e1 configurou as respostas para a pergunta/resposta de verifica\u00e7\u00e3o. Se continuar, ser\u00e1 poss\u00edvel responder \u00e0s perguntas novamente.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Apagar Minha Conta
 Title_Management=Gerenciamento
 Title_DirectReports=Reporta-se a
 Title_Organization=Organiza\u00e7\u00e3o
-Tooltip_PasswordStrength=O medidor de for\u00e7a da senha mostra o quanto \u00e9 f\u00e1cil adivinhar sua senha. Tente o seguinte para tornar sua senha mais forte\:<ul><li>Torne a senha mais longa</li><li>N\u00e3o repita letras nem n\u00fameros</li><li>Use letras mai\u00fasculas e min\u00fasculas</li><li>Adicione mais n\u00fameros</li><li>Adicione mais caracteres de s\u00edmbolo</li></ul>
+Tooltip_PasswordStrength=O medidor de n\u00edvel de seguran\u00e7a da senha mostra se \u00e9 f\u00e1cil adivinhar sua senha. Fa\u00e7a o seguinte para tornar sua senha mais segura\:<ul><li>Crie uma senha mais extensa</li><li>N\u00e3o repita letras ou n\u00fameros</li><li>Misture caracteres mai\u00fasculos e min\u00fasculos</li><li>Adicione mais n\u00fameros</li><li>Adicione mais s\u00edmbolos</li></ul>
 Confirm_DeleteUser=Tem certeza de que deseja continuar? Se continuar, o usu\u00e1rio selecionado ser\u00e1 apagado permanentemente. Isso n\u00e3o pode ser desfeito.
 Confirm=Tem certeza de que deseja continuar?
 Value_False=Falso

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_ru.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0441\u04
 Display_CheckingData=\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445....
 Display_CheckingPassword=\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0430\u0440\u043e\u043b\u044f....
 Display_CheckingResponses=\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u043e\u0432....
+Display_ClientDisconnect=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.
 Display_CommunicationError=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c. \u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b.
 Display_ConfirmResponses=\u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u0440\u0444\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u0438 \u043f\u0443\u043d\u043a\u0442\u0443\u0430\u0446\u0438\u044e. \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c, \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0432 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.
 Display_Day=\u0434\u0435\u043d\u044c
@@ -132,7 +132,7 @@ Display_PleaseWait=\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...
 Display_PleaseWaitNewUser=\u041d\u043e\u0432\u0430\u044f \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442.
 Display_PleaseWaitPassword=\u041f\u0430\u0440\u043e\u043b\u044c \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442.
 Display_Random=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439
-Display_RecoverVerificationChoice=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u0435\u0441\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.
+Display_RecoverVerificationChoice=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f. \u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u043e\u0440\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0442\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438.
 Display_RecoverTokenSendChoices=\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f \u0432\u0430\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.
 Display_RecoverTokenSendChoiceEmail=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b.
 Display_RecoverTokenSendChoiceSMS=\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043b\u0435\u0444\u043e\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0442\
 Display_SelectionIndicator=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430
 Display_SearchCompleted=\u041f\u043e\u0438\u0441\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d.
 Display_SearchResultsInfo=\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432\: %1% \u0432 %2%.
-Display_SearchResultsExceeded=\u0420\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u043b \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u0430
+Display_SearchResultsExceeded=\u0414\u043b\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0438\u0441\u043a\u0430
 Display_SetRandomPasswordPrompt=\u0417\u0430\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f?
-Display_SearchResultsNone=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442
+Display_SearchResultsNone=\u041d\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432
 Display_Second=\u0441\u0435\u043a\u0443\u043d\u0434\u0430
 Display_Seconds=\u0441
 Display_SetupHelpdeskResponses=<p>\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0442\u0432\u0435\u0442\u044b. \u042d\u0442\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0437\u0430 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432 \u0441\u043b\u0443\u0436\u0431\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=\u041d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\
 Display_TokenResend=\u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435. \u0415\u0441\u043b\u0438 \u043f\u043e \u0438\u0441\u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u0434 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043a\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 <span class\="timestamp">%1%</span>. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0432\u0435\u0434\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.
+Display_WarnExistingOtpSecretTime=\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0432 <span class="timestamp">%1%</span>.  \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0432\u0435\u0434\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435.  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.
 Display_WarnExistingOtpSecret=\u0412\u044b \u0443\u0436\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0432\u0432\u0435\u0434\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0438\u0436\u0435. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e.
 Display_WarnExistingResponseTime=\u0412\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 "\u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442" \u0432 <span class\="timestamp">%1%</span>. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.
 Display_WarnExistingResponse=\u0412\u044b \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 "\u0432\u043e\u043f\u0440\u043e\u0441-\u043e\u0442\u0432\u0435\u0442". \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441\u044b.
@@ -320,7 +320,7 @@ Title_DeleteAccount=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u043e\u044
 Title_Management=\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e
 Title_DirectReports=\u041f\u043e\u0434\u0447\u0438\u043d\u0435\u043d\u043d\u044b\u0435
 Title_Organization=\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f
-Tooltip_PasswordStrength=\u0418\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0433\u043a\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044f\:<ul><li>\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043b\u0438\u043d\u043d\u0435\u0435</li><li>\u041d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0439\u0442\u0435 \u0431\u0443\u043a\u0432\u044b \u0438\u043b\u0438 \u0446\u0438\u0444\u0440\u044b</li><li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u0430\u043a \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435, \u0442\u0430\u043a \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b</li><li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0446\u0438\u0444\u0440\u044b</li><li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b</li></ul>
+Tooltip_PasswordStrength=\u041d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u0435\u0433\u043e \u0443\u0433\u0430\u0434\u0430\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044f, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f\u043c\u0438\:<ul><li>\u041f\u0440\u0438\u0434\u0443\u043c\u0430\u0439\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c</li><li>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0431\u0443\u043a\u0432\u044b \u0438 \u0446\u0438\u0444\u0440\u044b</li><li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0431\u0443\u043a\u0432\u044b \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 (\u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0438 \u043d\u0438\u0436\u043d\u0435\u043c)</li><li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0446\u0438\u0444\u0440</li><li>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432</li></ul>
 Confirm_DeleteUser=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d. \u042d\u0442\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0435\u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0430.
 Confirm=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c?
 Value_False=\u041d\u0435\u0442

+ 7 - 7
src/main/resources/password/pwm/i18n/Display_sv.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=Ange f\u00f6ljande data. Detta kr\u00e4vs f\u00f6r at
 Display_CheckingData=Kontrollerar data ...
 Display_CheckingPassword=Kontrollerar l\u00f6senordet ...
 Display_CheckingResponses=Kontrollerar svar ...
+Display_ClientDisconnect=Det gick inte att kommunicera med servern.
 Display_CommunicationError=Det g\u00e5r inte att kommunicera med servern. Forts\u00e4tt n\u00e4r du \u00e4r klar.
 Display_ConfirmResponses=Se till att dina fr\u00e5gor och svar \u00e4r korrekta. Kontrollera stavning och interpunktion. Om du inte kan komma ih\u00e5g ditt l\u00f6senord kommer du att kunna komma \u00e5t ditt konto genom att svara p\u00e5 dessa s\u00e4kerhetsfr\u00e5gor.
 Display_Day=dag
@@ -95,7 +95,7 @@ Display_Helpdesk=Ange s\u00f6kdata f\u00f6r anv\u00e4ndaren.
 Display_HelpdeskOtpValidation=Uppmana anv\u00e4ndaren att l\u00e4sa in sin mobilautentiseringsapp och dela nuvarande l\u00f6senord.
 Display_Hour=timme
 Display_Hours=timmar
-Display_IdleTimeout=Timeout vid inaktivitet\:
+Display_IdleTimeout=Timeout f\u00f6r inaktivitet\:
 Display_IdleWarningMessage=Din session h\u00e5ller p\u00e5 att uppn\u00e5 timeout. Klicka n\u00e5gonstans p\u00e5 den h\u00e4r sidan f\u00f6r att forts\u00e4tta.
 Display_IdleWarningTitle=Timeout vid inaktivitet
 Display_JavascriptRequired=Javascript kr\u00e4vs f\u00f6r att kunna visa den h\u00e4r sidan.
@@ -132,7 +132,7 @@ Display_PleaseWait=L\u00e4ser ...
 Display_PleaseWaitNewUser=Ditt nya konto konfigureras. Detta kan ta flera minuter. V\u00e4nta.
 Display_PleaseWaitPassword=Ditt l\u00f6senord \u00e4ndras. Detta kan ta flera minuter. V\u00e4nta.
 Display_Random=Slumpm\u00e4ssigt
-Display_RecoverVerificationChoice=V\u00e4lj en av f\u00f6ljande metoder f\u00f6r att verifiera din identitet. Obs! Om administrat\u00f6ren kr\u00e4ver flera former av verifiering dirigeras du tillbaka till den h\u00e4r sidan tills det att samtliga verifieringskriterier \u00e4r uppfyllda.
+Display_RecoverVerificationChoice=V\u00e4lj n\u00e5gon av f\u00f6ljande metoder f\u00f6r att verifiera din identitet. Obs! Om administrat\u00f6ren kr\u00e4ver flera former av verifiering omdirigeras du tillbaka till den h\u00e4r sidan tills alla verifieringskriterier uppfyllts.
 Display_RecoverTokenSendChoices=F\u00f6r att verifiera din identitet skickas en s\u00e4kerhetskod till dig. Ange med vilken metod du helst vill ta emot s\u00e4kerhetskoden.
 Display_RecoverTokenSendChoiceEmail=Skicka koden till din registrerade e-postadress.
 Display_RecoverTokenSendChoiceSMS=Skicka koden till din mobil som textmeddelande (SMS).
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=Skriv svaren p\u00e5 dina s\u00e4kerhetsfr\u00e5gor
 Display_SelectionIndicator=V\u00e4lj en fr\u00e5ga i listan
 Display_SearchCompleted=S\u00f6kningen \u00e4r klar.
 Display_SearchResultsInfo=Returnerade %1% resultat p\u00e5 %2%.
-Display_SearchResultsExceeded=S\u00f6kresultaten \u00f6verskred den maximala s\u00f6kningsstorleken.
+Display_SearchResultsExceeded=S\u00f6kresultaten \u00f6verskred maximal s\u00f6kstorlek
 Display_SetRandomPasswordPrompt=Ange ett nytt slumpm\u00e4ssigt l\u00f6senord f\u00f6r den h\u00e4r anv\u00e4ndaren?
-Display_SearchResultsNone=Inga resultat.
+Display_SearchResultsNone=Inga resultat
 Display_Second=sekund
 Display_Seconds=sekunder
 Display_SetupHelpdeskResponses=<p>Din administrat\u00f6r kr\u00e4ver att du l\u00e4mnar f\u00f6ljande svar. Dessa svar anv\u00e4nds f\u00f6r att verifiera din identitet om du kontaktar din supportavdelning f\u00f6r att f\u00e5 hj\u00e4lp.</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=Tokenm\u00e5l
 Display_TokenResend=Din s\u00e4kerhetskod b\u00f6r komma direkt. Klicka p\u00e5 knappen Skicka kod p\u00e5 nytt f\u00f6r att f\u00e5 en ny kod om du har v\u00e4ntat en stund och fortfarande inte f\u00e5tt den.
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=Du har redan registrerat din enhet p\u00e5 <span class\="timestamp">%1%</span>. Du kan testa din nuvarande enhet genom att skriva den genererade koden nedan. Om du forts\u00e4tter kan du konfigurera om din nuvarande enhet.
+Display_WarnExistingOtpSecretTime=Du har redan registrerat din enhet. Detta gjorde du den <span class="timestamp">%1%</span>. Du kan testa din aktuella enhet genom att skriva in koden som genererats nedan. Om du forts\u00e4tter kan du konfigurera om din aktuella enhet.
 Display_WarnExistingOtpSecret=Du har redan registrerat din enhet. Du kan testa din nuvarande enhet genom att skriva den genererade koden nedan. Om du forts\u00e4tter kan du konfigurera om din nuvarande enhet.
 Display_WarnExistingResponseTime=Du har redan st\u00e4llt in dina kontrollfr\u00e5gor och svar <span class\="timestamp">%1%</span>. Om du forts\u00e4tter kan du ange nya svar p\u00e5 fr\u00e5gorna.
 Display_WarnExistingResponse=Du har redan st\u00e4llt in dina kontrollfr\u00e5gor och svar. Om du forts\u00e4tter kan du ange nya svar p\u00e5 fr\u00e5gorna.
@@ -320,7 +320,7 @@ Title_DeleteAccount=Ta bort mitt konto
 Title_Management=Hantering
 Title_DirectReports=Underst\u00e4llda
 Title_Organization=Organisation
-Tooltip_PasswordStrength=M\u00e4taren f\u00f6r l\u00f6senordets styrka visar hur l\u00e4tt det \u00e4r att gissa ditt l\u00f6senord. Du kan f\u00f6rs\u00f6ka med f\u00f6ljande f\u00f6r att g\u00f6ra l\u00f6senordet starkare\:<ul><li>G\u00f6r l\u00f6senordet l\u00e4ngre</li><li>Upprepa inte bokst\u00e4ver och siffror</li><li>Anv\u00e4nd bokst\u00e4ver med olika skiftl\u00e4gen (gemener och versaler)</li><li>L\u00e4gg till fler siffror</li><li>L\u00e4gg till fler symboltecken</li></ul>
+Tooltip_PasswordStrength=L\u00f6senordss\u00e4kerhetsm\u00e4taren visar hur enkelt det \u00e4r att gissa ditt l\u00f6senord. Testa f\u00f6ljande f\u00f6r att g\u00f6ra ditt l\u00f6senord starkare\:<ul><li>G\u00f6r l\u00f6senordet l\u00e4ngre</li><li>Upprepa inte bokst\u00e4ver eller siffror</li><li>Anv\u00e4nd en blandning av versaler och gemener</li><li>L\u00e4gg till fler siffror</li><li>L\u00e4gg till fler symboltecken</li></ul>
 Confirm_DeleteUser=Vill du forts\u00e4tta? Om du forts\u00e4tter raderas den markerade anv\u00e4ndaren permanent. Denna \u00e5tg\u00e4rd g\u00e5r inte att \u00e5ngra.
 Confirm=Vill du forts\u00e4tta?
 Value_False=Falskt

+ 9 - 9
src/main/resources/password/pwm/i18n/Display_zh_CN.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=\u8bf7\u8f93\u5165\u4ee5\u4e0b\u6570\u636e\u3002\u7cf
 Display_CheckingData=\u6b63\u5728\u68c0\u67e5\u6570\u636e...
 Display_CheckingPassword=\u6b63\u5728\u68c0\u67e5\u53e3\u4ee4...
 Display_CheckingResponses=\u6b63\u5728\u68c0\u67e5\u7b54\u6848...
+Display_ClientDisconnect=\u65e0\u6cd5\u4e0e\u670d\u52a1\u5668\u901a\u4fe1\u3002
 Display_CommunicationError=\u65e0\u6cd5\u4e0e\u670d\u52a1\u5668\u901a\u4fe1\u3002\u51c6\u5907\u597d\u65f6\u8bf7\u7ee7\u7eed\u3002
 Display_ConfirmResponses=\u8bf7\u786e\u4fdd\u60a8\u7684\u7b54\u6848\u548c\u95ee\u9898\u662f\u6b63\u786e\u7684\u3002\u8bf7\u68c0\u67e5\u62fc\u5199\u548c\u6807\u70b9\u7b26\u53f7\u3002\u5982\u679c\u5fd8\u8bb0\u53e3\u4ee4\uff0c\u5219\u9700\u63d0\u4f9b\u4ee5\u4e0b\u5b89\u5168\u6027\u95ee\u9898\u7684\u7b54\u6848\u624d\u80fd\u8bbf\u95ee\u5e10\u6237\u3002
 Display_Day=\u5929
@@ -132,7 +132,7 @@ Display_PleaseWait=\u6b63\u5728\u88c5\u8f7d...
 Display_PleaseWaitNewUser=\u6b63\u5728\u914d\u7f6e\u60a8\u7684\u65b0\u5e10\u6237\u3002\u6b64\u8fc7\u7a0b\u53ef\u80fd\u9700\u8981\u6570\u5206\u949f\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u3002
 Display_PleaseWaitPassword=\u6b63\u5728\u66f4\u6539\u60a8\u7684\u53e3\u4ee4\u3002\u6b64\u8fc7\u7a0b\u53ef\u80fd\u9700\u8981\u6570\u5206\u949f\uff0c\u8bf7\u8010\u5fc3\u7b49\u5f85\u3002
 Display_Random=\u968f\u673a
-Display_RecoverVerificationChoice=\u8bf7\u9009\u62e9\u4e0b\u9762\u7684\u4e00\u79cd\u65b9\u6cd5\u6821\u9a8c\u60a8\u7684\u8eab\u4efd\u3002\u6ce8\u610f\uff1a\u5982\u679c\u7ba1\u7406\u5458\u8981\u6c42\u6267\u884c\u591a\u79cd\u5f62\u5f0f\u7684\u6821\u9a8c\uff0c\u60a8\u5c06\u91cd\u65b0\u8fd4\u56de\u5230\u6b64\u9875\u9762\uff0c\u76f4\u5230\u7b26\u5408\u6240\u6709\u6821\u9a8c\u51c6\u5219\u3002
+Display_RecoverVerificationChoice=\u8bf7\u9009\u62e9\u4e0b\u5217\u4e00\u79cd\u65b9\u5f0f\u6821\u9a8c\u8eab\u4efd\u3002\u6ce8\u610f\uff1a\u5982\u679c\u60a8\u7684\u7ba1\u7406\u5458\u8981\u6c42\u591a\u79cd\u6821\u9a8c\u5f62\u5f0f\uff0c\u60a8\u5c06\u91cd\u5b9a\u5411\u56de\u6b64\u9875\u9762\uff0c\u76f4\u5230\u6ee1\u8db3\u6240\u6709\u6821\u9a8c\u51c6\u5219\u3002
 Display_RecoverTokenSendChoices=\u4e3a\u4e86\u6821\u9a8c\u60a8\u7684\u8eab\u4efd\uff0c\u7cfb\u7edf\u4f1a\u5411\u60a8\u53d1\u9001\u4e00\u4e2a\u5b89\u5168\u4ee3\u7801\u3002\u8bf7\u9009\u62e9\u60a8\u66f4\u613f\u610f\u91c7\u7528\u7684\u5b89\u5168\u4ee3\u7801\u63a5\u6536\u65b9\u6cd5\u3002
 Display_RecoverTokenSendChoiceEmail=\u5c06\u4ee3\u7801\u53d1\u9001\u5230\u60a8\u7684\u5df2\u6ce8\u518c\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002
 Display_RecoverTokenSendChoiceSMS=\u4f7f\u7528\u77ed\u4fe1 (SMS) \u5c06\u4ee3\u7801\u53d1\u9001\u5230\u60a8\u7684\u79fb\u52a8\u7535\u8bdd\u3002
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=\u8bf7\u952e\u5165\u60a8\u7684\u5b89\u5168\u6027\u95ee\u
 Display_SelectionIndicator=\u8bf7\u9009\u62e9\u5217\u8868\u4e2d\u7684\u95ee\u9898\u9879
 Display_SearchCompleted=\u641c\u7d22\u5df2\u5b8c\u6210\u3002
 Display_SearchResultsInfo=\u8fd4\u56de\u4e86 %2% \u4e2d\u7684 %1% \u4e2a\u7ed3\u679c\u3002
-Display_SearchResultsExceeded=\u641c\u7d22\u7ed3\u679c\u8d85\u8fc7\u641c\u7d22\u5927\u5c0f\u4e0a\u9650\u3002
+Display_SearchResultsExceeded=\u641c\u7d22\u7ed3\u679c\u8d85\u8fc7\u6700\u5927\u641c\u7d22\u5927\u5c0f
 Display_SetRandomPasswordPrompt=\u662f\u5426\u4e3a\u6b64\u7528\u6237\u8bbe\u7f6e\u65b0\u7684\u968f\u673a\u53e3\u4ee4\uff1f
-Display_SearchResultsNone=\u6ca1\u6709\u7ed3\u679c\u3002
+Display_SearchResultsNone=\u65e0\u7ed3\u679c
 Display_Second=\u79d2
 Display_Seconds=\u79d2
 Display_SetupHelpdeskResponses=<p>\u7ba1\u7406\u5458\u8981\u6c42\u60a8\u63d0\u4f9b\u4e0b\u5217\u7b54\u6848\u3002\u5f53\u60a8\u8054\u7cfb\u54a8\u8be2\u53f0\u4ee5\u83b7\u53d6\u5e2e\u52a9\u65f6\uff0c\u7cfb\u7edf\u53ef\u4ee5\u7528\u8fd9\u4e9b\u7b54\u6848\u6821\u9a8c\u60a8\u7684\u8eab\u4efd\u3002</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=\u4ee4\u724c\u76ee\u6807
 Display_TokenResend=\u60a8\u5c06\u7acb\u5373\u6536\u5230\u5b89\u5168\u4ee3\u7801\u3002\u5982\u679c\u957f\u65f6\u95f4\u672a\u6536\u5230\uff0c\u53ef\u5355\u51fb\u91cd\u53d1\u9001\u4ee3\u7801\u6309\u94ae\u4ee5\u63a5\u6536\u65b0\u4ee3\u7801\u3002
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=\u60a8\u5df2\u5728 <span class\="timestamp">%1%</span> \u6ce8\u518c\u4e86\u8bbe\u5907\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728\u4e0b\u9762\u952e\u5165\u751f\u6210\u7684\u4ee3\u7801\u6765\u6d4b\u8bd5\u5f53\u524d\u8bbe\u5907\u3002\u5982\u679c\u7ee7\u7eed\uff0c\u60a8\u53ef\u4ee5\u91cd\u65b0\u914d\u7f6e\u5f53\u524d\u8bbe\u5907\u3002
+Display_WarnExistingOtpSecretTime=\u60a8\u5df2\u5728 <span class="timestamp">%1%</span> \u4e2d\u6ce8\u518c\u8bbe\u5907\u3002\u60a8\u53ef\u901a\u8fc7\u5728\u4e0b\u65b9\u952e\u5165\u751f\u6210\u7684\u4ee3\u7801\u4ee5\u6d4b\u8bd5\u5f53\u524d\u8bbe\u5907\u3002\u5982\u679c\u9009\u62e9\u7ee7\u7eed\uff0c\u53ef\u4ee5\u91cd\u914d\u7f6e\u60a8\u7684\u5f53\u524d\u8bbe\u5907\u3002
 Display_WarnExistingOtpSecret=\u60a8\u5df2\u6ce8\u518c\u4e86\u8bbe\u5907\u3002\u60a8\u53ef\u4ee5\u901a\u8fc7\u5728\u4e0b\u9762\u952e\u5165\u751f\u6210\u7684\u4ee3\u7801\u6765\u6d4b\u8bd5\u5f53\u524d\u8bbe\u5907\u3002\u5982\u679c\u7ee7\u7eed\uff0c\u60a8\u53ef\u4ee5\u91cd\u65b0\u914d\u7f6e\u5f53\u524d\u8bbe\u5907\u3002
 Display_WarnExistingResponseTime=\u60a8\u5df2\u5728 <span class\="timestamp">%1%</span> \u8bbe\u7f6e\u8be2\u95ee/\u56de\u7b54\u7b54\u6848\u3002\u5982\u679c\u7ee7\u7eed\uff0c\u60a8\u53ef\u4ee5\u91cd\u65b0\u56de\u7b54\u76f8\u5173\u95ee\u9898\u3002
 Display_WarnExistingResponse=\u60a8\u5df2\u8bbe\u7f6e\u8be2\u95ee/\u56de\u7b54\u7b54\u6848\u3002\u5982\u679c\u7ee7\u7eed\uff0c\u60a8\u53ef\u4ee5\u91cd\u65b0\u56de\u7b54\u76f8\u5173\u95ee\u9898\u3002
@@ -278,8 +278,8 @@ Title_Captcha=\u6821\u9a8c
 Title_ChangePassword=\u66f4\u6539\u53e3\u4ee4
 Title_ConfirmResponses=\u786e\u8ba4\u5b89\u5168\u6027\u95ee\u9898
 Title_Error=\u9519\u8bef
-Title_ForgottenPassword=\u5fd8\u8bb0\u7684\u53e3\u4ee4
-Title_ForgottenUsername=\u5fd8\u8bb0\u7684\u7528\u6237\u540d
+Title_ForgottenPassword=\u5fd8\u8bb0\u4e86\u53e3\u4ee4
+Title_ForgottenUsername=\u5fd8\u8bb0\u4e86\u7528\u6237\u540d
 Title_GuestRegistration=Guest \u6ce8\u518c
 Title_GuestUpdate=\u66f4\u65b0 Guest \u7528\u6237
 Title_Helpdesk=\u54a8\u8be2\u53f0
@@ -298,7 +298,7 @@ Title_PeopleSearch=\u4eba\u7269\u641c\u7d22
 Title_PleaseWait=\u8bf7\u7a0d\u5019
 Title_RandomPasswords=\u968f\u673a\u53e3\u4ee4
 Title_RecentVerifications=\u6700\u8fd1\u6821\u9a8c
-Title_RecoverPassword=\u5fd8\u8bb0\u7684\u53e3\u4ee4
+Title_RecoverPassword=\u5fd8\u8bb0\u4e86\u53e3\u4ee4
 Title_RecoverRandomResponses=\u968f\u673a\u95ee\u9898
 Title_RecoverRequiredResponses=\u8981\u6c42\u7684\u95ee\u9898
 Title_SecurityResponses=\u5b89\u5168\u6027\u95ee\u9898\u56de\u7b54
@@ -320,7 +320,7 @@ Title_DeleteAccount=\u5220\u9664\u6211\u7684\u5e10\u6237
 Title_Management=\u7ba1\u7406
 Title_DirectReports=\u76f4\u63a5\u4e0b\u5c5e
 Title_Organization=\u7ec4\u7ec7
-Tooltip_PasswordStrength=\u53e3\u4ee4\u5f3a\u5ea6\u8868\u793a\u731c\u51fa\u53e3\u4ee4\u7684\u96be\u5ea6\u3002\u8bf7\u5c1d\u8bd5\u4e0b\u5217\u64cd\u4f5c\u4ee5\u589e\u52a0\u53e3\u4ee4\u5f3a\u5ea6\uff1a<ul><li>\u589e\u52a0\u53e3\u4ee4\u957f\u5ea6</li><li>\u4e0d\u91cd\u590d\u4f7f\u7528\u5b57\u6bcd\u6216\u6570\u5b57</li><li>\u4f7f\u7528\u6df7\u5408\u4e86\u5927\u5c0f\u5199\u7684\u5b57\u6bcd</li><li>\u6dfb\u52a0\u66f4\u591a\u6570\u5b57</li><li>\u6dfb\u52a0\u66f4\u591a\u7b26\u53f7\u5b57\u7b26</li></ul>
+Tooltip_PasswordStrength=\u53e3\u4ee4\u5f3a\u5ea6\u6307\u793a\u5668\u53ef\u663e\u793a\u8be5\u53e3\u4ee4\u7684\u7834\u8bd1\u96be\u5ea6\u3002\u8bf7\u5c1d\u8bd5\u4ee5\u4e0b\u65b9\u5f0f\u6765\u52a0\u5f3a\u53e3\u4ee4\u5f3a\u5ea6\uff1a<ul><li>\u4f7f\u7528\u66f4\u957f\u7684\u53e3\u4ee4</li><li>\u907f\u514d\u4f7f\u7528\u91cd\u590d\u7684\u5b57\u6bcd\u6216\u6570\u5b57</li><li>\u6df7\u5408\u4f7f\u7528\u5927\u5c0f\u5199\u5b57\u6bcd</li><li>\u6dfb\u52a0\u66f4\u591a\u6570\u5b57</li><li>\u6dfb\u52a0\u66f4\u591a\u7b26\u53f7\u5b57\u7b26</li></ul>
 Confirm_DeleteUser=\u662f\u5426\u786e\u5b9e\u8981\u7ee7\u7eed\uff1f\u5982\u679c\u7ee7\u7eed\uff0c\u7cfb\u7edf\u5c06\u6c38\u4e45\u5220\u9664\u9009\u5b9a\u7528\u6237\u3002\u6b64\u64cd\u4f5c\u65e0\u6cd5\u64a4\u6d88\u3002
 Confirm=\u662f\u5426\u786e\u5b9e\u8981\u7ee7\u7eed\uff1f
 Value_False=\u5047

+ 6 - 6
src/main/resources/password/pwm/i18n/Display_zh_TW.properties

@@ -1,4 +1,3 @@
-#Tue, 20 Jun 2017 12:52:39 -0400
 #
 # Password Management Servlets (PWM)
 # http://www.pwm-project.org
@@ -78,6 +77,7 @@ Display_ChangePasswordForm=\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u6599\u3002\u7cf
 Display_CheckingData=\u6b63\u5728\u6aa2\u67e5\u8cc7\u6599...
 Display_CheckingPassword=\u6b63\u5728\u6aa2\u67e5\u5bc6\u78bc...
 Display_CheckingResponses=\u6b63\u5728\u6aa2\u67e5\u7b54\u6848...
+Display_ClientDisconnect=\u7121\u6cd5\u8207\u4f3a\u670d\u5668\u901a\u8a0a\u3002
 Display_CommunicationError=\u7121\u6cd5\u8207\u4f3a\u670d\u5668\u901a\u8a0a\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u5373\u53ef\u7e7c\u7e8c\u3002
 Display_ConfirmResponses=\u8acb\u78ba\u5b9a\u60a8\u7684\u7b54\u6848\u548c\u554f\u984c\u662f\u5426\u6b63\u78ba\u3002\u8acb\u6aa2\u67e5\u62fc\u5b57\u548c\u6a19\u9ede\u7b26\u865f\u3002\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u5fc5\u9808\u63d0\u4f9b\u9019\u4e9b\u5b89\u5168\u6027\u554f\u984c\u7684\u7b54\u6848\u624d\u80fd\u5b58\u53d6\u5e33\u6236\u3002
 Display_Day=\u5929
@@ -132,7 +132,7 @@ Display_PleaseWait=\u6b63\u5728\u8f09\u5165...
 Display_PleaseWaitNewUser=\u6b63\u5728\u8a2d\u5b9a\u60a8\u7684\u65b0\u5e33\u6236\u3002\u6b64\u7a0b\u5e8f\u53ef\u80fd\u9700\u8981\u6578\u5206\u9418\u7684\u6642\u9593\uff0c\u8acb\u8010\u5fc3\u7b49\u5019\u3002
 Display_PleaseWaitPassword=\u6b63\u5728\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002\u6b64\u7a0b\u5e8f\u53ef\u80fd\u9700\u8981\u6578\u5206\u9418\u7684\u6642\u9593\uff0c\u8acb\u8010\u5fc3\u7b49\u5019\u3002
 Display_Random=\u96a8\u6a5f
-Display_RecoverVerificationChoice=\u8acb\u9078\u53d6\u4e0b\u5217\u65b9\u6cd5\u5176\u4e2d\u4e4b\u4e00\u4f86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\u3002\u6ce8\u610f\uff1a\u5982\u679c\u60a8\u7684\u7ba1\u7406\u54e1\u8981\u6c42\u591a\u7d44\u5f62\u5f0f\u7684\u9a57\u8b49\uff0c\u60a8\u5c07\u6703\u91cd\u65b0\u5c0e\u5411\u81f3\u6b64\u9801\uff0c\u76f4\u5230\u9054\u5230\u6240\u6709\u9a57\u8b49\u6e96\u5247\u3002
+Display_RecoverVerificationChoice=\u8acb\u9078\u53d6\u4e0b\u5217\u65b9\u6cd5\u5176\u4e2d\u4e00\u9805\u4f86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\u3002\u6ce8\u610f\uff1a\u82e5\u60a8\u7684\u7ba1\u7406\u54e1\u9700\u8981\u591a\u9805\u9a57\u8b49\u8868\u55ae\uff0c\u7cfb\u7d71\u6703\u5c07\u60a8\u91cd\u65b0\u5c0e\u5411\u81f3\u6b64\u9801\u9762\uff0c\u76f4\u5230\u9054\u5230\u6240\u6709\u9a57\u8b49\u6e96\u5247\u3002
 Display_RecoverTokenSendChoices=\u70ba\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u6211\u5011\u5c07\u50b3\u9001\u5b89\u5168\u6027\u4ee3\u78bc\u7d66\u60a8\u3002\u8acb\u9078\u64c7\u60a8\u60f3\u7528\u4f86\u63a5\u6536\u5b89\u5168\u6027\u4ee3\u78bc\u7684\u65b9\u5f0f\u3002
 Display_RecoverTokenSendChoiceEmail=\u50b3\u9001\u4ee3\u78bc\u81f3\u60a8\u8a3b\u518a\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u3002
 Display_RecoverTokenSendChoiceSMS=\u4f7f\u7528\u7c21\u8a0a (SMS) \u50b3\u9001\u4ee3\u78bc\u81f3\u60a8\u7684\u624b\u6a5f\u3002
@@ -150,9 +150,9 @@ Display_ResponsesPrompt=\u8acb\u8f38\u5165\u60a8\u7684\u5b89\u5168\u6027\u7b54\u
 Display_SelectionIndicator=\u8acb\u9078\u53d6\u6e05\u55ae\u4e2d\u7684\u554f\u984c\u9805\u76ee
 Display_SearchCompleted=\u5df2\u5b8c\u6210\u641c\u5c0b\u3002
 Display_SearchResultsInfo=\u5df2\u50b3\u56de\u5728 %2% \u4e2d\u7684 %1% \u500b\u7d50\u679c\u3002
-Display_SearchResultsExceeded=\u641c\u5c0b\u7d50\u679c\u8d85\u904e\u641c\u5c0b\u5927\u5c0f\u4e0a\u9650\u3002
+Display_SearchResultsExceeded=\u641c\u5c0b\u7d50\u679c\u8d85\u904e\u6700\u5927\u641c\u5c0b\u5c3a\u5bf8
 Display_SetRandomPasswordPrompt=\u8981\u70ba\u6b64\u4f7f\u7528\u8005\u8a2d\u5b9a\u65b0\u7684\u96a8\u6a5f\u5bc6\u78bc\u55ce\uff1f
-Display_SearchResultsNone=\u6c92\u6709\u7d50\u679c\u3002
+Display_SearchResultsNone=\u6c92\u6709\u7d50\u679c
 Display_Second=\u79d2
 Display_Seconds=\u79d2
 Display_SetupHelpdeskResponses=<p>\u60a8\u7684\u7ba1\u7406\u54e1\u8981\u6c42\u60a8\u63d0\u4f9b\u4e0b\u5217\u7b54\u6848\u3002\u60a8\u806f\u7d61\u670d\u52d9\u53f0\u4ee5\u5c0b\u6c42\u5354\u52a9\u6642\uff0c\u7cfb\u7d71\u53ef\u4ee5\u4f7f\u7528\u9019\u4e9b\u7b54\u6848\u9a57\u8b49\u60a8\u7684\u8eab\u5206\u3002</p>
@@ -170,7 +170,7 @@ Display_TokenDestination=\u8a18\u865f\u76ee\u7684\u5730
 Display_TokenResend=\u60a8\u7684\u5b89\u5168\u4ee3\u78bc\u5c07\u7acb\u523b\u62b5\u9054\u3002\u82e5\u60a8\u5df2\u7b49\u5019\u591a\u6642\u4e14\u5c1a\u672a\u6536\u5230\u4ee3\u78bc\uff0c\u8acb\u6309\u4e00\u4e0b\u91cd\u65b0\u50b3\u9001\u4ee3\u78bc\u6309\u9215\u4ee5\u63a5\u6536\u65b0\u7684\u4ee3\u78bc\u3002
 Display_UsernameHeader=@User\:ID@
 Display_UsernameFooter=@User\:ID@
-Display_WarnExistingOtpSecretTime=\u60a8\u5df2\u65bc <span class\="timestamp">%1%</span> \u8a3b\u518a\u88dd\u7f6e\u3002\u60a8\u53ef\u4ee5\u5728\u4e0b\u65b9\u8f38\u5165\u7522\u751f\u7684\u4ee3\u78bc\uff0c\u4ee5\u6e2c\u8a66\u76ee\u524d\u7684\u88dd\u7f6e\u3002\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u5247\u53ef\u4ee5\u91cd\u65b0\u8a2d\u5b9a\u76ee\u524d\u7684\u88dd\u7f6e\u3002
+Display_WarnExistingOtpSecretTime=\u60a8\u5df2\u7d93\u5728 <span class="timestamp">%1%</span> \u4e0a\u8a3b\u518a\u60a8\u7684\u88dd\u7f6e\u3002\u60a8\u53ef\u4ee5\u900f\u904e\u5728\u7522\u751f\u7684\u4ee3\u78bc\u4e0b\u65b9\u8f38\u5165\u4f86\u6e2c\u8a66\u60a8\u76ee\u524d\u7684\u88dd\u7f6e\u3002\u82e5\u60a8\u7e7c\u7e8c\uff0c\u60a8\u53ef\u4ee5\u91cd\u65b0\u8a2d\u5b9a\u60a8\u76ee\u524d\u7684\u88dd\u7f6e\u3002
 Display_WarnExistingOtpSecret=\u60a8\u5df2\u8a3b\u518a\u88dd\u7f6e\u3002\u60a8\u53ef\u4ee5\u5728\u4e0b\u65b9\u8f38\u5165\u7522\u751f\u7684\u4ee3\u78bc\uff0c\u4ee5\u6e2c\u8a66\u76ee\u524d\u7684\u88dd\u7f6e\u3002\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u5247\u53ef\u4ee5\u91cd\u65b0\u8a2d\u5b9a\u76ee\u524d\u7684\u88dd\u7f6e\u3002
 Display_WarnExistingResponseTime=\u60a8\u5df2\u65bc <span class\="timestamp">%1%</span> \u8a2d\u5b9a\u8655\u7406\u5b89\u5168/\u56de\u61c9\u7b54\u6848\u3002\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u5247\u53ef\u4ee5\u91cd\u65b0\u56de\u7b54\u554f\u984c\u3002
 Display_WarnExistingResponse=\u60a8\u5df2\u8a2d\u5b9a\u8655\u7406\u5b89\u5168/\u56de\u61c9\u7b54\u6848\u3002\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u5247\u53ef\u4ee5\u91cd\u65b0\u56de\u7b54\u554f\u984c\u3002
@@ -320,7 +320,7 @@ Title_DeleteAccount=\u522a\u9664\u6211\u7684\u5e33\u6236
 Title_Management=\u7ba1\u7406
 Title_DirectReports=\u76f4\u5c6c\u4e0b\u5c6c
 Title_Organization=\u7d44\u7e54
-Tooltip_PasswordStrength=\u5bc6\u78bc\u5f37\u5ea6\u8a08\u91cf\u6703\u986f\u793a\u731c\u6e2c\u60a8\u5bc6\u78bc\u7684\u96e3\u6613\u5ea6\u3002\u5617\u8a66\u4e0b\u5217\u65b9\u6cd5\u4ee5\u63d0\u9ad8\u60a8\u7684\u5bc6\u78bc\u6548\u529b\uff1a<ul><li>\u52a0\u9577\u5bc6\u78bc</li><li>\u8acb\u52ff\u4f7f\u7528\u91cd\u8907\u7684\u5b57\u6bcd\u6216\u6578\u5b57</li><li>\u4f7f\u7528\u6df7\u5408 (\u5927\u5beb\u548c\u5c0f\u5beb) \u5b57\u6bcd</li><li>\u52a0\u5165\u66f4\u591a\u6578\u5b57</li><li>\u52a0\u5165\u66f4\u591a\u7b26\u865f\u5b57\u5143</li></ul>
+Tooltip_PasswordStrength=\u5bc6\u78bc\u5f37\u5ea6\u8868\u986f\u793a\u8981\u731c\u6e2c\u60a8\u7684\u5bc6\u78bc\u662f\u591a\u7c21\u55ae\u7684\u4e8b\u3002\u5617\u8a66\u4ee5\u4e0b\u65b9\u6cd5\u4f86\u589e\u52a0\u60a8\u7684\u5bc6\u78bc\u5f37\u5ea6\uff1a<ul><li>\u5c07\u5bc6\u78bc\u52a0\u9577</li><li>\u8acb\u52ff\u91cd\u8907\u5b57\u6bcd\u6216\u6578\u5b57</li><li>\u4f7f\u7528\u6df7\u5408 (\u5927\u5c0f\u548c\u5c0f\u5beb) \u5b57\u6bcd</li><li>\u65b0\u589e\u66f4\u591a\u6578\u5b57</li><li>\u65b0\u589e\u66f4\u591a\u7b26\u865f\u5b57\u5143</li></ul>
 Confirm_DeleteUser=\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u7cfb\u7d71\u4fbf\u6703\u6c38\u4e45\u522a\u9664\u9078\u53d6\u7684\u4f7f\u7528\u8005\u3002\u6b64\u52d5\u4f5c\u7121\u6cd5\u5fa9\u539f\u3002
 Confirm=\u60a8\u662f\u5426\u8981\u7e7c\u7e8c\uff1f
 Value_False=\u5047

+ 2 - 2
src/main/resources/password/pwm/i18n/Message_ca.properties

@@ -162,7 +162,7 @@ Success_ChangedHelpdeskPassword=La contrasenya de l'usuari s'ha canviat correcta
 Success_PasswordReset=La contrasenya de %1% s'ha definit correctament.
 Success_PasswordSend=La contrasenya nova s'ha enviat a %1%.  Tanqui la finestra i inici\u00ef la sessi\u00f3 amb la contrasenya nova.
 Success_ResponsesMeetRules=Les respostes compleixen els requisits. Cliqui Desa les respostes quan estigui preparat.
-Success_SetupResponse=Gr\u00e0cies. Les preguntes i les respostes secretes s'han desat correctament. Si alguna vegada oblida la contrasenya, pot utilitzar les respostes a aquestes preguntes per restablir la contrasenya.
+Success_SetupResponse=Gr\u00e0cies. Les preguntes i les respostes secretes s'han desat correctament. Si alguna vegada oblida la contrasenya, pot utilitzar les respostes a aquestes preguntes per restablir-la.
 Success_Unknown=L'operaci\u00f3 ha finalitzat correctament.
 Success_UnlockAccount=El compte s'ha desbloquejat.
 Success_UpdateGuest=El compte de convidat s'ha actualitzat correctament. L'usuari convidat rebr\u00e0 una notificaci\u00f3 sempre que s'hagi introdu\u00eft un correu electr\u00f2nic.
@@ -170,4 +170,4 @@ Success_UpdateProfile=La informaci\u00f3 d'usuari s'ha actualitzat correctament.
 Success_UpdateForm=Tot est\u00e0 llest per actualitzar el perfil. Continu\u00ef quan estigui preparat.
 Success_Action=L'acci\u00f3 %1% ha finalitzat correctament.
 Success_OtpSetup=La inscripci\u00f3 del dispositiu ha finalitzat correctament.
-Success_TokenResend=Us hem enviat un codi de seguretat nou.
+Success_TokenResend=Li hem enviat un codi de seguretat nou.

+ 1 - 1
src/main/resources/password/pwm/i18n/Message_de.properties

@@ -94,7 +94,7 @@ Requirement_MinNumericPlural=Muss mindestens %1% Zahlen enthalten.
 Requirement_MinSpecial=Muss mindestens %1% Symbolzeichen (nicht alphanumerisches Zeichen) enthalten.
 Requirement_MinSpecialPlural=Muss mindestens %1% Symbolzeichen (nicht alphanumerische Zeichen) enthalten.
 Requirement_MinUnique=Muss mindestens %1% eindeutiges Zeichen enthalten.
-Requirement_MinUniquePlural=Muss mindestens %1% eindeutige Zeichen enthalten.
+Requirement_MinUniquePlural=Muss mindestens %1% Zeichen enthalten, die nur 1 Mal vorkommen.
 Requirement_MinUpper=Muss mindestens %1% Gro\u00dfbuchstaben enthalten.
 Requirement_MinUpperPlural=Muss mindestens %1% Gro\u00dfbuchstaben enthalten.
 Requirement_NotCaseSensitive=Die Gro\u00df- und Kleinschreibung des Passworts muss nicht beachtet werden.

+ 2 - 2
src/main/resources/password/pwm/i18n/Message_es.properties

@@ -85,8 +85,8 @@ Requirement_MaxUpperPlural=No puede incluir m\u00e1s de %1% letras en may\u00fas
 Requirement_MinAlpha=Debe incluir al menos %1% letra.
 Requirement_MinAlphaPlural=Debe incluir al menos %1% letras.
 Requirement_MinimumFrequency=No se puede cambiar m\u00e1s de una vez cada %1%.
-Requirement_MinLength=Deben tener al menos %1% car\u00e1cter.
-Requirement_MinLengthPlural=Deben tener al menos %1% caracteres.
+Requirement_MinLength=Debe tener al menos %1% car\u00e1cter.
+Requirement_MinLengthPlural=Debe tener al menos %1% caracteres.
 Requirement_MinLower=Debe tener al menos %1% letra en min\u00fascula.
 Requirement_MinLowerPlural=Debe tener al menos %1% letras en min\u00fascula.
 Requirement_MinNumeric=Debe incluir al menos %1% n\u00famero.

+ 1 - 1
src/main/resources/password/pwm/i18n/Message_nl.properties

@@ -56,7 +56,7 @@ Eventlog_SetupOtpSecret=OTP-geheim instellen
 EventLog_UpdateProfile=Attributen bijwerken
 EventLog_DeleteAccount=Account verwijderen
 Requirement_ADComplexity=Moet minimaal drie typen tekens (naar keuze) bevatten: <ul><li>hoofdletters (A-Z)</li><li>kleine letters (a-z)</li><li>cijfers (0-9)</li><li>speciale tekens (!, #, $, enzovoort)</li></ul>
-Requirement_ADComplexity2008=Moet minimaal %1% typen tekens (naar keuze) bevatten: <ul><li>hoofdletters (A-Z)</li><li>kleine letters (a-z)</li><li>cijfers (0-9)</li><li>speciale tekens (!, #, $, enzovoort)</li><li>Tekens van andere talen worden hierboven niet weergegeven</li></ul>
+Requirement_ADComplexity2008=Moet minimaal %1% typen tekens (naar keuze) bevatten: <ul><li>hoofdletters (A-Z)</li><li>kleine letters (a-z)</li><li>cijfers (0-9)</li><li>speciale tekens (!, #, $, enzovoort)</li><li>Tekens van andere talen die hierboven niet worden weergegeven</li></ul>
 Requirement_AllowNumeric=Mag geen enkel numeriek teken bevatten.
 Requirement_AllowSpecial=Mag alleen bestaan uit letters en/of cijfers.
 Requirement_CaseSensitive=Het wachtwoord is hoofdlettergevoelig.

+ 1 - 1
src/main/resources/password/pwm/i18n/Message_ru.properties

@@ -102,7 +102,7 @@ Requirement_OldChar=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d
 Requirement_OldCharPlural=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f: %1%.
 Requirement_RequiredChars=\u0414\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432:
 Requirement_UniqueRequired=\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0440\u0430\u043d\u0435\u0435.
-Requirement_WordList=\u041d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0441 \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.
+Requirement_WordList=\u041d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u043c \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0438\u043b\u0438 \u043e\u0431\u0449\u0435\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.
 Rule_PolicyEnabled=\u041f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430
 Rule_MinimumLength=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430
 Rule_MaximumLength=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043b\u0438\u043d\u0430

+ 2 - 0
src/main/resources/password/pwm/i18n/PwmSetting.properties

@@ -606,6 +606,7 @@ Setting_Description_recovery.response.readPreference=Select the location where @
 Setting_Description_recovery.response.writePreference=<p>Select the location where @PwmAppName@ writes the responses.  @PwmAppName@ writes to all storage methods when the user configures their response answers.</p><p><b>WARNING\: </b>Never use the LocalDB to store responses in a production system as there are no methods to make the LocalDB storage redundant, nor are optimal backup methods available for the LocalDB.</p>
 Setting_Description_recovery.searchFilter=Add an LDAP search filter @PwmAppName@ uses to search for users during forgotten password recovery. The LDAP search filter must include each attribute in the <b>Forgotten Password User Search Form</b>.  @PwmAppName@ replaces tokens made of a form item name (such as <code>cn</code>) enclosed with a percent sign <code>%cn%</code> with values supplied by the user.<br><br>For example, if the <b>Activate User Form</b> included the attributes <code>cn</code> and <code>sn</code>, then this filter might be appropriate\:<br><br><code>(&amp;(objectClass\=person)(cn\=%cn%)(sn\=%sn%))</code><br><br>If this setting is left blank, @PwmAppName@ automatically generates a search filter based on the required items in the <b>Forgotten Password User Search Form</b>.
 Setting_Description_recovery.sendNewPassword.sendMethod=Select the method to send new password to users when the <b>Forgotten Password Success Action</b> is set to <b>Send new password</b>.
+Setting_Description_recovery.token.resend.enable=Allow the user to resend a token in case they did not receive it.
 Setting_Description_recovery.verificationMethods=Select the verification methods @PwmAppName@ uses during the forgotten password process.  The users must satisfy each option set to required.  The users can then select any of the remaining optional methods until they complete the minimum number of optional methods.<br/><br/>You can modify tthe names and a description shown to users for these methods by editing the display text keys for <code>Field_VerificationMethod[Method]</code> and <code>Description_VerificationMethod[Method]</code> where <code>[Method]</code> is the method type.
 Setting_Description_reporting.enable=Enable daily reporting job.  When enabled, @PwmAppName@ will execute a daily report update job.  
 Setting_Description_reporting.job.intensity=Control the level of intensity of a reporting job execution.  Higher levels will complete the report job faster but cause more workload on @PwmAppName@ and the LDAP directory.
@@ -1085,6 +1086,7 @@ Setting_Label_recovery.response.readPreference=Response Read Location
 Setting_Label_recovery.response.writePreference=Response Write Location
 Setting_Label_recovery.searchFilter=Forgotten Password User Search Filter
 Setting_Label_recovery.sendNewPassword.sendMethod=New Password Send Method
+Setting_Label_recovery.token.resend.enable=Allow Token Resend
 Setting_Label_recovery.verificationMethods=Verification Methods
 Setting_Label_reporting.enable=Enable Daily Reporting Job
 Setting_Label_reporting.job.intensity=Reporting Job Intensity

+ 17 - 9
src/main/webapp/WEB-INF/jsp/changepassword-agreement.jsp

@@ -31,7 +31,9 @@
 <%@ include file="fragment/header.jsp" %>
 <body class="nihilo">
 <div id="wrapper">
-    <% JspUtility.setFlag(pageContext, PwmRequestFlag.HIDE_HEADER_BUTTONS); %>
+    <pwm:if test="<%=PwmIfTest.forcedPageView%>">
+        <% JspUtility.setFlag(pageContext, PwmRequestFlag.HIDE_HEADER_BUTTONS); %>
+    </pwm:if>
     <jsp:include page="fragment/header-body.jsp">
         <jsp:param name="pwm.PageName" value="Title_ChangePassword"/>
     </jsp:include>
@@ -51,8 +53,8 @@
                     <input type="checkbox" id="agreeCheckBox"/>
                     <pwm:display key="Button_Agree"/>
                 </label>
-                    <br/>
-                    <br/>
+                <br/>
+                <br/>
                 <input type="hidden" name="processAction" value="agree"/>
                 <button type="submit" name="button" class="btn" id="button_continue">
                     <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-forward"></span></pwm:if>
@@ -60,12 +62,18 @@
                 </button>
                 <input type="hidden" name="pwmFormID" id="pwmFormID" value="<pwm:FormID/>"/>
             </form>
-            <form action="<pwm:url url='<%=PwmServletDefinition.Logout.servletUrl()%>' addContext="true"/>" method="post" enctype="application/x-www-form-urlencoded">
-                <button type="submit" name="button" class="btn" id="button_logout">
-                    <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-sign-out"></span></pwm:if>
-                    <pwm:display key="Button_Logout"/>
-                </button>
-            </form>
+            <pwm:if test="<%=PwmIfTest.forcedPageView%>">
+                <form action="<pwm:url url='<%=PwmServletDefinition.Logout.servletUrl()%>' addContext="true"/>" method="post" enctype="application/x-www-form-urlencoded">
+                    <button type="submit" name="button" class="btn" id="button_logout">
+                        <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-sign-out"></span></pwm:if>
+                        <pwm:display key="Button_Logout"/>
+                    </button>
+                </form>
+            </pwm:if>
+            <pwm:if test="<%=PwmIfTest.forcedPageView%>" negate="true">
+                <%@ include file="/WEB-INF/jsp/fragment/cancel-button.jsp" %>
+                <%@ include file="/WEB-INF/jsp/fragment/cancel-form.jsp" %>
+            </pwm:if>
         </div>
     </div>
     <div class="push"></div>

+ 1 - 1
src/main/webapp/WEB-INF/jsp/forgottenpassword-entertoken.jsp

@@ -26,7 +26,7 @@
 <%@ page import="password.pwm.http.servlet.forgottenpw.ForgottenPasswordServlet"%>
 <%@ page import="password.pwm.http.tag.conditional.PwmIfTest" %>
 <%@ page import="password.pwm.http.PwmRequestAttribute" %>
-<%  final boolean resendEnabled = Boolean.parseBoolean(JspUtility.getPwmRequest(pageContext).getConfig().readAppProperty(AppProperty.TOKEN_RESEND_ENABLED)); %>
+<%  final boolean resendEnabled = (Boolean)JspUtility.getAttribute(pageContext, PwmRequestAttribute.ForgottenPasswordResendTokenEnabled); %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <%@ include file="fragment/header.jsp" %>
 <html lang="<pwm:value name="<%=PwmValue.localeCode%>"/>" dir="<pwm:value name="<%=PwmValue.localeDir%>"/>">

+ 25 - 1
src/main/webapp/WEB-INF/jsp/forgottenpassword-tokenchoice.jsp

@@ -1,4 +1,5 @@
-<%@ page import="password.pwm.http.tag.conditional.PwmIfTest" %>
+<%@ page import="password.pwm.bean.TokenDestinationItem" %>
+<%@ page import="java.util.List" %>
 <%--
   ~ Password Management Servlets (PWM)
   ~ http://www.pwm-project.org
@@ -22,6 +23,7 @@
   --%>
 
 <!DOCTYPE html>
+<% List<TokenDestinationItem> tokenDestinationItems = (List)JspUtility.getAttribute(pageContext, PwmRequestAttribute.ForgottenPasswordTokenDestItems); %>
 <%@ page language="java" session="true" isThreadSafe="true" contentType="text/html" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <html lang="<pwm:value name="<%=PwmValue.localeCode%>"/>" dir="<pwm:value name="<%=PwmValue.localeDir%>"/>">
@@ -52,6 +54,17 @@
                     <pwm:display key="Display_RecoverTokenSendChoiceEmail"/>
                 </td>
             </tr>
+            <tr>
+                <td>
+                </td>
+                <td>
+                    <% for (final TokenDestinationItem item : tokenDestinationItems) { %>
+                    <% if (item.getType() == TokenDestinationItem.Type.email) { %>
+                    <%=item.getDisplay()%>
+                    <% } %>
+                    <% } %>
+                </td>
+            </tr>
             <tr>
                 <td>
                     &nbsp;
@@ -73,6 +86,17 @@
                     <pwm:display key="Display_RecoverTokenSendChoiceSMS"/>
                 </td>
             </tr>
+            <tr>
+                <td>
+                </td>
+                <td>
+                    <% for (final TokenDestinationItem item : tokenDestinationItems) { %>
+                    <% if (item.getType() == TokenDestinationItem.Type.sms) { %>
+                    <%=item.getDisplay()%>
+                    <% } %>
+                    <% } %>
+                </td>
+            </tr>
             <tr>
                 <td>
                     &nbsp;

+ 0 - 5
src/main/webapp/WEB-INF/jsp/fragment/header.jsp

@@ -30,14 +30,9 @@
 <%@ page import="password.pwm.http.tag.value.PwmValue" %>
 <%@ page import="password.pwm.http.PwmRequestFlag" %>
 <%@ page import="password.pwm.http.tag.url.PwmThemeURL" %>
-<%@ page import="org.apache.commons.lang3.StringUtils" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 
 <head>
-    <% if (StringUtils.isNotBlank(request.getParameter("baseHref"))) { %>
-        <base href="${param.baseHref}" />
-    <% } %>
-
     <pwm:if test="<%=PwmIfTest.authenticated%>" negate="true"><title><pwm:display key="Title_TitleBar"/></title></pwm:if>
     <pwm:if test="<%=PwmIfTest.authenticated%>"><title><pwm:display key="Title_TitleBarAuthenticated"/></title></pwm:if>
     <meta http-equiv="content-type" content="text/html;charset=utf-8"/>

+ 16 - 8
src/main/webapp/WEB-INF/jsp/updateprofile-agreement.jsp

@@ -30,7 +30,9 @@
 <%@ include file="fragment/header.jsp" %>
 <body class="nihilo">
 <div id="wrapper">
-    <% JspUtility.setFlag(pageContext, PwmRequestFlag.HIDE_HEADER_BUTTONS); %>
+    <pwm:if test="<%=PwmIfTest.forcedPageView%>">
+        <% JspUtility.setFlag(pageContext, PwmRequestFlag.HIDE_HEADER_BUTTONS); %>
+    </pwm:if>
     <jsp:include page="fragment/header-body.jsp">
         <jsp:param name="pwm.PageName" value="Title_UpdateProfile"/>
     </jsp:include>
@@ -55,13 +57,19 @@
                 </button>
                 <input type="hidden" name="pwmFormID" id="pwmFormID" value="<pwm:FormID/>"/>
             </form>
-            <form action="<pwm:url url='<%=PwmServletDefinition.Logout.servletUrl()%>' addContext="true"/>" method="post" enctype="application/x-www-form-urlencoded">
-                <button type="submit" name="button" class="btn" id="button_logout">
-                    <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-sign-out"></span></pwm:if>
-                    <pwm:display key="Button_Logout"/>
-                </button>
-                <input type="hidden" name="pwmFormID" value="<pwm:FormID/>"/>
-            </form>
+            <pwm:if test="<%=PwmIfTest.forcedPageView%>">
+                <form action="<pwm:url url='<%=PwmServletDefinition.Logout.servletUrl()%>' addContext="true"/>" method="post" enctype="application/x-www-form-urlencoded">
+                    <button type="submit" name="button" class="btn" id="button_logout">
+                        <pwm:if test="<%=PwmIfTest.showIcons%>"><span class="btn-icon pwm-icon pwm-icon-sign-out"></span></pwm:if>
+                        <pwm:display key="Button_Logout"/>
+                    </button>
+                    <input type="hidden" name="pwmFormID" value="<pwm:FormID/>"/>
+                </form>
+            </pwm:if>
+            <pwm:if test="<%=PwmIfTest.forcedPageView%>" negate="true">
+                <%@ include file="/WEB-INF/jsp/fragment/cancel-button.jsp" %>
+                <%@ include file="/WEB-INF/jsp/fragment/cancel-form.jsp" %>
+            </pwm:if>
         </div>
     </div>
     <div class="push"></div>

+ 1 - 4
src/test/java/password/pwm/health/HealthMessageTest.java

@@ -4,10 +4,8 @@ import org.junit.Assert;
 import org.junit.Test;
 import password.pwm.PwmConstants;
 import password.pwm.config.Configuration;
-import password.pwm.config.stored.StoredConfiguration;
 import password.pwm.config.stored.StoredConfigurationImpl;
 import password.pwm.error.PwmUnrecoverableException;
-import password.pwm.i18n.Config;
 
 import java.util.HashSet;
 import java.util.Locale;
@@ -29,8 +27,7 @@ public class HealthMessageTest {
         final Configuration configuration = new Configuration(StoredConfigurationImpl.newStoredConfiguration());
         final Locale locale = PwmConstants.DEFAULT_LOCALE;
         for (final HealthMessage healthMessage : HealthMessage.values()) {
-            final String msg = healthMessage.getDescription(locale, configuration, new String[]{"field1", "field2"});
-            System.out.println(msg);
+            healthMessage.getDescription(locale, configuration, new String[]{"field1", "field2"});
         }
     }
 }