소스 검색

bugfix ominbus

jrivard 10 년 전
부모
커밋
8fe9b926ed
80개의 변경된 파일4180개의 추가작업 그리고 2792개의 파일을 삭제
  1. 4 0
      pwm/servlet/src/password/pwm/AppProperty.java
  2. 4 0
      pwm/servlet/src/password/pwm/AppProperty.properties
  3. 0 27
      pwm/servlet/src/password/pwm/PwmApplication.java
  4. 5 1
      pwm/servlet/src/password/pwm/PwmConstants.java
  5. 2 5
      pwm/servlet/src/password/pwm/bean/UserInfoBean.java
  6. 96 0
      pwm/servlet/src/password/pwm/config/PwmSetting.xml
  7. 2 2
      pwm/servlet/src/password/pwm/config/profile/NewUserProfile.java
  8. 0 4
      pwm/servlet/src/password/pwm/http/PwmSession.java
  9. 13 9
      pwm/servlet/src/password/pwm/http/bean/ConfigManagerBean.java
  10. 0 141
      pwm/servlet/src/password/pwm/http/bean/HelpdeskBean.java
  11. 2 1
      pwm/servlet/src/password/pwm/http/bean/LoginInfoBean.java
  12. 2 32
      pwm/servlet/src/password/pwm/http/filter/AuthenticationFilter.java
  13. 2 2
      pwm/servlet/src/password/pwm/http/filter/SessionFilter.java
  14. 15 0
      pwm/servlet/src/password/pwm/http/servlet/ConfigEditorServlet.java
  15. 255 139
      pwm/servlet/src/password/pwm/http/servlet/ConfigManagerServlet.java
  16. 13 6
      pwm/servlet/src/password/pwm/http/servlet/ForgottenPasswordServlet.java
  17. 1 2
      pwm/servlet/src/password/pwm/http/servlet/ForgottenUsernameServlet.java
  18. 91 29
      pwm/servlet/src/password/pwm/http/servlet/OAuthConsumerServlet.java
  19. 1 1
      pwm/servlet/src/password/pwm/http/servlet/PwmServlet.java
  20. 11 22
      pwm/servlet/src/password/pwm/http/servlet/SetupOtpServlet.java
  21. 66 0
      pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskClientDataBean.java
  22. 96 0
      pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskDetailInfoBean.java
  23. 27 0
      pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskSearchResultsBean.java
  24. 141 128
      pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskServlet.java
  25. 2 2
      pwm/servlet/src/password/pwm/i18n/Config.properties
  26. 6 6
      pwm/servlet/src/password/pwm/i18n/ConfigEditor.properties
  27. 80 19
      pwm/servlet/src/password/pwm/i18n/Display_de.properties
  28. 81 20
      pwm/servlet/src/password/pwm/i18n/Display_es.properties
  29. 295 234
      pwm/servlet/src/password/pwm/i18n/Display_fr.properties
  30. 291 230
      pwm/servlet/src/password/pwm/i18n/Display_ja.properties
  31. 291 230
      pwm/servlet/src/password/pwm/i18n/Display_pt_BR.properties
  32. 41 6
      pwm/servlet/src/password/pwm/i18n/Display_sv.properties
  33. 291 230
      pwm/servlet/src/password/pwm/i18n/Display_zh_TW.properties
  34. 20 6
      pwm/servlet/src/password/pwm/i18n/Error_de.properties
  35. 21 7
      pwm/servlet/src/password/pwm/i18n/Error_es.properties
  36. 21 7
      pwm/servlet/src/password/pwm/i18n/Error_fr.properties
  37. 21 7
      pwm/servlet/src/password/pwm/i18n/Error_ja.properties
  38. 168 154
      pwm/servlet/src/password/pwm/i18n/Error_pt_BR.properties
  39. 15 6
      pwm/servlet/src/password/pwm/i18n/Error_sv.properties
  40. 168 154
      pwm/servlet/src/password/pwm/i18n/Error_zh_TW.properties
  41. 62 4
      pwm/servlet/src/password/pwm/i18n/Message_de.properties
  42. 61 3
      pwm/servlet/src/password/pwm/i18n/Message_es.properties
  43. 165 107
      pwm/servlet/src/password/pwm/i18n/Message_fr.properties
  44. 165 107
      pwm/servlet/src/password/pwm/i18n/Message_ja.properties
  45. 165 107
      pwm/servlet/src/password/pwm/i18n/Message_pt_BR.properties
  46. 12 1
      pwm/servlet/src/password/pwm/i18n/Message_sv.properties
  47. 165 107
      pwm/servlet/src/password/pwm/i18n/Message_zh_TW.properties
  48. 59 3
      pwm/servlet/src/password/pwm/ldap/LdapPermissionTester.java
  49. 6 16
      pwm/servlet/src/password/pwm/ldap/UserStatusReader.java
  50. 1 2
      pwm/servlet/src/password/pwm/util/cli/MainClass.java
  51. 1 1
      pwm/servlet/src/password/pwm/util/cli/UserReportCommand.java
  52. 1 3
      pwm/servlet/src/password/pwm/util/intruder/IntruderManager.java
  53. 1 0
      pwm/servlet/src/password/pwm/util/localdb/LocalDBUtility.java
  54. 12 0
      pwm/servlet/src/password/pwm/util/logging/PwmLogEvent.java
  55. 1 2
      pwm/servlet/src/password/pwm/util/macro/MacroMachine.java
  56. 12 2
      pwm/servlet/src/password/pwm/util/operations/ActionExecutor.java
  57. 3 2
      pwm/servlet/src/password/pwm/util/operations/CrService.java
  58. 1 3
      pwm/servlet/src/password/pwm/ws/client/rest/RestTokenDataClient.java
  59. 4 2
      pwm/servlet/src/password/pwm/ws/server/RestResultBean.java
  60. 6 13
      pwm/servlet/src/password/pwm/ws/server/rest/RestCheckPasswordServer.java
  61. 1 1
      pwm/servlet/src/password/pwm/ws/server/rest/bean/AppDashboardData.java
  62. 1 1
      pwm/servlet/web/WEB-INF/jsp/admin-dashboard.jsp
  63. 30 31
      pwm/servlet/web/WEB-INF/jsp/configeditor.jsp
  64. 26 20
      pwm/servlet/web/WEB-INF/jsp/helpdesk-detail.jsp
  65. 2 5
      pwm/servlet/web/WEB-INF/jsp/helpdesk.jsp
  66. 3 1
      pwm/servlet/web/WEB-INF/jsp/login.jsp
  67. 3 3
      pwm/servlet/web/WEB-INF/jsp/setupotpsecret.jsp
  68. BIN
      pwm/servlet/web/WEB-INF/lib/zxing-core-2.0.jar
  69. BIN
      pwm/servlet/web/WEB-INF/lib/zxing-core-3.2.0.jar
  70. BIN
      pwm/servlet/web/WEB-INF/lib/zxing-javase-2.0.jar
  71. BIN
      pwm/servlet/web/WEB-INF/lib/zxing-javase-3.2.0.jar
  72. 1 1
      pwm/servlet/web/WEB-INF/web.xml
  73. 27 0
      pwm/servlet/web/public/resources/configStyle.css
  74. 1 1
      pwm/servlet/web/public/resources/js/changepassword.js
  75. 309 265
      pwm/servlet/web/public/resources/js/configeditor-settings.js
  76. 46 14
      pwm/servlet/web/public/resources/js/configeditor.js
  77. 16 5
      pwm/servlet/web/public/resources/js/configmanager.js
  78. 129 67
      pwm/servlet/web/public/resources/js/helpdesk.js
  79. 19 18
      pwm/servlet/web/public/resources/js/main.js
  80. 2 5
      pwm/servlet/web/public/resources/themes/tulips/style.css

+ 4 - 0
pwm/servlet/src/password/pwm/AppProperty.java

@@ -154,6 +154,8 @@ public enum AppProperty {
     OTP_RECOVERY_TOKEN_MACRO                        ("otp.recovery.macro"),
     OTP_RECOVERY_HASH_COUNT                         ("otp.recoveryHash.iterations"),
     OTP_RECOVERY_HASH_METHOD                        ("otp.recoveryHash.method"),
+    OTP_QR_IMAGE_HEIGHT                             ("otp.qrImage.height"),
+    OTP_QR_IMAGE_WIDTH                              ("otp.qrImage.width"),
     PASSWORD_RANDOMGEN_MAX_ATTEMPTS                 ("password.randomGenerator.maxAttempts"),
     PASSWORD_RANDOMGEN_MAX_LENGTH                   ("password.randomGenerator.maxLength"),
     PASSWORD_RANDOMGEN_JITTER_COUNT                 ("password.randomGenerator.jitter.count"),
@@ -185,6 +187,8 @@ public enum AppProperty {
     SECURITY_SHAREDHISTORY_HASH_NAME                ("security.sharedHistory.hashName"),
     SECURITY_SHAREDHISTORY_CASE_INSENSITIVE         ("security.sharedHistory.caseInsensitive"),
     SECURITY_CERTIFICATES_VALIDATE_TIMESTAMPS       ("security.certs.validateTimestamps"),
+    SECURITY_LDAP_BASEDN_RESOLVE_CANONICAL_DN       ("security.ldap.resolveCanonicalDN"),
+    SECURITY_LDAP_BASEDN_CANONICAL_CACHE_SECONDS    ("security.ldap.canonicalCacheSeconds"),
     TOKEN_REMOVAL_DELAY_MS                          ("token.removalDelayMS"),
     TOKEN_PURGE_BATCH_SIZE                          ("token.purgeBatchSize"),
     TOKEN_MAX_UNIQUE_CREATE_ATTEMPTS                ("token.maxUniqueCreateAttempts"),

+ 4 - 0
pwm/servlet/src/password/pwm/AppProperty.properties

@@ -142,6 +142,8 @@ otp.token.length=6
 otp.recovery.macro=@RandomChar:8:0123456789@
 otp.recoveryHash.iterations=1000
 otp.recoveryHash.method=SHA1
+otp.qrImage.height=200
+otp.qrImage.width=200
 password.randomGenerator.maxAttempts=2000
 password.randomGenerator.maxLength=1024
 password.randomGenerator.jitter.count=50
@@ -173,6 +175,8 @@ security.sharedHistory.hashIterations=100000
 security.sharedHistory.hashName=SHA-512
 security.sharedHistory.caseInsensitive=true
 security.certs.validateTimestamps=false
+security.ldap.resolveCanonicalDN=true
+security.ldap.canonicalCacheSeconds=30
 token.removalDelayMS=86400000
 token.purgeBatchSize=1000
 token.maxUniqueCreateAttempts=100

+ 0 - 27
pwm/servlet/src/password/pwm/PwmApplication.java

@@ -22,7 +22,6 @@
 
 package password.pwm;
 
-import com.novell.ldapchai.ChaiConstant;
 import com.novell.ldapchai.ChaiFactory;
 import com.novell.ldapchai.ChaiUser;
 import com.novell.ldapchai.exception.ChaiUnavailableException;
@@ -224,9 +223,6 @@ public class PwmApplication {
         installTime = fetchInstallDate(startupTime);
         LOGGER.debug("this application instance first installed on " + PwmConstants.DEFAULT_DATETIME_FORMAT.format(installTime));
 
-        LOGGER.info(logEnvironment());
-        LOGGER.info(logDebugInfo());
-
         initServices();
 
         final TimeDuration totalTime = TimeDuration.fromCurrent(startTime);
@@ -483,29 +479,6 @@ public class PwmApplication {
         return newInstanceID;
     }
 
-    private static String logEnvironment() {
-        final Map<String,Object> envStats = new LinkedHashMap<>();
-        envStats.put("java.vm.vendor",System.getProperty("java.vm.vendor"));
-        envStats.put("java.vm.version",System.getProperty("java.vm.version"));
-        envStats.put("java.vm.name",System.getProperty("java.vm.name"));
-        envStats.put("java.home",System.getProperty("java.home"));
-
-        envStats.put("memmax",Runtime.getRuntime().maxMemory());
-        envStats.put("threads",Thread.activeCount());
-        envStats.put("chaiApi", ChaiConstant.CHAI_API_VERSION + ", b" + ChaiConstant.CHAI_API_BUILD_INFO);
-
-        return "environment info: " + JsonUtil.serializeMap(envStats);
-    }
-
-    private static String logDebugInfo() {
-        final Map<String,Object> debugStats = new LinkedHashMap<>();
-        debugStats.put("memfree",Runtime.getRuntime().freeMemory());
-        debugStats.put("memallocd",Runtime.getRuntime().totalMemory());
-        debugStats.put("memmax",Runtime.getRuntime().maxMemory());
-        debugStats.put("threads",Thread.activeCount());
-        return "debug info:" + JsonUtil.serializeMap(debugStats);
-    }
-
     public StatisticsManager getStatisticsManager() {
         return (StatisticsManager)pwmServices.get(StatisticsManager.class);
     }

+ 5 - 1
pwm/servlet/src/password/pwm/PwmConstants.java

@@ -65,7 +65,7 @@ public abstract class PwmConstants {
                 : servletVersion;
     }
 
-    public static final String CHAI_API_VERSION = com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION + " (" + com.novell.ldapchai.ChaiConstant.CHAI_API_BUILD_INFO + ")";
+    public static final String CHAI_API_VERSION = com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION;
 
     public static final String DEFAULT_CONFIG_FILE_FILENAME = readPwmConstantsBundle("defaultConfigFilename");
 
@@ -142,6 +142,10 @@ public abstract class PwmConstants {
         FormShowPasswordFields,
         FormData,
 
+        HelpdeskDetail,
+        HelpdeskObfuscatedDN,
+        HelpdeskUsername,
+
         ConfigFilename,
         ConfigLastModified,
         ConfigHasPassword,

+ 2 - 5
pwm/servlet/src/password/pwm/bean/UserInfoBean.java

@@ -28,10 +28,7 @@ import password.pwm.config.profile.PwmPasswordPolicy;
 import password.pwm.http.bean.PwmSessionBean;
 import password.pwm.util.otp.OTPUserRecord;
 
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 /**
  * A bean that is stored in the user's session.   Only information that is particular to logged in user is stored in the
@@ -43,7 +40,7 @@ import java.util.Map;
  * then there should not be a {@link UserInfoBean} in the HTTP session.
  *
  * @author Jason D. Rivard
- * @see password.pwm.ldap.UserStatusReader#populateUserInfoBean(SessionLabel, UserInfoBean, java.util.Locale, UserIdentity, com.novell.ldapchai.provider.ChaiProvider)
+ * @see password.pwm.ldap.UserStatusReader#populateUserInfoBean(Locale, UserIdentity)
  */
 public class UserInfoBean implements PwmSessionBean {
 // ------------------------------ FIELDS ------------------------------

+ 96 - 0
pwm/servlet/src/password/pwm/config/PwmSetting.xml

@@ -1695,6 +1695,102 @@
             <value locale="nl"><![CDATA[{"text":"Wat is uw favoriete film aller tijden?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
             <value locale="nl"><![CDATA[{"text":"Wie was uw minst geliefde leraar?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
             <value locale="nl"><![CDATA[{"text":"Van welk eten houdt u het minst?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie heißt die Hauptperson in Ihrem Lieblingsbuch?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie heißt Ihr Lieblingslehrer?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie heißt Ihr Lieblingshaustier?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie hieß Ihr bester Freund/Ihre beste Freundin aus der Kindheit?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Welche Sendung haben Sie als Kind am liebsten angeschaut?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie heißt Ihr Lieblingsautor?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Was essen Sie am liebsten?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie lautet der Kosename Ihres Partners?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Welches ist Ihre Lieblingsmannschaft?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"In welcher Straße haben Sie als Kind gewohnt?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie lautet Ihr Geburtsort?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Welches ist Ihr bevorzugtes Fahrzeug?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Welche historische Persönlichkeit würden Sie gerne kennenlernen?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie heißt der schlechteste Film, den Sie je gesehen haben?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Wie hieß der Lehrer, den Sie am wenigsten mochten?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="de"><![CDATA[{"text":"Was essen Sie überhaupt nicht gerne?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es el nombre del personaje principal de su libro favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es el nombre de su profesor favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es el nombre de su mascota favorita?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cómo se llamaba su mejor amigo del colegio?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál era su programa de televisión favorito cuando era niño?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Quién es su autor favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es su comida favorita?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es el apodo de su pareja?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es su equipo favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es el nombre de la calle en la que se crió?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿En qué ciudad nació?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es su vehículo favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"Si pudiera conocer a algún personaje histórico, ¿quién sería?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es la película que menos le gusta?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Quién era el profesor que menos le gustaba?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="es"><![CDATA[{"text":"¿Cuál es la comida que menos le gusta?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"お気に入りの本の主人公の名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"お気に入りの先生の名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"お気に入りのペットの名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"子供の頃の親友の名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"子供の頃好きだったテレビ番組は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"好きな作家は誰ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"好きな食べ物は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"パートナーのニックネームは何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"好きなチームは何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"あなたが育った通りの名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"あなたが産まれた市町村区の名前は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"お気に入りの車は何ですか」?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"歴史上の人物に会えるとしたら、誰に会いたいですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"これまでに見た中で嫌いな映画は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"嫌いな先生は誰でしたか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="ja"><![CDATA[{"text":"一番嫌いな食べ物は何ですか?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é o nome do personagem principal do seu livro favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é o nome do seu professor favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é o nome do seu animal de estimação favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual era o nome do seu melhor amigo de infância?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual era seu programa de TV favorito quando criança?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Quem é seu autor favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é sua comida favorita?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é o apelido do seu companheiro?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é seu time favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Em que rua você cresceu?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Em que cidade você nasceu?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é seu veículo favorito?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Se você pudesse conhecer alguém da história, quem seria?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é o filme de que você menos gostou na vida?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual era o professor de quem você menos gostava?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="pt_BR"><![CDATA[{"text":"Qual é a comida de que você menos gosta?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad heter huvudpersonen i din favoritbok?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad heter din favoritlärare?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad heter ditt favorithusdjur?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad hette din bästa kompis när du var barn?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilket var ditt favoritprogram på TV när du var liten?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vem är din favoritförfattare?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilken är din favoriträtt?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad är din partners smeknamn?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilket lag håller du på?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vad hette gatan där du växte upp?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"I vilken stad är du född?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilket är ditt favoritfordon?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Om du kunde träffa en historisk person, vem skulle du välja?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilken film tycker du är historiens sämsta?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilken lärare tyckte du sämst om?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="sv"><![CDATA[{"text":"Vilken mat tycker du sämst om?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的書籍主角姓名?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的老師姓名?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的寵物名字?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您兒時摯友的姓名?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您小時候最喜歡的節目?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的作家?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的食物?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您伴侶的綽號?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的隊伍?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您長大的街道名?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您出生的城市/城鎮?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最喜愛的交通工具?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"若您可以與歷史人物見面,會是哪一位歷史人物?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最不喜愛的電影?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最不喜愛的老師?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
+            <value locale="zh_TW"><![CDATA[{"text":"您最討厭的食物?","minLength":4,"maxLength":200,"adminDefined":true,enforceWordlist:true,maxQuestionCharsInAnswer:3}]]></value>
         </default>
     </setting>
     <setting key="challenge.requiredChallenges" level="1">

+ 2 - 2
pwm/servlet/src/password/pwm/config/profile/NewUserProfile.java

@@ -91,7 +91,7 @@ public class NewUserProfile extends AbstractProfile {
         final LdapProfile defaultLdapProfile = config.getDefaultLdapProfile();
         final String configuredNewUserPasswordDN = readSettingAsString(PwmSetting.NEWUSER_PASSWORD_POLICY_USER);
         if (configuredNewUserPasswordDN == null || configuredNewUserPasswordDN.length() < 1) {
-            final String errorMsg = "setting " + PwmSetting.NEWUSER_PASSWORD_POLICY_USER.toMenuLocationDebug(this.getIdentifier(),PwmConstants.DEFAULT_LOCALE) + " must have a value";
+            final String errorMsg = "the setting " + PwmSetting.NEWUSER_PASSWORD_POLICY_USER.toMenuLocationDebug(this.getIdentifier(),PwmConstants.DEFAULT_LOCALE) + " must have a value";
             throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_INVALID_CONFIG,errorMsg));
         } else {
 
@@ -110,7 +110,7 @@ public class NewUserProfile extends AbstractProfile {
                 lookupDN = configuredNewUserPasswordDN;
             }
 
-            if (lookupDN == null || lookupDN.isEmpty()) {
+            if (lookupDN.isEmpty()) {
                 throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_INVALID_CONFIG,"user ldap dn in setting " + PwmSetting.NEWUSER_PASSWORD_POLICY_USER.toMenuLocationDebug(null,PwmConstants.DEFAULT_LOCALE) + " can not be resolved"));
             } else {
                 try {

+ 0 - 4
pwm/servlet/src/password/pwm/http/PwmSession.java

@@ -149,10 +149,6 @@ public class PwmSession implements Serializable {
         return getSessionBean(LoginInfoBean.class);
     }
 
-    public HelpdeskBean getHelpdeskBean() {
-        return getSessionBean(HelpdeskBean.class);
-    }
-
     public UpdateProfileBean getUpdateProfileBean() {
         return getSessionBean(UpdateProfileBean.class);
     }

+ 13 - 9
pwm/servlet/src/password/pwm/http/bean/ConfigManagerBean.java

@@ -26,8 +26,8 @@ import password.pwm.config.StoredConfiguration;
 
 public class ConfigManagerBean implements PwmSessionBean {
     private StoredConfiguration configuration;
-    private boolean configLocked;
     private boolean passwordVerified;
+    private boolean configUnlockedWarningShown;
 
     private String prePasswordEntryUrl;
 
@@ -50,14 +50,6 @@ public class ConfigManagerBean implements PwmSessionBean {
         this.passwordVerified = passwordVerified;
     }
 
-    public boolean isConfigLocked() {
-        return configLocked;
-    }
-
-    public void setConfigLocked(boolean configLocked) {
-        this.configLocked = configLocked;
-    }
-
     public String getPrePasswordEntryUrl()
     {
         return prePasswordEntryUrl;
@@ -67,4 +59,16 @@ public class ConfigManagerBean implements PwmSessionBean {
     {
         this.prePasswordEntryUrl = prePasswordEntryUrl;
     }
+
+    public StoredConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public boolean isConfigUnlockedWarningShown() {
+        return configUnlockedWarningShown;
+    }
+
+    public void setConfigUnlockedWarningShown(boolean configUnlockedWarningShown) {
+        this.configUnlockedWarningShown = configUnlockedWarningShown;
+    }
 }

+ 0 - 141
pwm/servlet/src/password/pwm/http/bean/HelpdeskBean.java

@@ -1,141 +0,0 @@
-/*
- * Password Management Servlets (PWM)
- * http://code.google.com/p/pwm/
- *
- * Copyright (c) 2006-2009 Novell, Inc.
- * Copyright (c) 2009-2015 The PWM Project
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-package password.pwm.http.bean;
-
-import password.pwm.bean.UserInfoBean;
-import password.pwm.config.FormConfiguration;
-import password.pwm.event.UserAuditRecord;
-
-import java.io.Serializable;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-public class HelpdeskBean implements PwmSessionBean {
-    private String searchString;
-    private HelpdeskDetailInfo heldpdeskDetailInfo = new HelpdeskDetailInfo();
-
-    public static class HelpdeskDetailInfo implements Serializable {
-        private UserInfoBean userInfoBean = new UserInfoBean();
-        private String userDisplayName;
-
-        private boolean intruderLocked;
-        private boolean accountEnabled;
-        private boolean accountExpired;
-
-        private Date lastLoginTime;
-        private List<UserAuditRecord> userHistory;
-        private Map<FormConfiguration, String> searchDetails;
-        private String passwordSetDelta;
-
-        public String getUserDisplayName() {
-            return userDisplayName;
-        }
-
-        public void setUserDisplayName(String userDisplayName) {
-            this.userDisplayName = userDisplayName;
-        }
-
-        public UserInfoBean getUserInfoBean() {
-            return userInfoBean;
-        }
-
-        public void setUserInfoBean(UserInfoBean userInfoBean) {
-            this.userInfoBean = userInfoBean;
-        }
-
-        public boolean isIntruderLocked() {
-            return intruderLocked;
-        }
-
-        public void setIntruderLocked(boolean intruderLocked) {
-            this.intruderLocked = intruderLocked;
-        }
-
-        public boolean isAccountEnabled() {
-            return accountEnabled;
-        }
-
-        public void setAccountEnabled(boolean accountEnabled) {
-            this.accountEnabled = accountEnabled;
-        }
-
-        public Date getLastLoginTime() {
-            return lastLoginTime;
-        }
-
-        public void setLastLoginTime(Date lastLoginTime) {
-            this.lastLoginTime = lastLoginTime;
-        }
-
-        public List<UserAuditRecord> getUserHistory() {
-            return userHistory;
-        }
-
-        public void setUserHistory(List<UserAuditRecord> userHistory) {
-            this.userHistory = userHistory;
-        }
-
-        public Map<FormConfiguration,String> getSearchDetails() {
-            return searchDetails;
-        }
-
-        public void setSearchDetails(Map<FormConfiguration,String> searchDetails) {
-            this.searchDetails = searchDetails;
-        }
-
-        public String getPasswordSetDelta()
-        {
-            return passwordSetDelta;
-        }
-
-        public void setPasswordSetDelta(String passwordSetDelta)
-        {
-            this.passwordSetDelta = passwordSetDelta;
-        }
-
-        public boolean isAccountExpired() {
-            return accountExpired;
-        }
-
-        public void setAccountExpired(boolean accountExpired) {
-            this.accountExpired = accountExpired;
-        }
-    }
-
-    public String getSearchString() {
-        return searchString;
-    }
-
-    public void setSearchString(String searchString) {
-        this.searchString = searchString;
-    }
-
-    public HelpdeskDetailInfo getHeldpdeskDetailInfo() {
-        return heldpdeskDetailInfo;
-    }
-
-    public void setHeldpdeskDetailInfo(HelpdeskDetailInfo heldpdeskDetailInfo) {
-        this.heldpdeskDetailInfo = heldpdeskDetailInfo;
-    }
-}

+ 2 - 1
pwm/servlet/src/password/pwm/http/bean/LoginInfoBean.java

@@ -30,7 +30,8 @@ import password.pwm.util.PostChangePasswordAction;
 
 import java.util.*;
 
-public class LoginInfoBean implements PwmSessionBean {
+public class
+        LoginInfoBean implements PwmSessionBean {
     private transient PasswordData userCurrentPassword;
 
     private Map<Permission, Permission.PERMISSION_STATUS> permissions = new HashMap<>();

+ 2 - 32
pwm/servlet/src/password/pwm/http/filter/AuthenticationFilter.java

@@ -30,7 +30,6 @@ import password.pwm.Validator;
 import password.pwm.bean.SessionStateBean;
 import password.pwm.bean.UserIdentity;
 import password.pwm.bean.UserInfoBean;
-import password.pwm.config.Configuration;
 import password.pwm.config.PwmSetting;
 import password.pwm.error.*;
 import password.pwm.http.PwmRequest;
@@ -45,7 +44,6 @@ import password.pwm.ldap.auth.AuthenticationType;
 import password.pwm.ldap.auth.SessionAuthenticator;
 import password.pwm.util.BasicAuthInfo;
 import password.pwm.util.CASAuthenticationHelper;
-import password.pwm.util.ServletHelper;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.stats.Statistic;
 import password.pwm.util.stats.StatisticsManager;
@@ -55,8 +53,6 @@ import javax.servlet.http.HttpServletRequest;
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * Authentication servlet filter.  This filter wraps all servlet requests and requests direct to *.jsp
@@ -407,39 +403,13 @@ public class AuthenticationFilter extends AbstractPwmFilter {
             throws IOException, ServletException, PwmUnrecoverableException
 
     {
-        final Configuration config = pwmRequest.getConfig();
-        final OAuthConsumerServlet.Settings settings = OAuthConsumerServlet.Settings.fromConfiguration(config);
+        final OAuthConsumerServlet.Settings settings = OAuthConsumerServlet.Settings.fromConfiguration(pwmRequest.getConfig());
         if (!settings.oAuthIsConfigured()) {
             return false;
         }
 
         final String originalURL = pwmRequest.getURLwithQueryString();
-
-        final String state = OAuthConsumerServlet.makeStateStringForRequest(pwmRequest, originalURL);
-        final String redirectUri = OAuthConsumerServlet.figureOauthSelfEndPointUrl(pwmRequest);
-        final String code = config.readAppProperty(AppProperty.OAUTH_ID_REQUEST_TYPE);
-
-        final Map<String,String> urlParams = new HashMap<>();
-        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_CLIENT_ID),settings.getClientID());
-        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_RESPONSE_TYPE),code);
-        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_STATE),state);
-        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_REDIRECT_URI),redirectUri);
-
-        final String redirectUrl = ServletHelper.appendAndEncodeUrlParameters(settings.getLoginURL(), urlParams);
-
-        LOGGER.trace(pwmRequest, "preparing to start oauth authentication request sequence, set originally requested url: " + originalURL);
-
-        try{
-            pwmRequest.getPwmSession().getSessionStateBean().setOauthInProgress(true);
-            pwmRequest.sendRedirect(redirectUrl);
-            LOGGER.debug(pwmRequest, "redirecting user to oauth id server, url: " + redirectUrl);
-        } catch (PwmUnrecoverableException e) {
-            final String errorMsg = "unexpected error redirecting user to oauth page: " + e.toString();
-            ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg);
-            LOGGER.error(pwmRequest, errorInformation);
-            pwmRequest.respondWithError(errorInformation);
-        }
-
+        OAuthConsumerServlet.redirectUserToOAuthServer(pwmRequest, originalURL);
         return true;
     }
 

+ 2 - 2
pwm/servlet/src/password/pwm/http/filter/SessionFilter.java

@@ -84,8 +84,8 @@ public class SessionFilter extends AbstractPwmFilter {
 
         try {
             chain.doFilter();
-        } catch (Exception e) {
-            LOGGER.warn(pwmRequest.getPwmSession(), "unhandled exception", e);
+        } catch (IOException e) {
+            LOGGER.trace(pwmRequest.getPwmSession(), "IO exception during servlet processing: " + e.getMessage());
             throw new ServletException(e);
         } catch (Throwable e) {
             LOGGER.warn(pwmRequest.getPwmSession(), "unhandled exception " + e.getMessage(), e);

+ 15 - 0
pwm/servlet/src/password/pwm/http/servlet/ConfigEditorServlet.java

@@ -24,6 +24,7 @@ package password.pwm.http.servlet;
 
 import com.novell.ldapchai.exception.ChaiUnavailableException;
 import password.pwm.AppProperty;
+import password.pwm.PwmApplication;
 import password.pwm.PwmConstants;
 import password.pwm.Validator;
 import password.pwm.bean.SmsItemBean;
@@ -971,6 +972,20 @@ public class ConfigEditorServlet extends PwmServlet {
             }
             returnMap.put("templates", templateMap);
         }
+        {
+            final LinkedHashMap<String, Object> varMap = new LinkedHashMap<>();
+            final ConfigManagerBean configManagerBean = pwmRequest.getPwmSession().getConfigManagerBean();
+            varMap.put("ldapProfileIds", configManagerBean.getStoredConfiguration().readSetting(PwmSetting.LDAP_PROFILE_LIST).toNativeObject());
+            varMap.put("currentTemplate",configManagerBean.getStoredConfiguration().getTemplate());
+            if (pwmRequest.getPwmApplication().getApplicationMode() == PwmApplication.MODE.CONFIGURATION && !PwmConstants.TRIAL_MODE) {
+                if (!configManagerBean.isConfigUnlockedWarningShown()) {
+                    varMap.put("configUnlocked",true);
+                    configManagerBean.setConfigUnlockedWarningShown(true);
+                }
+            }
+            varMap.put("configurationNotes", configManagerBean.getStoredConfiguration().readConfigProperty(StoredConfiguration.ConfigProperty.PROPERTY_KEY_NOTES));
+            returnMap.put("var", varMap);
+        }
 
         final RestResultBean restResultBean = new RestResultBean();
 

+ 255 - 139
pwm/servlet/src/password/pwm/http/servlet/ConfigManagerServlet.java

@@ -58,6 +58,8 @@ import javax.servlet.ServletException;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadInfo;
 import java.util.*;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
@@ -114,8 +116,6 @@ public class ConfigManagerServlet extends PwmServlet {
             return;
         }
 
-        configManagerBean.setConfigLocked(pwmApplication.getApplicationMode() != PwmApplication.MODE.CONFIGURATION);
-
         final ConfigManagerAction processAction = readProcessAction(pwmRequest);
         if (processAction != null) {
             switch (processAction) {
@@ -548,7 +548,6 @@ public class ConfigManagerServlet extends PwmServlet {
             throws IOException, PwmUnrecoverableException
     {
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
-        final PwmSession pwmSession = pwmRequest.getPwmSession();
 
         { // kick off health check so that it might be faster later..
             Thread healthThread = new Thread() {
@@ -560,24 +559,149 @@ public class ConfigManagerServlet extends PwmServlet {
             healthThread.setDaemon(true);
             healthThread.start();
         }
+
+        for (final Class<? extends DebugItemGenerator> serviceClass : DEBUG_ZIP_ITEM_GENERATORS) {
+            try {
+                LOGGER.trace(pwmRequest, "beginning debug output of item " + serviceClass.getSimpleName());
+                final Object newInstance = serviceClass.newInstance();
+                final DebugItemGenerator newGeneratorItem = (DebugItemGenerator)newInstance;
+                zipOutput.putNextEntry(new ZipEntry(pathPrefix + newGeneratorItem.getFilename()));
+                newGeneratorItem.outputItem(pwmApplication, pwmRequest, zipOutput);
+                zipOutput.closeEntry();
+                zipOutput.flush();
+            } catch (Exception e) {
+                final String errorMsg = "unexpected error executing debug item output class '" + serviceClass.getName() + "', error: " + e.toString();
+                LOGGER.error(pwmRequest, errorMsg);
+            }
+        }
+    }
+
+    static StoredConfiguration readCurrentConfiguration(final PwmRequest pwmRequest)
+            throws PwmUnrecoverableException
+    {
+        final ContextManager contextManager = ContextManager.getContextManager(pwmRequest.getHttpServletRequest().getSession());
+        final ConfigurationReader runningConfigReader = contextManager.getConfigReader();
+        final StoredConfiguration runningConfig = runningConfigReader.getStoredConfiguration();
+        return StoredConfiguration.copy(runningConfig);
+    }
+
+    private void doExportLocalDB(final PwmRequest pwmRequest)
+            throws IOException, ServletException, PwmUnrecoverableException
+    {
+        final PwmResponse resp = pwmRequest.getPwmResponse();
+        final Date startTime = new Date();
+        resp.setHeader(PwmConstants.HttpHeader.ContentDisposition, "attachment;filename=" + PwmConstants.PWM_APP_NAME + "-LocalDB.bak");
+        resp.setContentType(PwmConstants.ContentTypeValue.octetstream);
+        resp.setHeader(PwmConstants.HttpHeader.ContentTransferEncoding, "binary");
+        final LocalDBUtility localDBUtility = new LocalDBUtility(pwmRequest.getPwmApplication().getLocalDB());
+        try {
+            localDBUtility.exportLocalDB(resp.getOutputStream(), LOGGER.asAppendable(PwmLogLevel.DEBUG, pwmRequest.getSessionLabel()), false);
+            LOGGER.debug(pwmRequest, "completed localDBExport process in " + TimeDuration.fromCurrent(startTime).asCompactString());
+        } catch (Exception e) {
+            LOGGER.error(pwmRequest, "error downloading export localdb: " + e.getMessage());
+        }
+    }
+
+    private static class PersistentLoginInfo implements Serializable {
+        private Date expireDate;
+        private String password;
+
+        private PersistentLoginInfo(
+                Date expireDate,
+                String password
+        )
+        {
+            this.expireDate = expireDate;
+            this.password = password;
+        }
+
+        public Date getExpireDate()
+        {
+            return expireDate;
+        }
+
+        public String getPassword()
+        {
+            return password;
+        }
+    }
+
+
+    private void restSummary(final PwmRequest pwmRequest)
+            throws IOException, ServletException, PwmUnrecoverableException
+    {
         final StoredConfiguration storedConfiguration = readCurrentConfiguration(pwmRequest);
-        storedConfiguration.resetAllPasswordValues("value removed from " + PwmConstants.PWM_APP_NAME + "-Support configuration export");
+        final LinkedHashMap<String,Object> outputMap = new LinkedHashMap<>(storedConfiguration.toOutputMap(pwmRequest.getLocale()));
+        pwmRequest.setAttribute(PwmConstants.REQUEST_ATTR.ConfigurationSummaryOutput,outputMap);
+        pwmRequest.forwardToJsp(PwmConstants.JSP_URL.CONFIG_MANAGER_EDITOR_SUMMARY);
+    }
+
+    private static final List<Class<? extends DebugItemGenerator>> DEBUG_ZIP_ITEM_GENERATORS  = Collections.unmodifiableList(Arrays.asList(
+            ConfigurationFileItemGenerator.class,
+            ConfigurationDebugItemGenerator.class,
+            AboutItemGenerator.class,
+            EnvironmentItemGenerator.class,
+            AuditDebugItemGenerator.class,
+            InfoDebugItemGenerator.class,
+            HealthDebugItemGenerator.class,
+            ThreadDumpDebugItemGenerator.class,
+            FileInfoDebugItemGenerator.class,
+            LogDebugItemGenerator.class
+    ));
+
+    interface DebugItemGenerator {
+
+        String getFilename();
+
+        void outputItem(
+                PwmApplication pwmApplication,
+                PwmRequest pwmRequest,
+                OutputStream outputStream
+        ) throws Exception;
+    }
+
+    static class ConfigurationDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "configuration-debug.txt";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
         {
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + PwmConstants.DEFAULT_CONFIG_FILE_FILENAME));
+            final StoredConfiguration storedConfiguration = readCurrentConfiguration(pwmRequest);
             storedConfiguration.resetAllPasswordValues("value removed from " + PwmConstants.PWM_APP_NAME + "-Support configuration export");
 
-            final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-            storedConfiguration.toXml(outputStream);
-            zipOutput.write(outputStream.toByteArray());
-            zipOutput.closeEntry();
-            zipOutput.flush();
+            outputStream.write(storedConfiguration.toString(true).getBytes(PwmConstants.DEFAULT_CHARSET));
+        }
+    }
+
+    static class ConfigurationFileItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return PwmConstants.DEFAULT_CONFIG_FILE_FILENAME;
         }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
         {
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "configuration-debug.txt"));
-            zipOutput.write(storedConfiguration.toString(true).getBytes(PwmConstants.DEFAULT_CHARSET));
-            zipOutput.closeEntry();
-            zipOutput.flush();
+            final StoredConfiguration storedConfiguration = readCurrentConfiguration(pwmRequest);
+            storedConfiguration.resetAllPasswordValues("value removed from " + PwmConstants.PWM_APP_NAME + "-Support configuration export");
+
+            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            storedConfiguration.toXml(baos);
+            outputStream.write(baos.toByteArray());
         }
+    }
+
+    static class AboutItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "about.properties";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
         {
             final Properties outputProps = new Properties() {
                 public synchronized Enumeration<Object> keys() {
@@ -587,25 +711,65 @@ public class ConfigManagerServlet extends PwmServlet {
 
             final Map<PwmAboutProperty,String> infoBean = Helper.makeInfoBean(pwmApplication);
             for (final PwmAboutProperty aboutProperty : infoBean.keySet()) {
-                outputProps.put(aboutProperty.toString(), infoBean.get(aboutProperty));
+                outputProps.put(aboutProperty.toString().replace("_","."), infoBean.get(aboutProperty));
             }
             final ByteArrayOutputStream baos = new ByteArrayOutputStream();
             outputProps.store(baos,PwmConstants.DEFAULT_DATETIME_FORMAT.format(new Date()));
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "about.properties"));
-            zipOutput.write(baos.toByteArray());
-            zipOutput.closeEntry();
-            zipOutput.flush();
+            outputStream.write(baos.toByteArray());
         }
+    }
+
+    static class EnvironmentItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "environment.properties";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
+        {
+            final Properties outputProps = new Properties() {
+                public synchronized Enumeration<Object> keys() {
+                    return Collections.enumeration(new TreeSet<>(super.keySet()));
+                }
+            };
+
+            // java threads
+            final Map<String,String> envProps = System.getenv();
+            for (final String key : envProps.keySet()) {
+                outputProps.put(key, envProps.get(key));
+            }
+            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            outputProps.store(baos,PwmConstants.DEFAULT_DATETIME_FORMAT.format(new Date()));
+            outputStream.write(baos.toByteArray());
+        }
+    }
+
+
+    static class AuditDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "audit.csv";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
         {
             final ByteArrayOutputStream baos = new ByteArrayOutputStream();
             pwmApplication.getAuditManager().outputVaultToCsv(baos, pwmRequest.getLocale(), true);
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "audit.csv"));
-            zipOutput.write(baos.toByteArray());
-            zipOutput.closeEntry();
-            zipOutput.flush();
+            outputStream.write(baos.toByteArray());
+        }
+    }
+
+    static class InfoDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "info.json";
         }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception
         {
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "info.json"));
             final LinkedHashMap<String,Object> outputMap = new LinkedHashMap<>();
 
             { // services info
@@ -621,39 +785,70 @@ public class ConfigManagerServlet extends PwmServlet {
                 outputMap.put("services",servicesMap);
             }
 
-            // java threads
-            outputMap.put("threads", Thread.getAllStackTraces());
-
             final String recordJson = JsonUtil.serializeMap(outputMap, JsonUtil.Flag.PrettyPrint);
-            zipOutput.write(recordJson.getBytes(PwmConstants.DEFAULT_CHARSET));
-            zipOutput.closeEntry();
-            zipOutput.flush();
+            outputStream.write(recordJson.getBytes(PwmConstants.DEFAULT_CHARSET));
         }
-        {
+    }
+
+
+    static class HealthDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "health.json";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception {
+            final Set<HealthRecord> records = pwmApplication.getHealthMonitor().getHealthRecords();
+            final String recordJson = JsonUtil.serializeCollection(records, JsonUtil.Flag.PrettyPrint);
+            outputStream.write(recordJson.getBytes(PwmConstants.DEFAULT_CHARSET));
+        }
+    }
+
+    static class ThreadDumpDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "threads.txt";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception {
+
+            final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            final PrintWriter writer = new PrintWriter( new OutputStreamWriter(baos, PwmConstants.DEFAULT_CHARSET) );
+            final ThreadInfo[] threads = ManagementFactory.getThreadMXBean().dumpAllThreads(true,true);
+            for (final ThreadInfo threadInfo : threads) {
+                writer.write(threadInfo.toString());
+            }
+            writer.flush();
+            outputStream.write(baos.toByteArray());
+        }
+    }
+
+    static class FileInfoDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "fileinformation.csv";
+        }
+
+        @Override
+        public void outputItem(PwmApplication pwmApplication, PwmRequest pwmRequest, OutputStream outputStream) throws Exception {
             final List<BuildChecksumMaker.FileInformation> fileInformations = new ArrayList<>();
             if (pwmApplication.getApplicationPath() != null) {
                 try {
                     fileInformations.addAll(BuildChecksumMaker.readFileInformation(pwmApplication.getApplicationPath()));
                 } catch (Exception e) {
-                    LOGGER.error(pwmSession, "unable to generate appPath fileMd5sums during zip debug building: " + e.getMessage());
+                    LOGGER.error(pwmRequest, "unable to generate appPath fileMd5sums during zip debug building: " + e.getMessage());
                 }
             }
             if (pwmApplication.getWebInfPath() != null && !pwmApplication.getWebInfPath().equals(pwmApplication.getApplicationPath())) {
                 try {
                     fileInformations.addAll(BuildChecksumMaker.readFileInformation(pwmApplication.getWebInfPath()));
                 } catch (Exception e) {
-                    LOGGER.error(pwmSession, "unable to generate webInfPath fileMd5sums during zip debug building: " + e.getMessage());
+                    LOGGER.error(pwmRequest, "unable to generate webInfPath fileMd5sums during zip debug building: " + e.getMessage());
                 }
             }
             {
-                zipOutput.putNextEntry(new ZipEntry(pathPrefix + "fileinformation.json"));
-                final String json = JsonUtil.serializeCollection(fileInformations, JsonUtil.Flag.PrettyPrint);
-                zipOutput.write(json.getBytes(PwmConstants.DEFAULT_CHARSET));
-                zipOutput.closeEntry();
-                zipOutput.flush();
-            }
-            {
-                zipOutput.putNextEntry(new ZipEntry(pathPrefix + "fileinformation.csv"));
                 final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                 final CSVPrinter csvPrinter = Helper.makeCsvPrinter(byteArrayOutputStream);
                 {
@@ -675,34 +870,24 @@ public class ConfigManagerServlet extends PwmServlet {
                     csvPrinter.printRecord(headerRow);
                 }
                 csvPrinter.flush();
-                zipOutput.write(byteArrayOutputStream.toByteArray());
-                zipOutput.closeEntry();
-                zipOutput.flush();
+                outputStream.write(byteArrayOutputStream.toByteArray());
             }
         }
-        {
-            final List<BuildChecksumMaker.FileInformation> fileInformation = new ArrayList<>();
-            if (pwmApplication.getApplicationPath() != null) {
-                try {
-                    fileInformation.addAll(BuildChecksumMaker.readFileInformation(pwmApplication.getApplicationPath()));
-                } catch (Exception e) {
-                    LOGGER.error(pwmSession, "unable to generate appPath fileMd5sums during zip debug building: " + e.getMessage());
-                }
-            }
-            if (pwmApplication.getWebInfPath() != null && !pwmApplication.getWebInfPath().equals(pwmApplication.getApplicationPath())) {
-                try {
-                    fileInformation.addAll(BuildChecksumMaker.readFileInformation(pwmApplication.getWebInfPath()));
-                } catch (Exception e) {
-                    LOGGER.error(pwmSession, "unable to generate webInfPath fileMd5sums during zip debug building: " + e.getMessage());
-                }
-            }
-            final String json = JsonUtil.serializeCollection(fileInformation, JsonUtil.Flag.PrettyPrint);
-            zipOutput.write(json.getBytes(PwmConstants.DEFAULT_CHARSET));
-            zipOutput.closeEntry();
-            zipOutput.flush();
+    }
+
+    static class LogDebugItemGenerator implements DebugItemGenerator {
+        @Override
+        public String getFilename() {
+            return "debug.log";
         }
-        {
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "debug.log"));
+
+        @Override
+        public void outputItem(
+                final PwmApplication pwmApplication,
+                final PwmRequest pwmRequest,
+                final OutputStream outputStream
+        ) throws Exception {
+
             final int maxCount = 100 * 1000;
             final int maxSeconds = 30 * 1000;
             final LocalDBLogger.SearchParameters searchParameters = new LocalDBLogger.SearchParameters(
@@ -718,83 +903,14 @@ public class ConfigManagerServlet extends PwmServlet {
             int counter = 0;
             while (searchResults.hasNext()) {
                 final PwmLogEvent event = searchResults.next();
-                zipOutput.write(event.toLogString().getBytes(PwmConstants.DEFAULT_CHARSET));
-                zipOutput.write("\n".getBytes(PwmConstants.DEFAULT_CHARSET));
+                outputStream.write(event.toLogString().getBytes(PwmConstants.DEFAULT_CHARSET));
+                outputStream.write("\n".getBytes(PwmConstants.DEFAULT_CHARSET));
                 counter++;
-                if (counter % 100 == 0) {
-                    zipOutput.flush();
+                if (counter % 1000 == 0) {
+                    outputStream.flush();
                 }
             }
-            zipOutput.closeEntry();
-        }
-        {
-            zipOutput.putNextEntry(new ZipEntry(pathPrefix + "health.json"));
-            final Set<HealthRecord> records = pwmApplication.getHealthMonitor().getHealthRecords();
-            final String recordJson = JsonUtil.serializeCollection(records, JsonUtil.Flag.PrettyPrint);
-            zipOutput.write(recordJson.getBytes(PwmConstants.DEFAULT_CHARSET));
-            zipOutput.closeEntry();
-            zipOutput.flush();
         }
     }
-
-    static StoredConfiguration readCurrentConfiguration(final PwmRequest pwmRequest)
-            throws PwmUnrecoverableException
-    {
-        final ContextManager contextManager = ContextManager.getContextManager(pwmRequest.getHttpServletRequest().getSession());
-        final ConfigurationReader runningConfigReader = contextManager.getConfigReader();
-        final StoredConfiguration runningConfig = runningConfigReader.getStoredConfiguration();
-        return StoredConfiguration.copy(runningConfig);
-    }
-
-    private void doExportLocalDB(final PwmRequest pwmRequest)
-            throws IOException, ServletException, PwmUnrecoverableException
-    {
-        final PwmResponse resp = pwmRequest.getPwmResponse();
-        final Date startTime = new Date();
-        resp.setHeader(PwmConstants.HttpHeader.ContentDisposition, "attachment;filename=" + PwmConstants.PWM_APP_NAME + "-LocalDB.bak");
-        resp.setContentType(PwmConstants.ContentTypeValue.octetstream);
-        resp.setHeader(PwmConstants.HttpHeader.ContentTransferEncoding, "binary");
-        final LocalDBUtility localDBUtility = new LocalDBUtility(pwmRequest.getPwmApplication().getLocalDB());
-        try {
-            localDBUtility.exportLocalDB(resp.getOutputStream(), LOGGER.asAppendable(PwmLogLevel.DEBUG, pwmRequest.getSessionLabel()), false);
-            LOGGER.debug(pwmRequest, "completed localDBExport process in " + TimeDuration.fromCurrent(startTime).asCompactString());
-        } catch (Exception e) {
-            LOGGER.error(pwmRequest, "error downloading export localdb: " + e.getMessage());
-        }
-    }
-
-    private static class PersistentLoginInfo implements Serializable {
-        private Date expireDate;
-        private String password;
-
-        private PersistentLoginInfo(
-                Date expireDate,
-                String password
-        )
-        {
-            this.expireDate = expireDate;
-            this.password = password;
-        }
-
-        public Date getExpireDate()
-        {
-            return expireDate;
-        }
-
-        public String getPassword()
-        {
-            return password;
-        }
-    }
-
-
-    private void restSummary(final PwmRequest pwmRequest)
-            throws IOException, ServletException, PwmUnrecoverableException
-    {
-        final StoredConfiguration storedConfiguration = readCurrentConfiguration(pwmRequest);
-        final LinkedHashMap<String,Object> outputMap = new LinkedHashMap<>(storedConfiguration.toOutputMap(pwmRequest.getLocale()));
-        pwmRequest.setAttribute(PwmConstants.REQUEST_ATTR.ConfigurationSummaryOutput,outputMap);
-        pwmRequest.forwardToJsp(PwmConstants.JSP_URL.CONFIG_MANAGER_EDITOR_SUMMARY);
-    }
 }
 

+ 13 - 6
pwm/servlet/src/password/pwm/http/servlet/ForgottenPasswordServlet.java

@@ -602,17 +602,25 @@ public class ForgottenPasswordServlet extends PwmServlet {
         final ForgottenPasswordBean.RecoveryFlags recoveryFlags = forgottenPasswordBean.getRecoveryFlags();
         final ForgottenPasswordBean.Progress progress = forgottenPasswordBean.getProgress();
 
-        LOGGER.trace(pwmRequest, "entering forgotten password progress engine:"
-                + " flags=" + JsonUtil.serialize(recoveryFlags)
-                + ", progress=" + JsonUtil.serialize(progress));
-
-
         // check for identified user;
         if (forgottenPasswordBean.getUserInfo() == null) {
             forwardToSearchPage(pwmRequest);
             return;
         }
 
+        final ForgottenPasswordProfile forgottenPasswordProfile = pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
+        {
+            final Map<String, ForgottenPasswordProfile> profileIDList = pwmRequest.getConfig().getForgottenPasswordProfiles();
+            final String profileDebugMsg = forgottenPasswordProfile != null && profileIDList != null && profileIDList.size() > 1
+                    ? " profile=" + forgottenPasswordProfile.getIdentifier() + ", "
+                    : "";
+            LOGGER.trace(pwmRequest, "entering forgotten password progress engine: "
+                    + profileDebugMsg
+                    + "flags=" + JsonUtil.serialize(recoveryFlags) + ", "
+                    + "progress=" + JsonUtil.serialize(progress));
+        }
+
+
         // check for previous authentication
         if (recoveryFlags.getRequiredAuthMethods().contains(RecoveryVerificationMethods.PREVIOUS_AUTH) || recoveryFlags.getOptionalAuthMethods().contains(RecoveryVerificationMethods.PREVIOUS_AUTH)) {
             if (!progress.getSatisfiedMethods().contains(RecoveryVerificationMethods.PREVIOUS_AUTH)) {
@@ -685,7 +693,6 @@ public class ForgottenPasswordServlet extends PwmServlet {
             return;
         }
 
-        final ForgottenPasswordProfile forgottenPasswordProfile = pwmRequest.getConfig().getForgottenPasswordProfiles().get(forgottenPasswordBean.getForgottenPasswordProfileID());
         if (forgottenPasswordProfile.readSettingAsBoolean(PwmSetting.RECOVERY_ALLOW_UNLOCK)) {
             final PasswordStatus passwordStatus = forgottenPasswordBean.getUserInfo().getPasswordState();
 

+ 1 - 2
pwm/servlet/src/password/pwm/http/servlet/ForgottenUsernameServlet.java

@@ -154,9 +154,8 @@ public class ForgottenUsernameServlet extends PwmServlet {
             pwmApplication.getIntruderManager().convenience().checkUserIdentity(userIdentity);
 
 
-            final UserInfoBean forgottenUserInfo = new UserInfoBean();
             final UserStatusReader userStatusReader = new UserStatusReader(pwmApplication, pwmSession.getLabel());
-            userStatusReader.populateUserInfoBean(forgottenUserInfo, pwmRequest.getLocale(), userIdentity);
+            final UserInfoBean forgottenUserInfo = userStatusReader.populateUserInfoBean(pwmRequest.getLocale(), userIdentity);
 
 
             // send username

+ 91 - 29
pwm/servlet/src/password/pwm/http/servlet/OAuthConsumerServlet.java

@@ -56,6 +56,7 @@ import java.net.URISyntaxException;
 import java.security.cert.X509Certificate;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 public class OAuthConsumerServlet extends PwmServlet {
@@ -65,6 +66,7 @@ public class OAuthConsumerServlet extends PwmServlet {
 
     private static class OAuthState implements Serializable {
         private final int stateID = oauthStateIDcounter++;
+        private final Date issueTime = new Date();
         private String sessionID;
         private String nextUrl;
     }
@@ -86,11 +88,11 @@ public class OAuthConsumerServlet extends PwmServlet {
         final Settings settings = Settings.fromConfiguration(pwmApplication.getConfig());
 
         final boolean userIsAuthenticated = pwmSession.getSessionStateBean().isAuthenticated();
+        final OAuthRequestState oAuthRequestState = readOAuthRequestState(pwmRequest);
 
         if (!userIsAuthenticated && !pwmSession.getSessionStateBean().isOauthInProgress()) {
-            final String requestStateStr = pwmRequest.readParameterAsString(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_STATE));
-            if (requestStateStr != null && requestStateStr.length() > 0) {
-                final String nextUrl = parseNextUrlFromState(requestStateStr, pwmRequest, false);
+            if (oAuthRequestState != null) {
+                final String nextUrl = oAuthRequestState.oAuthState.nextUrl;
                 LOGGER.debug(pwmSession, "received unrecognized oauth response, ignoring authcode and redirecting to embedded next url: " + nextUrl);
                 pwmRequest.sendRedirect(nextUrl);
                 return;
@@ -118,8 +120,7 @@ public class OAuthConsumerServlet extends PwmServlet {
         // mark the inprogress flag to false, if we get this far and fail user needs to start over.
         pwmSession.getSessionStateBean().setOauthInProgress(false);
 
-        final String requestStateStr = pwmRequest.readParameterAsString(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_STATE));
-        if (requestStateStr == null || requestStateStr.isEmpty()) {
+        if (oAuthRequestState == null) {
             final String errorMsg = "state parameter is missing from oauth request";
             final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_OAUTH_ERROR,errorMsg);
             LOGGER.error(pwmSession,errorMsg);
@@ -127,7 +128,21 @@ public class OAuthConsumerServlet extends PwmServlet {
             return;
         }
 
-        final String nextUrl = parseNextUrlFromState(requestStateStr, pwmRequest, true);
+        if (!oAuthRequestState.sessionMatch) {
+            LOGGER.debug(pwmSession, "oauth consumer reached but response is not for a request issued during the current session, will redirect back to oauth server for verification update");
+
+            try{
+                final String nextURL = oAuthRequestState.oAuthState.nextUrl;
+                redirectUserToOAuthServer(pwmRequest, nextURL);
+                return;
+            } catch (PwmUnrecoverableException e) {
+                final String errorMsg = "unexpected error redirecting user to oauth page: " + e.toString();
+                ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg);
+                pwmRequest.setResponseError(errorInformation);
+                LOGGER.error(errorInformation.toDebugStr());
+            }
+        }
+
         final String requestCodeStr = pwmRequest.readParameterAsString(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_CODE));
         LOGGER.trace(pwmSession,"received code from oauth server: " + requestCodeStr);
 
@@ -198,7 +213,8 @@ public class OAuthConsumerServlet extends PwmServlet {
             // recycle the session to prevent session fixation attack.
             pwmRequest.getPwmSession().getSessionStateBean().setSessionIdRecycleNeeded(true);
 
-            // see if there is a an original request url
+            // forward to nextUrl
+            final String nextUrl = oAuthRequestState.oAuthState.nextUrl;
             LOGGER.debug(pwmSession, "oauth authentication completed, redirecting to originally requested URL: " + nextUrl);
             pwmRequest.sendRedirect(nextUrl);
         } catch (PwmException e) {
@@ -546,41 +562,87 @@ public class OAuthConsumerServlet extends PwmServlet {
     )
             throws PwmUnrecoverableException
     {
-            OAuthState oAuthState = new OAuthState();
-            oAuthState.sessionID = pwmRequest.getPwmSession().getSessionStateBean().getSessionVerificationKey();
-            oAuthState.nextUrl = nextUrl;
+        OAuthState oAuthState = new OAuthState();
+        oAuthState.sessionID = pwmRequest.getPwmSession().getSessionStateBean().getSessionVerificationKey();
+        oAuthState.nextUrl = nextUrl;
+
+        LOGGER.trace(pwmRequest, "issuing oauth state id="
+                + oAuthState.stateID + " with the next destination URL set to " + oAuthState.nextUrl);
 
-            LOGGER.trace(pwmRequest, "issuing oauth state id="
-                    + oAuthState.stateID + " with the next destination URL set to " + oAuthState.nextUrl);
 
 
+        final String jsonValue = JsonUtil.serialize(oAuthState);
+        return SecureHelper.encryptToString(jsonValue, pwmRequest.getConfig().getSecurityKey(), true);
+    }
+
+    public static class OAuthRequestState {
+        private OAuthState oAuthState;
+        private boolean sessionMatch;
 
-            final String jsonValue = JsonUtil.serialize(oAuthState);
-            return SecureHelper.encryptToString(jsonValue, pwmRequest.getConfig().getSecurityKey(), true);
+        public OAuthRequestState(OAuthState oAuthState, boolean sessionMatch) {
+            this.oAuthState = oAuthState;
+            this.sessionMatch = sessionMatch;
+        }
     }
 
-    public static String parseNextUrlFromState(
-            final String input,
+    public static void redirectUserToOAuthServer(
             final PwmRequest pwmRequest,
-            final boolean validateSessionState
+            final String nextUrl
+    )
+            throws PwmUnrecoverableException, IOException
+    {
+
+        LOGGER.trace(pwmRequest, "preparing to redirect user to oauth authentication service, setting nextUrl to " + nextUrl);
+        pwmRequest.getPwmSession().getSessionStateBean().setOauthInProgress(true);
+
+        final Configuration config = pwmRequest.getConfig();
+        final OAuthConsumerServlet.Settings settings = OAuthConsumerServlet.Settings.fromConfiguration(config);
+        final String state = OAuthConsumerServlet.makeStateStringForRequest(pwmRequest, nextUrl);
+        final String redirectUri = OAuthConsumerServlet.figureOauthSelfEndPointUrl(pwmRequest);
+        final String code = config.readAppProperty(AppProperty.OAUTH_ID_REQUEST_TYPE);
+
+        final Map<String,String> urlParams = new LinkedHashMap<>();
+        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_CLIENT_ID),settings.getClientID());
+        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_RESPONSE_TYPE),code);
+        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_STATE),state);
+        urlParams.put(config.readAppProperty(AppProperty.HTTP_PARAM_OAUTH_REDIRECT_URI), redirectUri);
+
+        final String redirectUrl = ServletHelper.appendAndEncodeUrlParameters(settings.getLoginURL(), urlParams);
+
+        try{
+            pwmRequest.sendRedirect(redirectUrl);
+            pwmRequest.getPwmSession().getSessionStateBean().setOauthInProgress(true);
+            LOGGER.debug(pwmRequest,"redirecting user to oauth id server, url: " + redirectUrl);
+        } catch (PwmUnrecoverableException e) {
+            final String errorMsg = "unexpected error redirecting user to oauth page: " + e.toString();
+            ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg);
+            pwmRequest.setResponseError(errorInformation);
+            LOGGER.error(errorInformation.toDebugStr());
+        }
+
+    }
+
+    public static OAuthRequestState readOAuthRequestState(
+            final PwmRequest pwmRequest
     )
             throws PwmUnrecoverableException
     {
-            final String stateJson = SecureHelper.decryptStringValue(input, pwmRequest.getConfig().getSecurityKey(), true);
+        final String requestStateStr = pwmRequest.readParameterAsString(pwmRequest.getConfig().readAppProperty(AppProperty.HTTP_PARAM_OAUTH_STATE));
+        if (requestStateStr != null) {
+            final String stateJson = SecureHelper.decryptStringValue(requestStateStr, pwmRequest.getConfig().getSecurityKey(), true);
             final OAuthState oAuthState = JsonUtil.deserialize(stateJson, OAuthState.class);
-
-            if (validateSessionState) {
-                if (oAuthState == null || !oAuthState.sessionID.equals(pwmRequest.getPwmSession().getSessionStateBean().getSessionVerificationKey())) {
-                    final String errorMsg = "state value does not match current session key value";
-                    final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_OAUTH_ERROR, errorMsg);
-                    LOGGER.error(pwmRequest, errorMsg);
-                    throw new PwmUnrecoverableException(errorInformation);
-                }
+            if (oAuthState != null) {
+                final boolean sessionMatch = oAuthState.sessionID.equals(pwmRequest.getPwmSession().getSessionStateBean().getSessionVerificationKey());
+                LOGGER.trace(pwmRequest, "read state while parsing oauth consumer request id="
+                        + oAuthState.stateID + ", issueTime="
+                        + PwmConstants.DEFAULT_DATETIME_FORMAT.format(oAuthState.issueTime) + ", nextUrl="
+                        + oAuthState.nextUrl + ", sessionIDmatch=" + sessionMatch);
+
+                return new OAuthRequestState(oAuthState, sessionMatch);
             }
+        }
 
-            LOGGER.trace(pwmRequest, "while parsing oauth state id="
-                    + oAuthState.stateID + ", determined the next destination URL to be " + oAuthState.nextUrl);
 
-            return oAuthState.nextUrl;
+        return null;
     }
 }

+ 1 - 1
pwm/servlet/src/password/pwm/http/servlet/PwmServlet.java

@@ -101,7 +101,7 @@ public abstract class PwmServlet extends HttpServlet {
             if (processAction != null) {
                 if (!processAction.permittedMethods().contains(method)) {
                     final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_SERVICE_NOT_AVAILABLE,
-                            "incorrect request method " + method.toString());
+                            "incorrect request method " + method.toString() + " on request to " + pwmRequest.getURLwithQueryString());
                     LOGGER.error(pwmRequest.getPwmSession(), errorInformation.toDebugStr());
                     pwmRequest.respondWithError(errorInformation, false);
                     return;

+ 11 - 22
pwm/servlet/src/password/pwm/http/servlet/SetupOtpServlet.java

@@ -24,8 +24,6 @@ package password.pwm.http.servlet;
 
 import com.novell.ldapchai.exception.ChaiUnavailableException;
 import net.glxn.qrgen.QRCode;
-import net.glxn.qrgen.image.ImageType;
-import org.apache.commons.io.IOUtils;
 import password.pwm.*;
 import password.pwm.bean.UserIdentity;
 import password.pwm.bean.UserInfoBean;
@@ -47,7 +45,6 @@ import password.pwm.util.stats.Statistic;
 import password.pwm.ws.server.RestResultBean;
 
 import javax.servlet.ServletException;
-import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Collection;
@@ -460,36 +457,28 @@ public class SetupOtpServlet extends PwmServlet {
             }
         }
 
-        int height = 200;
-        int width = 200;
-        try {
-            width = Integer.parseInt(pwmRequest.readParameterAsString("width"));
-        } catch (Exception e) {
-            LOGGER.error(pwmRequest, "error parsing width parameter for qrcode image: " + e.getMessage());
-        }
-        try {
-            height = Integer.parseInt(pwmRequest.readParameterAsString("height"));
-        } catch (Exception e) {
-            LOGGER.error(pwmRequest, "error parsing height parameter for qrcode image: " + e.getMessage());
-        }
+        final int height = Integer.parseInt(pwmRequest.getConfig().readAppProperty(AppProperty.OTP_QR_IMAGE_HEIGHT));
+        final int width = Integer.parseInt(pwmRequest.getConfig().readAppProperty(AppProperty.OTP_QR_IMAGE_WIDTH));
 
         final byte[] imageBytes;
         try {
-            final QRCode codeImage = QRCode.from(qrCodeContent).withCharset(PwmConstants.DEFAULT_CHARSET.toString());
-            final QRCode sizedImage = codeImage.withSize(width, height);
-            imageBytes = sizedImage.to(ImageType.PNG).stream().toByteArray();
+            imageBytes = QRCode.from(qrCodeContent)
+                    .withCharset(PwmConstants.DEFAULT_CHARSET.toString())
+                    .withSize(width, height)
+                    .stream()
+                    .toByteArray();
         } catch (Exception e) {
-            final String errorMsg = "error generating qrcode image: " + e.getMessage();
-            LOGGER.error(pwmRequest, errorMsg);
+            final String errorMsg = "error generating qrcode image: " + e.getMessage() + ", payload length=" + qrCodeContent.length();
+            LOGGER.error(pwmRequest, errorMsg, e);
             throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg));
         }
 
-        pwmRequest.getPwmResponse().setContentType(PwmConstants.ContentTypeValue.png);
+        //pwmRequest.getPwmResponse().setContentType(PwmConstants.ContentTypeValue.png);
 
         OutputStream outputStream = null;
         try {
             outputStream = pwmRequest.getPwmResponse().getOutputStream();
-            IOUtils.copy(new ByteArrayInputStream(imageBytes), outputStream);
+            outputStream.write(imageBytes);
             outputStream.flush();
         } catch (Exception e) {
             final String errorMsg = "error while sending qrcode image to http client: " + e.getMessage();

+ 66 - 0
pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskClientDataBean.java

@@ -0,0 +1,66 @@
+package password.pwm.http.servlet.helpdesk;
+
+import password.pwm.config.option.HelpdeskClearResponseMode;
+import password.pwm.config.option.HelpdeskUIMode;
+import password.pwm.config.option.MessageSendMethod;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
+
+public class HelpdeskClientDataBean implements Serializable {
+    private Map<String,String> helpdesk_search_columns = new HashMap<>();
+    private boolean helpdesk_setting_maskPasswords;
+    private HelpdeskClearResponseMode helpdesk_setting_clearResponses;
+    private HelpdeskUIMode helpdesk_setting_PwUiMode;
+    private MessageSendMethod helpdesk_setting_tokenSendMethod;
+    private Map<String,Map<String,String>> actions = new HashMap<>();
+
+    public Map<String, String> getHelpdesk_search_columns() {
+        return helpdesk_search_columns;
+    }
+
+    public void setHelpdesk_search_columns(Map<String, String> helpdesk_search_columns) {
+        this.helpdesk_search_columns = helpdesk_search_columns;
+    }
+
+    public boolean isHelpdesk_setting_maskPasswords() {
+        return helpdesk_setting_maskPasswords;
+    }
+
+    public void setHelpdesk_setting_maskPasswords(boolean helpdesk_setting_maskPasswords) {
+        this.helpdesk_setting_maskPasswords = helpdesk_setting_maskPasswords;
+    }
+
+    public HelpdeskClearResponseMode getHelpdesk_setting_clearResponses() {
+        return helpdesk_setting_clearResponses;
+    }
+
+    public void setHelpdesk_setting_clearResponses(HelpdeskClearResponseMode helpdesk_setting_clearResponses) {
+        this.helpdesk_setting_clearResponses = helpdesk_setting_clearResponses;
+    }
+
+    public HelpdeskUIMode getHelpdesk_setting_PwUiMode() {
+        return helpdesk_setting_PwUiMode;
+    }
+
+    public void setHelpdesk_setting_PwUiMode(HelpdeskUIMode helpdesk_setting_PwUiMode) {
+        this.helpdesk_setting_PwUiMode = helpdesk_setting_PwUiMode;
+    }
+
+    public MessageSendMethod getHelpdesk_setting_tokenSendMethod() {
+        return helpdesk_setting_tokenSendMethod;
+    }
+
+    public void setHelpdesk_setting_tokenSendMethod(MessageSendMethod helpdesk_setting_tokenSendMethod) {
+        this.helpdesk_setting_tokenSendMethod = helpdesk_setting_tokenSendMethod;
+    }
+
+    public Map<String, Map<String, String>> getActions() {
+        return actions;
+    }
+
+    public void setActions(Map<String, Map<String, String>> actions) {
+        this.actions = actions;
+    }
+}

+ 96 - 0
pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskDetailInfoBean.java

@@ -0,0 +1,96 @@
+package password.pwm.http.servlet.helpdesk;
+
+import password.pwm.bean.UserInfoBean;
+import password.pwm.config.FormConfiguration;
+import password.pwm.event.UserAuditRecord;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+public class HelpdeskDetailInfoBean implements Serializable {
+    private UserInfoBean userInfoBean = new UserInfoBean();
+    private String userDisplayName;
+
+    private boolean intruderLocked;
+    private boolean accountEnabled;
+    private boolean accountExpired;
+
+    private Date lastLoginTime;
+    private List<UserAuditRecord> userHistory;
+    private Map<FormConfiguration, String> searchDetails;
+    private String passwordSetDelta;
+
+    public String getUserDisplayName() {
+        return userDisplayName;
+    }
+
+    public void setUserDisplayName(String userDisplayName) {
+        this.userDisplayName = userDisplayName;
+    }
+
+    public UserInfoBean getUserInfoBean() {
+        return userInfoBean;
+    }
+
+    public void setUserInfoBean(UserInfoBean userInfoBean) {
+        this.userInfoBean = userInfoBean;
+    }
+
+    public boolean isIntruderLocked() {
+        return intruderLocked;
+    }
+
+    public void setIntruderLocked(boolean intruderLocked) {
+        this.intruderLocked = intruderLocked;
+    }
+
+    public boolean isAccountEnabled() {
+        return accountEnabled;
+    }
+
+    public void setAccountEnabled(boolean accountEnabled) {
+        this.accountEnabled = accountEnabled;
+    }
+
+    public Date getLastLoginTime() {
+        return lastLoginTime;
+    }
+
+    public void setLastLoginTime(Date lastLoginTime) {
+        this.lastLoginTime = lastLoginTime;
+    }
+
+    public List<UserAuditRecord> getUserHistory() {
+        return userHistory;
+    }
+
+    public void setUserHistory(List<UserAuditRecord> userHistory) {
+        this.userHistory = userHistory;
+    }
+
+    public Map<FormConfiguration, String> getSearchDetails() {
+        return searchDetails;
+    }
+
+    public void setSearchDetails(Map<FormConfiguration, String> searchDetails) {
+        this.searchDetails = searchDetails;
+    }
+
+    public String getPasswordSetDelta() {
+        return passwordSetDelta;
+    }
+
+    public void setPasswordSetDelta(String passwordSetDelta) {
+        this.passwordSetDelta = passwordSetDelta;
+    }
+
+    public boolean isAccountExpired() {
+        return accountExpired;
+    }
+
+    public void setAccountExpired(boolean accountExpired) {
+        this.accountExpired = accountExpired;
+    }
+}

+ 27 - 0
pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskSearchResultsBean.java

@@ -0,0 +1,27 @@
+package password.pwm.http.servlet.helpdesk;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class HelpdeskSearchResultsBean implements Serializable {
+    private List<Map<String,Object>> searchResults = new ArrayList<>();
+    private boolean sizeExceeded;
+
+    public List<Map<String, Object>> getSearchResults() {
+        return searchResults;
+    }
+
+    public void setSearchResults(List<Map<String, Object>> searchResults) {
+        this.searchResults = searchResults;
+    }
+
+    public boolean isSizeExceeded() {
+        return sizeExceeded;
+    }
+
+    public void setSizeExceeded(boolean sizeExceeded) {
+        this.sizeExceeded = sizeExceeded;
+    }
+}

+ 141 - 128
pwm/servlet/src/password/pwm/http/servlet/HelpdeskServlet.java → pwm/servlet/src/password/pwm/http/servlet/helpdesk/HelpdeskServlet.java

@@ -20,7 +20,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
-package password.pwm.http.servlet;
+package password.pwm.http.servlet.helpdesk;
 
 import com.novell.ldapchai.ChaiUser;
 import com.novell.ldapchai.exception.ChaiError;
@@ -49,20 +49,17 @@ import password.pwm.event.HelpdeskAuditRecord;
 import password.pwm.http.HttpMethod;
 import password.pwm.http.PwmRequest;
 import password.pwm.http.PwmSession;
-import password.pwm.http.bean.HelpdeskBean;
+import password.pwm.http.servlet.PwmServlet;
+import password.pwm.http.servlet.UpdateProfileServlet;
 import password.pwm.i18n.Display;
 import password.pwm.i18n.LocaleHelper;
 import password.pwm.i18n.Message;
-import password.pwm.ldap.LdapUserDataReader;
-import password.pwm.ldap.UserDataReader;
-import password.pwm.ldap.UserSearchEngine;
-import password.pwm.ldap.UserStatusReader;
+import password.pwm.ldap.*;
 import password.pwm.token.TokenService;
 import password.pwm.util.Helper;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.TimeDuration;
 import password.pwm.util.intruder.IntruderManager;
-import password.pwm.util.intruder.RecordType;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.macro.MacroMachine;
 import password.pwm.util.operations.ActionExecutor;
@@ -88,8 +85,8 @@ public class HelpdeskServlet extends PwmServlet {
     private static final PwmLogger LOGGER = PwmLogger.forClass(HelpdeskServlet.class);
 
     public enum HelpdeskAction implements PwmServlet.ProcessAction {
-        doUnlock(HttpMethod.POST),
-        doClearOtpSecret(HttpMethod.POST),
+        unlockIntruder(HttpMethod.POST),
+        clearOtpSecret(HttpMethod.POST),
         search(HttpMethod.POST),
         detail(HttpMethod.POST),
         executeAction(HttpMethod.POST),
@@ -129,7 +126,6 @@ public class HelpdeskServlet extends PwmServlet {
         final PwmSession pwmSession = pwmRequest.getPwmSession();
         final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
         final SessionStateBean ssBean = pwmSession.getSessionStateBean();
-        final HelpdeskBean helpdeskBean = pwmSession.getSessionBean(HelpdeskBean.class);
 
         if (!ssBean.isAuthenticated()) {
             pwmRequest.respondWithError(PwmError.ERROR_AUTHENTICATION_REQUIRED.toInfo());
@@ -152,40 +148,40 @@ public class HelpdeskServlet extends PwmServlet {
             pwmRequest.validatePwmFormID();
 
             switch (action) {
-                case doUnlock:
-                    processUnlockPassword(pwmRequest, helpdeskBean, helpdeskProfile);
-                    return;
-
-                case doClearOtpSecret:
-                    processClearOtpSecret(pwmRequest, helpdeskBean, helpdeskProfile);
-                    return;
-
                 case search:
-                    restSearchRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    restSearchRequest(pwmRequest, helpdeskProfile);
                     return;
 
                 case detail:
-                    processDetailRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    processDetailRequest(pwmRequest, helpdeskProfile);
                     return;
 
                 case executeAction:
-                    processExecuteActionRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    processExecuteActionRequest(pwmRequest, helpdeskProfile);
                     return;
 
                 case deleteUser:
-                    restDeleteUserRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    restDeleteUserRequest(pwmRequest, helpdeskProfile);
                     return;
 
                 case validateOtpCode:
-                    restValidateOtpCodeRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    restValidateOtpCodeRequest(pwmRequest, helpdeskProfile);
+                    return;
+
+                case unlockIntruder:
+                    restUnlockPassword(pwmRequest, helpdeskProfile);
+                    return;
+
+                case clearOtpSecret:
+                    restClearOtpSecret(pwmRequest, helpdeskProfile);
                     return;
 
                 case sendVerificationToken:
-                    restSendVerificationTokenRequest(pwmRequest, helpdeskBean, helpdeskProfile);
+                    restSendVerificationTokenRequest(pwmRequest, helpdeskProfile);
                     return;
 
                 case clientData:
-                    restClientData(pwmRequest, helpdeskBean, helpdeskProfile);
+                    restClientData(pwmRequest, helpdeskProfile);
                     return;
             }
         }
@@ -193,33 +189,34 @@ public class HelpdeskServlet extends PwmServlet {
         pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_SEARCH);
     }
 
-    private void restClientData(final PwmRequest pwmRequest, final HelpdeskBean helpdeskBean, final HelpdeskProfile helpdeskProfile)
+    private void restClientData(final PwmRequest pwmRequest, final HelpdeskProfile helpdeskProfile)
             throws IOException, PwmUnrecoverableException {
-        final HashMap<String,Object> returnValues = new HashMap<>();
+        final HelpdeskClientDataBean returnValues = new HelpdeskClientDataBean();
         { // search page
             final List<FormConfiguration> searchForm = helpdeskProfile.readSettingAsForm(PwmSetting.HELPDESK_SEARCH_FORM);
             final Map<String, String> searchColumns = new LinkedHashMap<>();
             for (final FormConfiguration formConfiguration : searchForm) {
                 searchColumns.put(formConfiguration.getName(), formConfiguration.getLabel(pwmRequest.getLocale()));
             }
-            returnValues.put("helpdesk_search_columns", searchColumns);
+            returnValues.setHelpdesk_search_columns(searchColumns);
         }
         { /// detail page
-            returnValues.put("helpdesk_setting_maskPasswords",helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_PASSWORD_MASKVALUE));
-            returnValues.put("helpdesk_setting_clearResponses",helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_CLEAR_RESPONSES,HelpdeskClearResponseMode.class));
-            returnValues.put("helpdesk_setting_PwUiMode",helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_SET_PASSWORD_MODE,HelpdeskUIMode.class));
-            returnValues.put("helpdesk_setting_tokenSendMethod",helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_TOKEN_SEND_METHOD, MessageSendMethod.class));
-
-
-            final HelpdeskBean.HelpdeskDetailInfo helpdeskDetailInfo = helpdeskBean.getHeldpdeskDetailInfo();
-            if (helpdeskDetailInfo != null) {
-                final UserInfoBean searchedUserInfo = helpdeskDetailInfo.getUserInfoBean();
-                if (searchedUserInfo != null && searchedUserInfo.getUserIdentity() != null) {
-                    final String obfuscatedDN = searchedUserInfo.getUserIdentity().toObfuscatedKey(pwmRequest.getConfig());
-                    returnValues.put("helpdesk_obfuscatedDN",obfuscatedDN);
-                    returnValues.put("helpdesk_username",searchedUserInfo.getUsername());
-                }
+            returnValues.setHelpdesk_setting_maskPasswords(helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_PASSWORD_MASKVALUE));
+            returnValues.setHelpdesk_setting_clearResponses(helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_CLEAR_RESPONSES,HelpdeskClearResponseMode.class));
+            returnValues.setHelpdesk_setting_PwUiMode(helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_SET_PASSWORD_MODE,HelpdeskUIMode.class));
+            returnValues.setHelpdesk_setting_tokenSendMethod(helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_TOKEN_SEND_METHOD, MessageSendMethod.class));
+        }
+        { //actions
+            final List<ActionConfiguration> actionConfigurations = helpdeskProfile.readSettingAsAction(PwmSetting.HELPDESK_ACTIONS);
+            final Map<String,Map<String,String>> actions = new LinkedHashMap<>();
+            for (final ActionConfiguration actionConfiguration : actionConfigurations) {
+                final Map<String,String> actionInfoMap = new LinkedHashMap<>();
+                actionInfoMap.put("name", actionConfiguration.getName());
+                actionInfoMap.put("description", actionConfiguration.getDescription());
+                actions.put(actionConfiguration.getName(), actionInfoMap);
             }
+
+            returnValues.setActions(actions);
         }
         final RestResultBean restResultBean = new RestResultBean(returnValues);
         LOGGER.trace(pwmRequest, "returning clientData: " + JsonUtil.serialize(restResultBean));
@@ -228,11 +225,20 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void processExecuteActionRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws ChaiUnavailableException, PwmUnrecoverableException, IOException, ServletException
     {
+        final String userKey = pwmRequest.readBodyAsJsonStringMap().get("userKey");
+        if (userKey == null || userKey.length() < 1) {
+            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_PARAMETER,"userKey parameter is missing");
+            pwmRequest.setResponseError(errorInformation);
+            pwmRequest.respondWithError(errorInformation, false);
+            return;
+        }
+        final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
+        LOGGER.debug(pwmRequest, "received executeAction request for user " + userIdentity.toString());
+
         final List<ActionConfiguration> actionConfigurations = helpdeskProfile.readSettingAsAction(PwmSetting.HELPDESK_ACTIONS);
         final String requestedName = pwmRequest.readParameterAsString("name");
         ActionConfiguration action = null;
@@ -251,25 +257,20 @@ public class HelpdeskServlet extends PwmServlet {
             return;
         }
 
-        if (helpdeskBean.getHeldpdeskDetailInfo() == null) {
-            final String errorMsg = "no user selected: " + requestedName;
-            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN,errorMsg);
-            LOGGER.debug(pwmRequest, errorInformation.toDebugStr());
-            final RestResultBean restResultBean = RestResultBean.fromError(errorInformation, pwmRequest);
-            pwmRequest.outputJsonResult(restResultBean);
-            return;
-        }
+        // check if user should be seen by actor
+        checkIfUserIdentityViewable(pwmRequest, helpdeskProfile, userIdentity);
 
         final boolean useProxy = helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_USE_PROXY);
         try {
-            final UserIdentity userIdentity = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUserIdentity();
             final PwmSession pwmSession = pwmRequest.getPwmSession();
 
             final ChaiUser chaiUser = useProxy ?
                     pwmRequest.getPwmApplication().getProxiedChaiUser(userIdentity) :
                     pwmRequest.getPwmSession().getSessionManager().getActor(pwmRequest.getPwmApplication(), userIdentity);
+            final MacroMachine macroMachine = MacroMachine.forUser(pwmRequest, userIdentity);
             final ActionExecutor actionExecutor = new ActionExecutor.ActionExecutorSettings(pwmRequest.getPwmApplication(),chaiUser)
                     .setExpandPwmMacros(true)
+                    .setMacroMachine(macroMachine)
                     .createActionExecutor();
 
             actionExecutor.executeAction(action,pwmRequest.getPwmSession());
@@ -280,13 +281,13 @@ public class HelpdeskServlet extends PwmServlet {
                         AuditEvent.HELPDESK_ACTION,
                         pwmSession.getUserInfoBean().getUserIdentity(),
                         action.getName(),
-                        helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUserIdentity(),
+                        userIdentity,
                         pwmSession.getSessionStateBean().getSrcAddress(),
                         pwmSession.getSessionStateBean().getSrcHostname()
                 );
                 pwmRequest.getPwmApplication().getAuditManager().submit(auditRecord);
             }
-            final RestResultBean restResultBean = RestResultBean.forSuccessMessage(pwmRequest, Message.Success_Action);
+            final RestResultBean restResultBean = RestResultBean.forSuccessMessage(pwmRequest.getLocale(), pwmRequest.getConfig(), Message.Success_Action, action.getName());
 
             pwmRequest.outputJsonResult(restResultBean);
         } catch (PwmOperationalException e) {
@@ -298,7 +299,6 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void restDeleteUserRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws ChaiUnavailableException, PwmUnrecoverableException, IOException, ServletException
@@ -317,13 +317,8 @@ public class HelpdeskServlet extends PwmServlet {
         final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmApplication.getConfig());
         LOGGER.info(pwmSession, "received deleteUser request by " + pwmSession.getUserInfoBean().getUserIdentity().toString() + " for user " + userIdentity.toString());
 
-        // check user identity matches helpdesk bean user
-        final UserInfoBean detailUserInfo = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean();
-        if (detailUserInfo == null || !userIdentity.equals(detailUserInfo.getUserIdentity())) {
-            pwmRequest.setResponseError(new ErrorInformation(PwmError.ERROR_UNKNOWN,"requested user for delete  is not currently selected user"));
-            pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_SEARCH);
-            return;
-        }
+        // check if user should be seen by actor
+        checkIfUserIdentityViewable(pwmRequest, helpdeskProfile, userIdentity);
 
         // execute user delete operation
         ChaiProvider provider = helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_USE_PROXY)
@@ -362,12 +357,10 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void processDetailRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws ChaiUnavailableException, PwmUnrecoverableException, IOException, ServletException
     {
-        helpdeskBean.setHeldpdeskDetailInfo(null);
         final String userKey = pwmRequest.readParameterAsString("userKey");
         if (userKey.length() < 1) {
             pwmRequest.respondWithError(
@@ -376,7 +369,7 @@ public class HelpdeskServlet extends PwmServlet {
         }
 
         final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
-        processDetailRequest(pwmRequest, helpdeskBean, helpdeskProfile, userIdentity);
+        processDetailRequest(pwmRequest, helpdeskProfile, userIdentity);
         final HelpdeskAuditRecord auditRecord = pwmRequest.getPwmApplication().getAuditManager().createHelpdeskAuditRecord(
                 AuditEvent.HELPDESK_VIEW_DETAIL,
                 pwmRequest.getPwmSession().getUserInfoBean().getUserIdentity(),
@@ -392,7 +385,6 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void processDetailRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile,
             final UserIdentity userIdentity
     )
@@ -406,7 +398,14 @@ public class HelpdeskServlet extends PwmServlet {
             return;
         }
 
-        helpdeskBean.setHeldpdeskDetailInfo(makeHelpdeskDetailInfo(pwmRequest, helpdeskProfile, userIdentity));
+        final HelpdeskDetailInfoBean helpdeskDetailInfoBean = makeHelpdeskDetailInfo(pwmRequest, helpdeskProfile, userIdentity);
+        pwmRequest.setAttribute(PwmConstants.REQUEST_ATTR.HelpdeskDetail, helpdeskDetailInfoBean);
+
+        if (helpdeskDetailInfoBean != null && helpdeskDetailInfoBean.getUserInfoBean() != null) {
+            final String obfuscatedDN = helpdeskDetailInfoBean.getUserInfoBean().getUserIdentity().toObfuscatedKey(pwmRequest.getConfig());
+            pwmRequest.setAttribute(PwmConstants.REQUEST_ATTR.HelpdeskObfuscatedDN, obfuscatedDN);
+            pwmRequest.setAttribute(PwmConstants.REQUEST_ATTR.HelpdeskUsername, helpdeskDetailInfoBean.getUserInfoBean().getUsername());
+        }
 
         StatisticsManager.incrementStat(pwmRequest, Statistic.HELPDESK_USER_LOOKUP);
         pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
@@ -414,7 +413,6 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void restSearchRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws ChaiUnavailableException, PwmUnrecoverableException, IOException, ServletException
@@ -423,15 +421,13 @@ public class HelpdeskServlet extends PwmServlet {
         final String username = valueMap.get("username");
 
         final boolean useProxy = helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_USE_PROXY);
-        helpdeskBean.setSearchString(username);
-        helpdeskBean.setHeldpdeskDetailInfo(null);
         final List<FormConfiguration> searchForm = helpdeskProfile.readSettingAsForm(PwmSetting.HELPDESK_SEARCH_FORM);
         final int maxResults = (int)helpdeskProfile.readSettingAsLong(PwmSetting.HELPDESK_RESULT_LIMIT);
 
-        if (helpdeskBean.getSearchString() == null || helpdeskBean.getSearchString().length() < 1) {
-            final HashMap<String,Object> emptyResults = new HashMap<>();
-            emptyResults.put("searchResults",new ArrayList<Map<String,String>>());
-            emptyResults.put("sizeExceeded",false);
+        if (username == null ||username.isEmpty()) {
+            final HelpdeskSearchResultsBean emptyResults = new HelpdeskSearchResultsBean();
+            emptyResults.setSearchResults(new ArrayList<Map<String,Object>>());
+            emptyResults.setSizeExceeded(false);
             final RestResultBean restResultBean = new RestResultBean();
             restResultBean.setData(emptyResults);
             pwmRequest.outputJsonResult(restResultBean);
@@ -468,16 +464,16 @@ public class HelpdeskServlet extends PwmServlet {
         }
 
         final RestResultBean restResultBean = new RestResultBean();
-        final LinkedHashMap<String,Object> outputData = new LinkedHashMap<>();
-        outputData.put("searchResults",new ArrayList<>(results.resultsAsJsonOutput(pwmRequest.getPwmApplication())));
-        outputData.put("sizeExceeded", sizeExceeded);
+        final HelpdeskSearchResultsBean outputData = new HelpdeskSearchResultsBean();
+        outputData.setSearchResults(results.resultsAsJsonOutput(pwmRequest.getPwmApplication()));
+        outputData.setSizeExceeded(sizeExceeded);
         restResultBean.setData(outputData);
         pwmRequest.outputJsonResult(restResultBean);
     }
 
 
 
-    private static HelpdeskBean.HelpdeskDetailInfo makeHelpdeskDetailInfo(
+    private static HelpdeskDetailInfoBean makeHelpdeskDetailInfo(
             final PwmRequest pwmRequest,
             final HelpdeskProfile helpdeskProfile,
             final UserIdentity userIdentity
@@ -493,7 +489,7 @@ public class HelpdeskServlet extends PwmServlet {
             return null;
         }
 
-        final HelpdeskBean.HelpdeskDetailInfo detailInfo = new HelpdeskBean.HelpdeskDetailInfo();
+        final HelpdeskDetailInfoBean detailInfo = new HelpdeskDetailInfoBean();
         final UserInfoBean uiBean = detailInfo.getUserInfoBean();
         final UserStatusReader userStatusReader = new UserStatusReader(pwmRequest.getPwmApplication(), pwmRequest.getSessionLabel());
         userStatusReader.populateUserInfoBean(uiBean, actorLocale, userIdentity, theUser.getChaiProvider());
@@ -564,35 +560,30 @@ public class HelpdeskServlet extends PwmServlet {
         return detailInfo;
     }
 
-    private void processUnlockPassword(
+    private void restUnlockPassword(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws PwmUnrecoverableException, ChaiUnavailableException, IOException, ServletException
     {
-        if (helpdeskBean.getHeldpdeskDetailInfo() == null) {
-            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, "password unlock request, but no user result in search");
-            LOGGER.error(pwmRequest, errorInformation);
-            pwmRequest.setResponseError(errorInformation);
-            pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+        final String userKey = pwmRequest.readParameterAsString("userKey");
+        if (userKey.length() < 1) {
+            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_PARAMETER,"userKey parameter is missing");
+            pwmRequest.respondWithError(errorInformation, false);
             return;
         }
+        final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
 
         if (!helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_ENABLE_UNLOCK)) {
             final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNAUTHORIZED, "password unlock request, but helpdesk unlock is not enabled");
             LOGGER.error(pwmRequest, errorInformation);
-            pwmRequest.setResponseError(errorInformation);
-            pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+            pwmRequest.respondWithError(errorInformation);
             return;
         }
 
-        final UserIdentity userIdentity = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUserIdentity();
-
         //clear pwm intruder setting.
         {
             final IntruderManager intruderManager = pwmRequest.getPwmApplication().getIntruderManager();
-            intruderManager.clear(RecordType.USERNAME, helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUsername());
             intruderManager.convenience().clearUserIdentity(userIdentity);
         }
 
@@ -617,35 +608,39 @@ public class HelpdeskServlet extends PwmServlet {
         } catch (ChaiPasswordPolicyException e) {
             final ChaiError passwordError = e.getErrorCode();
             final PwmError pwmError = PwmError.forChaiError(passwordError);
-            pwmRequest.setResponseError(new ErrorInformation(pwmError == null ? PwmError.PASSWORD_UNKNOWN_VALIDATION : pwmError));
+            pwmRequest.respondWithError(new ErrorInformation(pwmError == null ? PwmError.PASSWORD_UNKNOWN_VALIDATION : pwmError));
             LOGGER.trace(pwmRequest, "ChaiPasswordPolicyException was thrown while resetting password: " + e.toString());
+            return;
         } catch (ChaiOperationException e) {
             final PwmError returnMsg = PwmError.forChaiError(e.getErrorCode()) == null ? PwmError.ERROR_UNKNOWN : PwmError.forChaiError(e.getErrorCode());
             final ErrorInformation error = new ErrorInformation(returnMsg, e.getMessage());
-            pwmRequest.setResponseError(error);
+            pwmRequest.respondWithError(error);
             LOGGER.warn(pwmRequest, "error resetting password for user '" + userIdentity.toDisplayString() + "'' " + error.toDebugStr() + ", " + e.getMessage());
+            return;
         }
 
-        Helper.pause(1000); // delay before re-reading data
-        helpdeskBean.setHeldpdeskDetailInfo(makeHelpdeskDetailInfo(pwmRequest, helpdeskProfile, userIdentity));
-        pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+        final RestResultBean restResultBean = new RestResultBean();
+        restResultBean.setSuccessMessage(Message.getLocalizedMessage(pwmRequest.getLocale(),Message.Success_Unknown,pwmRequest.getConfig()));
+        pwmRequest.outputJsonResult(restResultBean);
     }
 
     private void restValidateOtpCodeRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
-            throws IOException, PwmUnrecoverableException, ServletException {
+            throws IOException, PwmUnrecoverableException, ServletException, ChaiUnavailableException
+    {
         final long DELAY_MS = 1000;
         final Date startTime = new Date();
 
-        if (helpdeskBean.getHeldpdeskDetailInfo() == null) {
-            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, "rest validate otp code request, but no user result in search");
-            LOGGER.error(pwmRequest, errorInformation);
-            pwmRequest.respondWithError(errorInformation);
+        final Map<String,String> inputRecord = pwmRequest.readBodyAsJsonStringMap();
+        final String userKey = inputRecord.get("userKey");
+        if (userKey == null || userKey.isEmpty()) {
+            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_PARAMETER,"userKey parameter is missing");
+            pwmRequest.respondWithError(errorInformation, false);
             return;
         }
+        final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
 
         if (!helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_ENABLE_OTP_VERIFY)) {
             final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNAUTHORIZED, "password unlock request, but helpdesk otp verify is not enabled");
@@ -654,11 +649,8 @@ public class HelpdeskServlet extends PwmServlet {
             return;
         }
 
-        final UserIdentity userIdentity = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUserIdentity();
-
-        final Map<String,String> inputRecord = pwmRequest.readBodyAsJsonStringMap();
         final String code = inputRecord.get("code");
-        final OTPUserRecord otpUserRecord = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getOtpUserRecord();
+        final OTPUserRecord otpUserRecord = pwmRequest.getPwmApplication().getOtpService().readOTPUserConfiguration(pwmRequest.getSessionLabel(), userIdentity);
         try {
             final boolean passed = pwmRequest.getPwmApplication().getOtpService().validateToken(
                     pwmRequest.getPwmSession(),
@@ -700,15 +692,14 @@ public class HelpdeskServlet extends PwmServlet {
 
     private void restSendVerificationTokenRequest(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
-            throws IOException, PwmUnrecoverableException
+            throws IOException, PwmUnrecoverableException, ServletException, ChaiUnavailableException
     {
         final Configuration config = pwmRequest.getConfig();
+        final Map<String,String> bodyParams = pwmRequest.readBodyAsJsonStringMap();
         MessageSendMethod tokenSendMethod = helpdeskProfile.readSettingAsEnum(PwmSetting.HELPDESK_TOKEN_SEND_METHOD, MessageSendMethod.class);
         if (tokenSendMethod == MessageSendMethod.CHOICE_SMS_EMAIL) {
-            final Map<String,String> bodyParams = pwmRequest.readBodyAsJsonStringMap();
             if (bodyParams != null && bodyParams.containsKey("method")) {
                 switch (bodyParams.get("method")) {
                     case "sms":
@@ -728,9 +719,17 @@ public class HelpdeskServlet extends PwmServlet {
             }
         }
 
+        final String userKey = bodyParams.get("userKey");
+        if (userKey == null || userKey.length() < 1) {
+            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_PARAMETER,"userKey parameter is missing");
+            pwmRequest.respondWithError(errorInformation, false);
+            return;
+        }
+        final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
+
 
-        final UserInfoBean userInfoBean = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean();
-        final UserIdentity userIdentity = userInfoBean.getUserIdentity();
+        final HelpdeskDetailInfoBean helpdeskDetailInfoBean = makeHelpdeskDetailInfo(pwmRequest, helpdeskProfile, userIdentity);
+        final UserInfoBean userInfoBean = helpdeskDetailInfoBean.getUserInfoBean();
         final MacroMachine macroMachine = MacroMachine.forNonUserSpecific(pwmRequest.getPwmApplication(), pwmRequest.getSessionLabel());
         final String configuredTokenString = config.readAppProperty(AppProperty.HELPDESK_TOKEN_VALUE);
         final String tokenKey = macroMachine.expandMacros(configuredTokenString);
@@ -782,35 +781,29 @@ public class HelpdeskServlet extends PwmServlet {
         pwmRequest.outputJsonResult(restResultBean);
     }
 
-    private void processClearOtpSecret(
+    private void restClearOtpSecret(
             final PwmRequest pwmRequest,
-            final HelpdeskBean helpdeskBean,
             final HelpdeskProfile helpdeskProfile
     )
             throws ServletException, IOException, PwmUnrecoverableException, ChaiUnavailableException
     {
-        if (helpdeskBean.getHeldpdeskDetailInfo() == null) {
-            final String errorMsg = "password clear otp request, but no user result in search";
-            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_UNKNOWN, errorMsg);
-            LOGGER.error(pwmRequest, errorMsg);
-            pwmRequest.setResponseError(errorInformation);
-            pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+        final String userKey = pwmRequest.readBodyAsJsonStringMap().get("userKey");
+        if (userKey == null || userKey.length() < 1) {
+            final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_MISSING_PARAMETER,"userKey parameter is missing");
+            pwmRequest.respondWithError(errorInformation, false);
             return;
         }
+        final UserIdentity userIdentity = UserIdentity.fromKey(userKey, pwmRequest.getConfig());
 
         if (!helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_CLEAR_OTP_BUTTON)) {
             final String errorMsg = "clear otp request, but helpdesk clear otp button is not enabled";
             final ErrorInformation errorInformation = new ErrorInformation(PwmError.ERROR_SERVICE_NOT_AVAILABLE, errorMsg);
             LOGGER.error(pwmRequest, errorMsg);
-            pwmRequest.setResponseError(errorInformation);
-            pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+            pwmRequest.respondWithError(errorInformation);
             return;
         }
 
-        final UserIdentity userIdentity = helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUserIdentity();
-
         //clear pwm intruder setting.
-        pwmRequest.getPwmApplication().getIntruderManager().clear(RecordType.USERNAME, helpdeskBean.getHeldpdeskDetailInfo().getUserInfoBean().getUsername());
         pwmRequest.getPwmApplication().getIntruderManager().convenience().clearUserIdentity(userIdentity);
 
         try {
@@ -832,13 +825,14 @@ public class HelpdeskServlet extends PwmServlet {
         } catch (PwmOperationalException e) {
             final PwmError returnMsg = e.getError();
             final ErrorInformation error = new ErrorInformation(returnMsg, e.getMessage());
-            pwmRequest.setResponseError(error);
+            pwmRequest.respondWithError(error);
             LOGGER.warn(pwmRequest, "error clearing OTP secret for user '" + userIdentity + "'' " + error.toDebugStr() + ", " + e.getMessage());
+            return;
         }
 
-        Helper.pause(1000); // delay before re-reading data
-        helpdeskBean.setHeldpdeskDetailInfo(makeHelpdeskDetailInfo(pwmRequest, helpdeskProfile, userIdentity));
-        pwmRequest.forwardToJsp(PwmConstants.JSP_URL.HELPDESK_DETAIL);
+        final RestResultBean restResultBean = new RestResultBean();
+        restResultBean.setSuccessMessage(Message.getLocalizedMessage(pwmRequest.getLocale(),Message.Success_Unknown,pwmRequest.getConfig()));
+        pwmRequest.outputJsonResult(restResultBean);
     }
 
     private static String getSearchFilter(final Configuration configuration, final HelpdeskProfile helpdeskProfile) {
@@ -879,4 +873,23 @@ public class HelpdeskServlet extends PwmServlet {
                 pwmRequest.getPwmApplication().getProxiedChaiUser(userIdentity) :
                 pwmRequest.getPwmSession().getSessionManager().getActor(pwmRequest.getPwmApplication(), userIdentity);
     }
+
+    private static void checkIfUserIdentityViewable(
+            final PwmRequest pwmRequest,
+            final HelpdeskProfile helpdeskProfile,
+            final UserIdentity userIdentity
+    )
+            throws PwmUnrecoverableException {
+        final String filterSetting = getSearchFilter(pwmRequest.getConfig(), helpdeskProfile);
+        String filterString = filterSetting.replace(PwmConstants.VALUE_REPLACEMENT_USERNAME, "*");
+        while (filterString.contains("**")) {
+            filterString = filterString.replace("**", "*");
+        }
+
+        final boolean match = LdapPermissionTester.testQueryMatch(pwmRequest.getPwmApplication(), pwmRequest.getSessionLabel(), userIdentity, filterString);
+        if (!match) {
+            throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_SERVICE_NOT_AVAILABLE, "requested userDN is not available within configured search filter"));
+        }
+    }
+
 }

+ 2 - 2
pwm/servlet/src/password/pwm/i18n/Config.properties

@@ -113,7 +113,7 @@ Warning_DownloadLocal=<b>Warning:</b> The download LocalDB archive may contain s
 Warning_InvalidFormat=The value does not have the correct format.
 Warning_UploadIE9=This feature is not available when using Internet Explorer 9 and earlier.  Please use a different browser or a newer version of Internet Explorer.
 Warning_ValueIncorrectFormat=The value does not have the correct format.
-Warning_SmsTestData=The test that will be performed will include resolving configured macros (if any).  The macros will be resolved using data of the logged in user, and thus may include sensitive data.
+Warning_SmsTestData=The test that will be performed will include resolving configured macros (if any).  The macros will be resolved using data of the logged in user, and thus may include sensitive data.  The message should be formatted as required by the SMS gateway service.
 Tooltip_ResetButton=Return this setting to its default value.
 Tooltip_HelpButton=Show description for this setting.
 Tooltip_ModifiedNotice=This setting has been modified from the default value
@@ -127,7 +127,7 @@ Tooltip_IconSearchNoResults=No search results
 Tooltip_IconExpandAll=Expand All
 Tooltip_IconCollapseAll=Collapse All
 Tooltip_IconFilterSettings=Filter Settings
-Tooltip_Setting_Permission_Profile=Specify which of the defined LDAP profiles to use for the associated filter.  If <i>all</i>, all profiles will be checked for the associated filter.  If <i>default</i>, than only the default LDAP Profile will be checked for the associated search filter.
+Tooltip_Setting_Permission_Profile=Specify which of the defined LDAP profiles to use for the associated filter.  If "all", then all profiles will be checked for the associated filter.
 Tooltip_Setting_Permission_Filter=A valid LDAP search filter.
 Tooltip_Setting_Permission_Base=An optional LDAP Base DN for the search.  If supplied, only users under this LDAP Base DN will be considered a match.
 Tooltip_FormOptions_Description=Detailed description of this form item, including any special instructions.

+ 6 - 6
pwm/servlet/src/password/pwm/i18n/ConfigEditor.properties

@@ -316,11 +316,11 @@ Setting_Description_ldap.ad.proxyForgotten=If true, when the user's password is
 Setting_Description_ldap.addObjectClasses=Object classes to automatically add to users who authenticate to the password servlet.  Typically this is an auxillary ldap class that contains attributes used by to store password self service data.
 Setting_Description_ldap.defaultObjectClasses=Object class(es) of user entries in your LDAP directory.
 Setting_Description_ldap.duplicateMode=Control how the application will handle the situation when multiple user matches are found for a search, such as during authentication.
-Setting_Description_ldap.edirectory.cr.applyWordlist=
-Setting_Description_ldap.edirectory.cr.maxQuestionCharsInAnswer=
-Setting_Description_ldap.edirectory.cr.minRandomDuringSetup=
+Setting_Description_ldap.edirectory.cr.applyWordlist=Prohibit answers in the wordlist dictionary from being used in answers when saving challenge/response answers.
+Setting_Description_ldap.edirectory.cr.maxQuestionCharsInAnswer=Specify the maximum number of characters of the question text to be permitted in answers when saving challenge/response answers.
+Setting_Description_ldap.edirectory.cr.minRandomDuringSetup=Set the number of random questions required to be completed at the time of saving of challenge/response answers.
 Setting_Description_ldap.edirectory.enableNmas=When connecting to a NetIQ eDirectory LDAP directory, this parameter will control if NMAS extensions will be used when connecting to the ldap directory.  Enabling nmas results in\:<ul><li>better error messages when using universal password policies</li><li>better error handling during certain change password scenarios</li></ul>Unless you are using an older version of eDirectory (pre 8.8 or before), it is generally best to set this to true.<br/><br/>All NMAS operations require an SSL connection to the directory.
-Setting_Description_ldap.edirectory.readChallengeSets=If true, the challenge set configuration from eDirectory Universal Password policy will be read and applied to users.  If an eDirectory challenge set is applied to the user, that policy will be used, otherwise the policy that is a part of this configuration will be used.  To require only NMAS configured challenge sets, be sure to blank out the required and forgotten questions as part of this configuration, or else those will be used in cases where no eDirectory policy.
+Setting_Description_ldap.edirectory.readChallengeSets=If enabled, the challenge set configuration from eDirectory Universal Password policy will be read and applied to users.  If an eDirectory challenge set is applied to the user, that policy will be used, otherwise the policy that is a part of this configuration will be used.  To require only NMAS configured challenge sets, be sure to blank out the required and forgotten questions as part of this configuration, or else those will be used in cases where no eDirectory policy are defined.
 Setting_Description_ldap.edirectory.readUserPwd=If true, the user's password will be read from eDirectory before changing it.  This prevents an extra password change from being set to a temporary random password during forgotten password sequence.  If the proxy user does not have rights to read the password, then a temporary random password will be generated for the user anyway.
 Setting_Description_ldap.edirectory.storeNmasResponses=If true, user responses will be saved to the NMAS response storage container on the user.  This storage is in addition to any other configured response storage methods.
 Setting_Description_ldap.edirectory.useNmasResponses=If true, NMAS stored responses will be used for forgotten password recovery.  All other configured storage methods will be tried before the NMAS stored responses will be evaluated.
@@ -368,7 +368,7 @@ Setting_Description_newUser.form=<p>New User form creation attributes/fields.
 Setting_Description_newUser.minimumWaitTime=During a new user creation, the user will be delayed for at least this amount of time before forwarding the user to the next activity.  <br/><br/>Value is specified in seconds.
 Setting_Description_newUser.passwordPolicy.user=User to use as template for password policy.  The user specified here will be used as a 'template' for the new user password policy.  If the value is <i>TESTUSER</i>, the configured test user's password policy will be used.
 Setting_Description_newUser.profile.displayName=The publicly viewable display name of this profile.
-Setting_Description_newUser.profile.list=List of New User profiles.  When multiple challenge policies are configured, the user will be able to select which profile to complete.  The value of the setting <code>@PwmSettingReference\:newUser.profile.displayName@</code> will be shown as the profile name to users.
+Setting_Description_newUser.profile.list=List of New User profiles.  When multiple new user profiles are configured, the user will be able to select which profile to complete.  The value of the setting <code>@PwmSettingReference\:newUser.profile.displayName@</code> will be shown as the profile name to users.
 Setting_Description_newUser.sms.verification=If true, an SMS will be sent to the new user's mobile phone number before the account is created.  The NewUser must verify receipt of the SMS before the account will be created.
 Setting_Description_newUser.username.definition=\n        <p>This setting controls the entry id of the newly created LDAP entry.  In some directories this is often used\n        as the "username", though many directories separate the concepts and values of entry ID and username.</p>\n        <p>Values can (and usually do) include macros.  In case the first value\n        is already existing in the directory, each successive value is tried until a free value is found.  Though the user\n        is not yet created when the macros are evaluated, LDAP macros will use the data provided on the new user form.  Other\n        macros may not be useful as there no data yet available on the user.</p>\n        <p>If blank, the username must be present in the form, defined as the LDAP naming attribute value.</p>\n
 Setting_Description_newUser.writeAttributes=Actions to be taken when a user is created.  These actions will be executed just after creating the object.
@@ -485,7 +485,7 @@ Setting_Description_recovery.enable=If enabled, forgotten password recovery will
 Setting_Description_recovery.form=Form fields for activate user module.  Each attribute will be required to be entered by the user.  Ideally, the user will be required to enter some personal data that is not publicly known.
 Setting_Description_recovery.postActions=Actions to execute after a user has successfully completed the forgotten password sequence and the user's password has been modified.  Macros may be used.
 Setting_Description_recovery.profile.list=A list of forgotten password policies.  This list is evaluated in the order shown here.  The first profile in the list to match on the setting <code>@PwmSettingReference\:recovery.queryMatch@</code> will be applied to a user.<br/><br/>Unless you need to define different forgotten password behavior for different users, you do not need to change this list from the default.
-Setting_Description_recovery.queryMatch=Helpdesk Profile Match.
+Setting_Description_recovery.queryMatch=This setting defines the set of users that this profile will be assigned to.
 Setting_Description_recovery.require.otp=If enabled, a one time password will be required during the forgotten password process.  The user will be required to type the generated token in order to proceed to recover their password.  If this setting is disabled, then at least one other recovery method must be set to true for forgotten password recovery to operate.
 Setting_Description_recovery.response.readPreference=Location to read the responses from. If an option with multiple values are selected, each location will be read in turn until a stored response is found.
 Setting_Description_recovery.response.writePreference=<p>Location to write the responses to.  All storage methods will be written to when the user configures their response answers.</p><p><b>WARNING\: </b>The LocalDB should never be used 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>

+ 80 - 19
pwm/servlet/src/password/pwm/i18n/Display_de.properties

@@ -26,13 +26,16 @@ Button_Cancel=Abbrechen
 Button_ChangePassword=Passwort \u00e4ndern
 Button_ChangeResponses=Zur\u00fcck
 Button_CheckCode=Code pr\u00fcfen
+Button_ClearOtpReEnroll=Mobiles Ger\u00e4t erneut registrieren
 Button_HelpdeskClearOtpSecret=OTP-Geheimnis l\u00f6schen
 Button_ClearResponses=Antworten l\u00f6schen
 Button_CloseWindow=Fenster schlie\u00dfen
 Button_Confirm=Best\u00e4tigen
-Button_ConfirmResponses=Antworten best\u00e4tigen
+Button_ConfirmResponses=Sicherheitsantworten best\u00e4tigen
 Button_Continue=Weiter
 Button_Create=Erstellen
+Button_Delete=L\u00f6schen
+Button_Email=Email
 Button_GoBack=Zur\u00fcck
 Button_Hide=Ausblenden
 Button_Hide_Responses=Antworten ausblenden
@@ -40,12 +43,15 @@ Button_Home=Startseite
 Button_Login=Anmelden
 Button_Logout=Abmelden
 Button_More=Mehr
+Button_OrgChart=Organigramm
 Button_RecoverPassword=Antworten pr\u00fcfen
 Button_Reset=L\u00f6schen
 Button_Search=Suchen
 Button_SetResponses=Antworten speichern
 Button_Show=Anzeigen
 Button_Show_Responses=Antworten anzeigen
+Button_Skip=\u00dcberspringen
+Button_SMS=SMS
 Button_Unlock=Entsperren
 Button_UnlockPassword=Passwort entsperren
 Button_Update=Aktualisieren
@@ -54,8 +60,8 @@ Button_OK=OK
 Display_ActivateUser=Geben Sie die folgenden Informationen ein, um Ihre Identit\u00e4t zu best\u00e4tigen. Anhand dieser Informationen wird Ihr Benutzerkonto ermittelt und aktiviert.<p/>Schlie\u00dfen Sie den Vorgang vollst\u00e4ndig ab, damit Ihr Konto ordnungsgem\u00e4\u00df aktiviert werden kann.
 Display_AutoGeneratedPassword=Automatisch ein neues Passwort generieren
 Display_CapsLockIsOn=FESTSTELLTASTE ist aktiviert
-Display_Captcha=Geben Sie unten den \u00dcberpr\u00fcfungscode ein. Die Eingabe dieses Codes tr\u00e4gt zum Schutz Ihres Kontos vor Missbrauch bei.
-Display_CaptchaInputWords=Geben Sie die zwei oben abgebildeten W\u00f6rter ein.
+Display_Captcha=Schlie\u00dfen Sie unten den \u00dcberpr\u00fcfungsvorgang ab. Dieser Vorgang tr\u00e4gt zum Schutz Ihres Kontos vor Missbrauch bei.
+Display_CaptchaInputWords=Geben Sie den oben abgebildeten Text ein
 Display_CaptchaInputNumbers=Geben Sie die Zahlen ein, die Sie h\u00f6ren.
 Display_CaptchaGetAudio=Audio-CAPTCHA abrufen
 Display_CaptchaGetImage=Bild-CAPTCHA abrufen
@@ -67,7 +73,7 @@ Display_CheckingData=Daten werden gepr\u00fcft ...
 Display_CheckingPassword=Passwort wird gepr\u00fcft ...
 Display_CheckingResponses=Antworten werden gepr\u00fcft ...
 Display_CommunicationError=Kommunikation mit dem Server nicht m\u00f6glich. Fahren Sie fort, wenn die Serverkommunikation verf\u00fcgbar 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, m\u00fcssen Sie genau diese Antworten auf die nachstehenden Fragen eingeben.
+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
 Display_Days=Tage
 Display_ErrorBody=Ein Fehler ist aufgetreten. Schlie\u00dfen Sie den Browser und versuchen Sie es sp\u00e4ter erneut. Wenn dieser Fehler wiederholt auftritt, wenden Sie sich an den Helpdesk.
@@ -83,13 +89,25 @@ Display_Hours=Stunden
 Display_IdleTimeout=Zeit\u00fcberschreitung nach Inaktivit\u00e4t:
 Display_IdleWarningMessage=Bei der Browsersitzung tritt in K\u00fcrze eine Zeit\u00fcberschreitung auf. Klicken Sie auf eine beliebige Stelle dieser Seite, um die Sitzung wieder aufzunehmen.
 Display_IdleWarningTitle=Zeit\u00fcberschreitung nach Inaktivit\u00e4t
+Display_JavascriptRequired=Zum Anzeigen dieser Seite ist JavaScript erforderlich.
 Display_LeaveDirtyPasswordPage=Wenn Sie diese Seite verlassen, wird das Passwort nicht ge\u00e4ndert.
 Display_Login=
 Display_LoginPasswordOnly=Geben Sie unten Ihr Passwort ein. F\u00fcr den Zugriff auf diese Anwendung ist Ihr aktuelles Passwort erforderlich.
 Display_Logout=<b>Sie sind nun abgemeldet.</b><p/>Schlie\u00dfen Sie alle Fenster des Internetbrowsers, bevor Sie erneut versuchen, sich anzumelden.
 Display_Minute=Minute
 Display_Minutes=Minuten
+Display_NAAF_PASSWORD=Geben Sie das Passwort f\u00fcr die NAAF-Authentifizierung ein.
+Display_NAAF_LDAP_PASSWORD=Geben Sie das Passwort f\u00fcr die LDAP-Authentifizierung ein.
+Display_NAAF_SECURITY_QUESTIONS=Beantworten Sie die Sicherheitsfragen.
+Display_NAAF_EMAIL_OTP=Eine Email mit dem Einmalpasswort wurde gesendet.
+Display_NAAF_SMS_OTP=Eine SMS mit dem Einmalpasswort wurde gesendet.
+Display_NAAF_SMARTPHONE=Der Smartphone-\u00dcberpr\u00fcfungsvorgang wurde gestartet. Fahren Sie nach dem Abschluss des Vorgangs fort.
+Display_NAAF_RADIUS=Geben Sie das Passwort f\u00fcr die RADIUS-Authentifizierung ein.
+Display_NAAF_TOTP=Geben Sie den TOTP-Wert ein.
+Display_NAAF_HOTP=Geben Sie den HOTP-Wert ein.
+Display_NAAF_VOICE=Der Sprach\u00fcberpr\u00fcfungsvorgang wurde gestartet. Fahren Sie nach dem Abschluss des Vorgangs fort.
 Display_NewUser=F\u00fcllen Sie das nachstehende Formular aus, um ein neues Konto zu registrieren.
+Display_NewUserProfile=W\u00e4hlen Sie ein Profil aus, um ein neues Konto zu registrieren.
 Display_PasswordExpired=Ihr Passwort ist abgelaufen. Sie m\u00fcssen jetzt ein neues Passwort festlegen.
 Display_PasswordGeneration=Die folgenden Passw\u00f6rter wurden mit dem Zufallsgenerator f\u00fcr Sie erstellt. Die Passw\u00f6rter basieren auf echten W\u00f6rtern, damit sie einfacher zu merken sind, wurden jedoch abge\u00e4ndert, um ein Erraten des Passworts zu erschweren.
 Display_PasswordNoExpire=Das Passwort l\u00e4uft nicht ab.
@@ -100,10 +118,14 @@ Display_PasswordStrengthMedium=St\u00e4rke: <b>ausreichend</b>
 Display_PasswordReplicationStatus=Passwortreproduktion (Fortschritt: %1%)
 Display_PasswordWarn=<b>Das Passwort l\u00e4uft bald ab.</b>. \u00c4ndern Sie das Passwort m\u00f6glichst bald, um Probleme beim Zugriff auf diesen Service zu vermeiden.  <br/><br/>Das Passwort l\u00e4uft am %1% ab.
 Display_PeopleSearch=Geben Sie unten die Suchabfrage ein. Sie k\u00f6nnen anhand eines Namens, einer Email-Adresse oder einer Telefonnummer nach einer Person suchen.
-Display_PleaseWait=Bitte warten ...
+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.
+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.
 Display_RecoverChoiceReset=Legen Sie ein neues Passwort fest. Falls Sie Ihr Passwort vergessen haben und ein neues Passwort festlegen m\u00f6chten, klicken Sie hier. Ihr Konto wird auch entsperrt, wenn Sie ein neues Passwort festlegen.
 Display_RecoverChoiceUnlock=Entsperren Sie Ihr Konto. Wenn Sie sich an Ihr Passwort erinnern, k\u00f6nnen Sie das Konto durch Auswahl dieser Option entsperren. Das Passwort wird nicht ge\u00e4ndert.
 Display_RecoverEnterCode=Zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t wurde ihnen ein Sicherheitscode gesendet. Klicken Sie in der Email auf den Link oder kopieren Sie den Sicherheitscode und f\u00fcgen Sie ihn hier ein.
@@ -112,10 +134,10 @@ Display_RecoverPassword=Beantworten Sie die nachstehenden Fragen. Wenn Sie die F
 Display_RecoverPasswordChoices=Das Konto wurde nach zu vielen falschen Anmeldeversuchen gesperrt. Zum Fortfahren m\u00fcssen Sie das Konto entsperren oder das Passwort \u00e4ndern.
 Display_RecoverRandomResponses=Beantworten Sie zum Fortfahren die folgenden Fragen.
 Display_RecoverRequiredResponses=Der Administrator ben\u00f6tigt diese Fragen.
-Display_RecoverOTP=Geben Sie zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t das generierte Einmalpasswort ein.
-Display_RecoverOTPIdentified=Geben Sie das durch %1% identifizierte, generierte Einmalpasswort ein, um Ihre Identit\u00e4t zu \u00fcberpr\u00fcfen.
+Display_RecoverOTP=Generieren Sie mit Ihrem mobilen Ger\u00e4t Ihren Sicherheitscode, um Ihre Identit\u00e4t zu best\u00e4tigen.
+Display_RecoverOTPIdentified=Generieren Sie mit Ihrem mobilen Ger\u00e4t Ihren Sicherheitscode, um Ihre Identit\u00e4t zu best\u00e4tigen. Die Registrierungs-ID des mobilen Ger\u00e4ts ist <b>%1%</b>.
 Display_ResponsesPrompt=Geben Sie die Sicherheitsantworten ein
-Display_SelectionIndicator=W\u00e4hlen Sie ein Element aus der Liste aus
+Display_SelectionIndicator=W\u00e4hlen Sie ein Frageelement aus der Liste aus
 Display_SearchCompleted=Suche abgeschlossen.
 Display_SearchResultsExceeded=Die Suchergebnisse \u00fcberschreiten die maximale Suchgr\u00f6\u00dfe.
 Display_SetRandomPasswordPrompt=F\u00fcr diesen Benutzer ein neues Zufallspasswort festlegen?
@@ -125,10 +147,22 @@ Display_Seconds=Sekunden
 Display_SetupHelpdeskResponses=<p>Der Administrator erfordert die Angabe der folgenden Antworten. Anhand dieser Antworten wird Ihre Identit\u00e4t \u00fcberpr\u00fcft, falls Sie sich an den Helpdesk wenden, um Hilfe zu erhalten.</p>
 Display_SetupRandomResponses=
 Display_SetupRequiredResponses=
-Display_SetupResponses=<p> Sie k\u00f6nnen ein vergessenes Passwort zur\u00fccksetzen, indem Sie Fragen beantworten, deren Antworten nur Sie kennen.</p><p>W\u00e4hlen Sie die Fragen und Antworten aus, die zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t verwendet werden sollen, falls Sie Ihr Passwort vergessen. Die Antworten auf diese Fragen k\u00f6nnen f\u00fcr den Zugriff auf Ihr Konto verwendet werden. Geben Sie daher Antworten ein, die von anderen nicht leicht zu erraten oder zu ermitteln sind.</p>
-Display_SetupOtpSecret=<p><b>Einmalpasswort-Softtoken einrichten</b></p><p>Scannen Sie den QR-Code, um die Softtoken-Anwendung zu konfigurieren, oder geben Sie das Geheimnis und die Optionen manuell ein.</p>
-Display_WarnExistingOtpSecret=Ein OTP-Geheimnis ist bereits vorhanden. Klicken Sie auf 'Weiter', um das vorhandene Geheimnis zu l\u00f6schen und ein neues Geheimnis einzurichten.
-Display_PleaseVerifyOtp=Geben Sie das generierte Einmalpasswort ein, um die Einrichtung zu best\u00e4tigen.
+Display_SetupResponses=<p>Wenn Sie Ihr Passwort vergessen, k\u00f6nnen Sie durch Beantworten der Sicherheitsfragen auf Ihr Konto zugreifen.</p><p>W\u00e4hlen Sie die Fragen und Antworten aus, die zur \u00dcberpr\u00fcfung Ihrer Identit\u00e4t verwendet werden sollen, falls Sie Ihr Passwort vergessen. Die Antworten auf diese Fragen k\u00f6nnen f\u00fcr den Zugriff auf Ihr Konto verwendet werden. Geben Sie daher Antworten ein, die von anderen nicht leicht zu erraten oder zu ermitteln sind.</p>
+Display_SetupOtpSecret=Wenn Sie Ihr Passwort vergessen, k\u00f6nnen Sie mit Ihrem mobilen Ger\u00e4t auf Ihr Konto zugreifen. Befolgen Sie die Anweisungen unten f\u00fcr den entsprechenden Ger\u00e4tetyp.
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>Installieren Sie die Google Authenticator-App f\u00fcr Android.</b><ol><li>\u00d6ffnen Sie auf dem Mobiltelefon den Google Play Store.</li><li>Suchen Sie nach <b>Google Authenticator</b>.<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Aus dem Google Play Store herunterladen</a>)</li><li>Laden Sie die App herunter und installieren Sie sie.</li></ol><b>\u00d6ffnen und konfigurieren Sie dann Google Authenticator.</b><ol><li>Ber\u00fchren Sie in Google Authenticator das Men\u00fc und w\u00e4hlen Sie "Konto einrichten" aus.</li><li>W\u00e4hlen Sie "Einen Barcode scannen" aus.</li><li>Scannen Sie den Code mit der Kamera des Mobiltelefons.</li><li>Klicken Sie nach dem Scannen des Codes auf die Schaltfl\u00e4che 'Weiter'.</li></ol>
+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_WarnExistingOtpSecretTime=Sie haben das Ger\u00e4t bereits am <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.
+Display_PleaseVerifyOtp=Geben Sie den 6-stelligen Best\u00e4tigungscode f\u00fcr das Ger\u00e4t ein. Wenn das Ger\u00e4t nicht zur Generierung eines Best\u00e4tigungscodes konfiguriert ist, kehren Sie zur vorigen Seite zur\u00fcck und konfigurieren Sie das Ger\u00e4t.
+Display_OtpRecoveryInfo=Jeder dieser Wiederherstellungscodes kann genau einmal verwendet werden, wenn Sie keinen Zugriff auf Ihr Mobiltelefon haben. <a class="pwm-link-print">Drucken Sie diese Seite</a> oder notieren Sie die Codes und bewahren Sie sie an einem sicheren Ort auf.
+Display_OtpClearWarning=Sind Sie sicher, dass Sie fortfahren m\u00f6chten? Wenn Sie fortfahren, wird die vorhandene Registrierung gel\u00f6scht und das Ger\u00e4t muss neu konfiguriert werden.
+Display_ResponsesClearWarning=Sind Sie sicher, dass Sie fortfahren m\u00f6chten? Wenn Sie fortfahren, werden die vorhandenen Antworten gel\u00f6scht und Sie m\u00fcssen die Sicherheitsfragen neu beantworten.
 Display_Shortcuts=W\u00e4hlen Sie zum Fortfahren einen der folgenden Links aus.
 Display_ShowPasswordGuide=Passwortleitfaden
 Display_StrengthMeter=Passwortst\u00e4rke
@@ -137,15 +171,22 @@ Display_UpdateProfileConfirm=\u00dcberpr\u00fcfen Sie die von Ihnen eingegebenen
 Display_UserEventHistory=Diese Seite zeigt den Passwortereignisverlauf. Es werden nur Aktionen angezeigt, die mit dieser Anwendung ausgef\u00fchrt wurden. Alle Uhrzeiten werden f\u00fcr die Zeitzone %1% angegeben.
 Display_TypingWait=Warten auf Abschluss der Eingabe ...
 Field_AccountEnabled=Konto aktiviert
+Field_AccountExpired=Konto abgelaufen
+Field_AccountExpirationTime=Kontoablaufzeit
 Field_Code=Code
 Field_OneTimePassword=Einmalpasswort
 Field_Confirm_Prefix=Best\u00e4tigen
 Field_ConfirmPassword=Passwort best\u00e4tigen
 Field_CurrentPassword=Aktuelles Passwort
+Field_Display=Anzeige
+Field_ForwardURL=Weiterleitungs-URL
 Field_LastLoginTime=Uhrzeit der letzten Anmeldung
 Field_LastLoginTimeDelta=Zeitdifferenz der letzten Anmeldung
 Field_LdapProfile=LDAP-Profil
 Field_Location=Standort
+Field_LogoutURL=URL f\u00fcr die Abmeldung
+Field_NetworkAddress=Netzwerkadresse
+Field_NetworkHost=Netzwerkhost
 Field_NewPassword=Neues Passwort
 Field_Option_Select=W\u00e4hlen Sie eine Frage aus.
 Field_Password=Aktuelles Passwort
@@ -157,6 +198,8 @@ Field_PasswordSetTime=Zeit der Passwortfestlegung
 Field_PasswordSetTimeDelta=Zeitdifferenz der Passwortfestlegung
 Field_PasswordViolatesPolicy=Verletzt Passwortrichtlinie
 Field_PasswordWithinWarningPeriod=Innerhalb des Warnzeitraums
+Field_Policy=Richtlinie
+Field_Profile=Profil
 Field_ResponsesNeeded=Antwortaktualisierungen sind erforderlich.
 Field_ResponsesStored=Antworten gespeichert
 Field_ResponsesTimestamp=Zeitstempel der gespeicherten Antworten
@@ -164,10 +207,21 @@ Field_User_Supplied_Question=Frage
 Field_UserDN=Benutzer-DN
 Field_UserGUID=Benutzer-GUID
 Field_Username=Benutzername
+Field_UserEmail=Email
+Field_UserSMS=SMS
 Field_OTP_Identifier=ID
 Field_OTP_Secret=Geheimnis
 Field_OTP_Type=Typ
 Field_OTP_RecoveryCodes=Wiederherstellungscodes
+Field_OTP_Stored=OTP gespeichert
+Field_OTP_Timestamp=Uhrzeit OTP-Speicherung
+Field_VerificationMethodPreviousAuth=Vorige Authentifizierung
+Field_VerificationMethodToken=SMS-/Email-\u00dcberpr\u00fcfung
+Field_VerificationMethodOTP=Best\u00e4tigung mit mobilem Ger\u00e4t
+Field_VerificationMethodChallengeResponses=Geheime Fragen und Antworten
+Field_VerificationMethodAttributes=Pers\u00f6nliche Daten
+Field_VerificationMethodRemoteResponses=Externe Antworten
+Field_VerificationMethodNAAF=Erweiterte Authentifizierung
 Long_Title_ActivateUser=Vorkonfiguriertes Konto aktivieren und ein neues Passwort erstellen.
 Long_Title_Admin=Verwaltungsfunktionen
 Long_Title_ChangePassword=\u00c4ndern Sie Ihr aktuelles Passwort.
@@ -180,21 +234,23 @@ Long_Title_Logout=Melden Sie sich von der Passwortselbstbedienungsanwendung ab.
 Long_Title_Main_Menu=Hauptmen\u00fc der Passwortselbstbedienung. Hier k\u00f6nnen Sie Ihr aktuelles Passwort \u00e4ndern, ein vergessenes Passwort zur\u00fccksetzen und andere Aktionen in Bezug auf Passw\u00f6rter ausf\u00fchren.
 Long_Title_NewUser=Erstellen Sie ein neues Benutzerkonto.
 Long_Title_PeopleSearch=Suchen Sie Kontaktinformationen f\u00fcr Ihre Kollegen.
-Long_Title_SetupResponses=Richten Sie die Antworten f\u00fcr vergessene Passw\u00f6rter ein. Anhand dieser Geheimnisfragen k\u00f6nnen Sie Ihr Passwort zur\u00fccksetzen, falls Sie es vergessen.
-Long_Title_SetupOtpSecret=Einmalpasswort-Softtoken einrichten
+Long_Title_SetupResponses=Richten Sie die Sicherheitsfragen und entsprechenden Antworten f\u00fcr vergessene Passw\u00f6rter ein. Anhand dieser Geheimnisantworten k\u00f6nnen Sie Ihr Passwort zur\u00fccksetzen, falls Sie es vergessen.
+Long_Title_SetupOtpSecret=Richten Sie Ihr mobiles Ger\u00e4t ein. Wenn Sie Ihr Passwort vergessen, k\u00f6nnen Sie sich mit dem mobilen Ger\u00e4t bei dieser Website authentifizieren.
 Long_Title_Shortcuts=Personalisierte Tastenkombinationen.
 Long_Title_UpdateProfile=Aktualisieren Sie die Benutzerprofildaten.
 Long_Title_UserEventHistory=Passwortereignisverlauf. Zeigen Sie an, wann Sie Ihr Passwort in der Vergangenheit ge\u00e4ndert haben.
 Long_Title_UserInformation=Informationen \u00fcber Ihr Passwort und Passwortrichtlinien.
+Title_AnsweredQuestions=Beantwortete Fragen
 Title_ActivateUser=Konto aktivieren
 Title_Admin=Verwaltung
+Title_Application=NetIQ Self Service Password Reset
 Title_Captcha=\u00dcberpr\u00fcfung
 Title_ChangePassword=Passwort \u00e4ndern
-Title_ConfirmResponses=Passwortantworten best\u00e4tigen
+Title_ConfirmResponses=Sicherheitsfragen best\u00e4tigen
 Title_Error=Fehler
 Title_ForgottenPassword=Passwort vergessen
 Title_ForgottenUsername=Benutzername vergessen
-Title_GuestRegistration=Gastbenutzer registrieren
+Title_GuestRegistration=Gastregistrierung
 Title_GuestUpdate=Gastbenutzer aktualisieren
 Title_Helpdesk=Helpdesk
 Title_LocaleSelect=Auswahl des Gebietsschemas
@@ -202,6 +258,7 @@ Title_Login=Melden Sie sich an.
 Title_Logout=Abmelden
 Title_MainPage=Hauptmen\u00fc
 Title_NewUser=Registrierung eines neuen Benutzers
+Title_OrgChart=Organigramm
 Title_PasswordGuide=Passwortleitfaden
 Title_PasswordPolicy=Passwortrichtlinie
 Title_PasswordStrength=Passwortst\u00e4rke
@@ -215,16 +272,20 @@ Title_RecoverRequiredResponses=Erforderliche Fragen
 Title_SecurityResponses=Sicherheitsantworten
 Title_SetupRandomResponses=Zufallsfragen
 Title_SetupRequiredResponses=Erforderliche Fragen
-Title_SetupResponses=Passwortantworten einrichten
-Title_SetupOtpSecret=OTP-Geheimnis einrichten
+Title_SetupResponses=Sicherheitsfragen einrichten
+Title_SetupOtpSecret=Mobile App-Authentifizierung einrichten
 Title_Shortcuts=Tastenkombinationen
+Title_Status=Status
 Title_Success=Erfolg
 Title_TitleBar=@User:ID@  Passwortselbstbedienung
 Title_UpdateProfile=Profil aktualisieren
 Title_UpdateProfileConfirm=Profildaten best\u00e4tigen
 Title_UserEventHistory=Passwortverlauf
-Title_UserInformation=Kontoinformationen
+Title_UserInformation=Mein Konto
 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>
+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
 Value_True=Wahr
 Value_NotApplicable=nicht zutreffend
+Value_Default=Standard

+ 81 - 20
pwm/servlet/src/password/pwm/i18n/Display_es.properties

@@ -26,13 +26,16 @@ Button_Cancel=Cancelar
 Button_ChangePassword=Cambiar contrase\u00f1a
 Button_ChangeResponses=Volver
 Button_CheckCode=Comprobar c\u00f3digo
+Button_ClearOtpReEnroll=Volver a inscribir dispositivo m\u00f3vil
 Button_HelpdeskClearOtpSecret=Eliminar secreto de contrase\u00f1a para una vez
 Button_ClearResponses=Borrar respuestas
 Button_CloseWindow=Cerrar ventana
 Button_Confirm=Confirmar
-Button_ConfirmResponses=Confirmar respuestas
+Button_ConfirmResponses=Confirmar respuestas de seguridad
 Button_Continue=Continuar
 Button_Create=Crear
+Button_Delete=Suprimir
+Button_Email=Correo electr\u00f3nico
 Button_GoBack=Volver
 Button_Hide=Ocultar
 Button_Hide_Responses=Ocultar respuestas
@@ -40,12 +43,15 @@ Button_Home=Inicio
 Button_Login=Entrada
 Button_Logout=Salir
 Button_More=M\u00e1s
+Button_OrgChart=Organigrama corporativo
 Button_RecoverPassword=Comprobar respuestas
 Button_Reset=Borrar
 Button_Search=Buscar
 Button_SetResponses=Guardar respuestas
 Button_Show=Mostrar
 Button_Show_Responses=Mostrar respuestas
+Button_Skip=Omitir
+Button_SMS=SMS
 Button_Unlock=Desbloquear
 Button_UnlockPassword=Desbloquear contrase\u00f1a
 Button_Update=Actualizar
@@ -54,8 +60,8 @@ Button_OK=Aceptar
 Display_ActivateUser=Para confirmar su identidad, introduzca la siguiente informaci\u00f3n. Su informaci\u00f3n se utilizar\u00e1 para localizar y activar su cuenta de usuario.<p/>Aseg\u00farese de completar el proceso o no se activar\u00e1 correctamente su cuenta.
 Display_AutoGeneratedPassword=Generar autom\u00e1ticamente nueva contrase\u00f1a
 Display_CapsLockIsOn=El bloqueo de may\u00fasculas est\u00e1 activado
-Display_Captcha=Introduzca el c\u00f3digo de verificaci\u00f3n de abajo. Al escribir este c\u00f3digo ayuda a proteger su cuenta contra cualquier abuso.
-Display_CaptchaInputWords=Introduzca las dos palabras que se muestran arriba
+Display_Captcha=Realice el proceso de verificaci\u00f3n. Este proceso ayuda a proteger su cuenta contra cualquier abuso.
+Display_CaptchaInputWords=Introduzca el texto que se muestra arriba
 Display_CaptchaInputNumbers=Introduzca los n\u00fameros que oiga
 Display_CaptchaGetAudio=Obtener un c\u00f3digo CAPTCHA de audio
 Display_CaptchaGetImage=Obtener un c\u00f3digo CAPTCHA de imagen
@@ -67,7 +73,7 @@ Display_CheckingData=Comprobando datos...
 Display_CheckingPassword=Comprobando contrase\u00f1a...
 Display_CheckingResponses=Comprobando respuestas...
 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. En el caso de que olvide la contrase\u00f1a, deber\u00e1 introducir las respuestas exactas a las preguntas de abajo.
+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
 Display_Days=d\u00edas
 Display_ErrorBody=Se ha producido un error. Cierre el navegador e int\u00e9ntelo de nuevo. Si este error se produce de forma reiterada, p\u00f3ngase en contacto con el servicio de ayuda t\u00e9cnica.
@@ -83,27 +89,43 @@ Display_Hours=horas
 Display_IdleTimeout=Tiempo l\u00edmite de inactividad:
 Display_IdleWarningMessage=La sesi\u00f3n del navegador est\u00e1 a punto de caducar. Haga clic en cualquier parte de esta p\u00e1gina para continuar.
 Display_IdleWarningTitle=Tiempo l\u00edmite de inactividad
+Display_JavascriptRequired=Se requiere Javascript para poder ver esta p\u00e1gina.
 Display_LeaveDirtyPasswordPage=Si abandona esta p\u00e1gina, no se cambiar\u00e1 la contrase\u00f1a.
 Display_Login=
 Display_LoginPasswordOnly=Introduzca la contrase\u00f1a de abajo. Se requiere la contrase\u00f1a actual para acceder a esta aplicaci\u00f3n.
 Display_Logout=<b>Ha salido de la sesi\u00f3n.</b><p/>Cierre todas las ventanas del navegador de Internet antes de intentar entrar de nuevo.
 Display_Minute=minuto
 Display_Minutes=minutos
+Display_NAAF_PASSWORD=Por favor, indique su contrase\u00f1a de autenticaci\u00f3n de NAAF.
+Display_NAAF_LDAP_PASSWORD=Por favor, indique su contrase\u00f1a de autenticaci\u00f3n de LDAP.
+Display_NAAF_SECURITY_QUESTIONS=Por favor, responda a las preguntas de seguridad.
+Display_NAAF_EMAIL_OTP=Se ha enviado un correo electr\u00f3nico con su contrase\u00f1a para una vez.
+Display_NAAF_SMS_OTP=Se ha enviado un SMS con su contrase\u00f1a para una vez.
+Display_NAAF_SMARTPHONE=Se ha iniciado el proceso de verificaci\u00f3n mediante tel\u00e9fono inteligente. Contin\u00fae cuando haya terminado.
+Display_NAAF_RADIUS=Por favor, indique su contrase\u00f1a de autenticaci\u00f3n de RADIUS.
+Display_NAAF_TOTP=Introduzca su valor de TOTP.
+Display_NAAF_HOTP=Introduzca su valor de HOTP.
+Display_NAAF_VOICE=Se ha iniciado el proceso de verificaci\u00f3n mediante voz. Contin\u00fae cuando haya terminado.
 Display_NewUser=Para registrar una nueva cuenta, complete el siguiente formulario.
+Display_NewUserProfile=Para registrar una cuenta nueva, seleccione un perfil.
 Display_PasswordExpired=Su contrase\u00f1a ha caducado. Debe establecer una nueva contrase\u00f1a ahora.
 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=Nivel: <b>Fuerte</b>
-Display_PasswordStrengthLow=Nivel: <b>D\u00e9bil
+Display_PasswordStrengthLow=Nivel: <b>D\u00e9bil</b>
 Display_PasswordStrengthMedium=Nivel: <b>Bueno</b>
 Display_PasswordReplicationStatus=Replicaci\u00f3n 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%.
 Display_PeopleSearch=Introduzca su consulta abajo. Puede buscar a una persona por su nombre, direcci\u00f3n de correo electr\u00f3nico o n\u00famero de tel\u00e9fono.
-Display_PleaseWait=Un momento, por favor...
+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.
+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).
 Display_RecoverChoiceReset=Establezca una nueva contrase\u00f1a. Si ha olvidado su contrase\u00f1a y desea establecer una nueva, haga clic aqu\u00ed. Su cuenta se desbloquear\u00e1 tambi\u00e9n al configurar una nueva contrase\u00f1a.
 Display_RecoverChoiceUnlock=Desbloquee su cuenta. Si recuerda su contrase\u00f1a, puede desbloquear su cuenta seleccionando esta opci\u00f3n. No se modificar\u00e1 su contrase\u00f1a.
 Display_RecoverEnterCode=Para verificar su identidad, se le ha enviado un c\u00f3digo de seguridad. Haga clic en el enlace del correo electr\u00f3nico o copie y pegue el c\u00f3digo de seguridad aqu\u00ed.
@@ -112,10 +134,10 @@ Display_RecoverPassword=Conteste las siguientes preguntas. Si contesta estas pre
 Display_RecoverPasswordChoices=Su cuenta ha sido bloqueada porque ha realizado demasiados intentos fallidos de entrada. Para continuar, desbloquee su cuenta o cambie la contrase\u00f1a.
 Display_RecoverRandomResponses=Debe contestar las siguientes preguntas para continuar.
 Display_RecoverRequiredResponses=El administrador requiere estas preguntas.
-Display_RecoverOTP=Para veriricar su identidad, introduzca la contrase\u00f1a para una vez generada.
-Display_RecoverOTPIdentified=Para verificar su identidad, pegue la contrase\u00f1a para una sola vez generada identificada por %1%.
+Display_RecoverOTP=Para verificar su identidad, utilice su dispositivo m\u00f3vil para generar un c\u00f3digo de seguridad.
+Display_RecoverOTPIdentified=Para verificar su identidad, utilice su dispositivo m\u00f3vil para generar un c\u00f3digo de seguridad.  La ID de inscripci\u00f3n de su dispositivo m\u00f3vil es <b>%1%</b>.
 Display_ResponsesPrompt=Introduzca sus respuestas de seguridad
-Display_SelectionIndicator=Seleccione un elemento de la lista
+Display_SelectionIndicator=Seleccione una pregunta de la lista
 Display_SearchCompleted=B\u00fasqueda finalizada.
 Display_SearchResultsExceeded=Los resultados de b\u00fasqueda superan el tama\u00f1o m\u00e1ximo de b\u00fasqueda.
 Display_SetRandomPasswordPrompt=\u00bfDesea establecer una nueva contrase\u00f1a aleatoria para este usuario?
@@ -125,10 +147,22 @@ 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>
 Display_SetupRandomResponses=
 Display_SetupRequiredResponses=
-Display_SetupResponses=<p>En el caso de que olvide la contrase\u00f1a, puede recuperarla contestando las preguntas que solo usted conoce.</p><p>Elija sus preguntas y respuestas que puedan servir para verificar su identidad en caso de que olvide la contrase\u00f1a. Dado que las respuestas a estas preguntas pueden utilizarse para acceder a su cuenta, aseg\u00farese de dar respuestas que no sean f\u00e1ciles de adivinar o descubrir por otras personas.</p>
-Display_SetupOtpSecret=<p><b>Configurar testigo de software de contrase\u00f1a para una sola vez</b></p><p>Explore el c\u00f3digo QR para configurar la aplicaci\u00f3n de testigo de software o introduzca el secreto y sus opciones manualmente.</p>
-Display_WarnExistingOtpSecret=Ya existe un secreto de contrase\u00f1a para una vez. Haga clic en Continuar para borrar el secreto existente y configurar uno nuevo.
-Display_PleaseVerifyOtp=Introduzca la contrase\u00f1a para una vez generada para verificar la configuraci\u00f3n.
+Display_SetupResponses=<p>En el caso de que olvide la contrase\u00f1a, puede acceder a su cuenta contestando las preguntas de seguridad.</p><p>Elija preguntas y respuestas que puedan servir para verificar su identidad en caso de que olvide la contrase\u00f1a. Dado que las respuestas a estas preguntas pueden utilizarse para acceder a su cuenta, aseg\u00farese de dar respuestas que no sean f\u00e1ciles de adivinar o descubrir por otras personas.</p>
+Display_SetupOtpSecret=Si olvida su contrase\u00f1a, podr\u00e1 acceder a su cuenta mediante su dispositivo m\u00f3vil. Siga las instrucciones a continuaci\u00f3n en funci\u00f3n de su tipo de dispositivo.
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>Instale la aplicaci\u00f3n Google Authenticator para Android.</b><ol><li>En su tel\u00e9fono, vaya a Google Play Store.</li><li>Busque <b>Google Authenticator</b>.<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Descargue la aplicaci\u00f3n de Google Play Store</a>)</li><li>Descargue e instale la aplicaci\u00f3n.</li></ol><b>A continuaci\u00f3n, abra y configure Google Authenticator.</b><ol><li>En Google Authenticator, toque el men\u00fa y seleccione la opci\u00f3n para "Configurar cuenta".</li><li>Seleccione la opci\u00f3n para "Escanear un c\u00f3digo de barras".</li><li>Use la c\u00e1mara del tel\u00e9fono para escanear este c\u00f3digo de barras.</li><li>Cuando lo haya hecho, haga clic en el bot\u00f3n para continuar.</li></ol>
+Display_SetupOtp_iPhone_Title=iPhone
+Display_SetupOtp_iPhone_Steps=<b>En su iPhone, toque el icono de App Store.</b><ol><li>En el tel\u00e9fono, vaya a App Store.</li><li>Busque <b>Google Authenticator</b>.<br/>(<a target="itunesstore" href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">Descargue la aplicaci\u00f3n de App Store</a>)</li><li>Toque en la aplicaci\u00f3n y despu\u00e9s toque para descargarla e instalarla.</li></ol><b>A continuaci\u00f3n, abra y configure Google Authenticator.</b><ol><li>En Google Authenticator, toque "+" y luego en la opci\u00f3n para "Escanear c\u00f3digo de barras".</li><li>Use el tel\u00e9fono de la c\u00e1mara para escanear el c\u00f3digo de barras.</li><li>Cuando lo haya hecho, haga clic en el bot\u00f3n para continuar.</li></ol>
+Display_SetupOtp_Other_Title=Otro
+Display_SetupOtp_Other_Steps=<b>Busque una aplicaci\u00f3n compatible de dos factores.</b><ul><li>Pruebe a buscar en la tienda de aplicaciones de su dispositivo la aplicaci\u00f3n <b>Google Authenticator</b>.<br/>Muchos dispositivos tienen aplicaciones compatibles.</li><li>Trate de buscar una que sea compatible con "<b>testigos de seguridad TOTP"</b> o "RFC6238"</li><li>Descargue e instale la aplicaci\u00f3n.</li></ul>A continuaci\u00f3n, abra y configure la aplicaci\u00f3n.</b><ol><li>Introduzca los datos a continuaci\u00f3n o escanee el c\u00f3digo de barras cuando se lo indique la aplicaci\u00f3n.</li><li>Una vez que haya configurado la aplicaci\u00f3n, haga clic en el bot\u00f3n para continuar.</li></ol><b>
+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_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_WarnExistingResponse=Ya ha configurado su pregunta desaf\u00edo y sus 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.
+Display_OtpClearWarning=\u00bfSeguro que desea continuar? Si contin\u00faa, se borrar\u00e1 su inscripci\u00f3n actual y deber\u00e1 volver a configurar su dispositivo.
+Display_ResponsesClearWarning=\u00bfSeguro que desea continuar? Si contin\u00faa, se borrar\u00e1n sus preguntas actuales y deber\u00e1 volver a contestar sus preguntas de seguridad.
 Display_Shortcuts=Seleccione cualquiera de los siguientes enlaces para continuar.
 Display_ShowPasswordGuide=Gu\u00eda de contrase\u00f1as
 Display_StrengthMeter=Nivel de contrase\u00f1a
@@ -137,15 +171,22 @@ Display_UpdateProfileConfirm=Revise la siguiente informaci\u00f3n que ha introdu
 Display_UserEventHistory=Esta p\u00e1gina muestra el historial de eventos de la contrase\u00f1a. Aqu\u00ed se muestran solamente las acciones realizadas con esta aplicaci\u00f3n. Todas las horas se muestran en la zona horaria %1%.
 Display_TypingWait=Esperando a que se terminen de introducir los datos...
 Field_AccountEnabled=Cuenta habilitada
+Field_AccountExpired=Cuenta caducada
+Field_AccountExpirationTime=Tiempo de caducidad de la cuenta
 Field_Code=C\u00f3digo
 Field_OneTimePassword=Contrase\u00f1a para una sola vez
 Field_Confirm_Prefix=Confirmar
 Field_ConfirmPassword=Confirmar contrase\u00f1a
 Field_CurrentPassword=Contrase\u00f1a actual
+Field_Display=Mostrar
+Field_ForwardURL=URL de reenv\u00edo
 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_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 actual
@@ -157,6 +198,8 @@ Field_PasswordSetTime=Tiempo 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
+Field_Policy=Directiva
+Field_Profile=Perfil
 Field_ResponsesNeeded=Se necesita actualizar las respuestas
 Field_ResponsesStored=Respuestas almacenadas
 Field_ResponsesTimestamp=Marca horaria de respuestas almacenadas
@@ -164,10 +207,21 @@ Field_User_Supplied_Question=Pregunta
 Field_UserDN=DN de usuario
 Field_UserGUID=GUID de usuario
 Field_Username=Nombre de usuario
+Field_UserEmail=Correo electr\u00f3nico
+Field_UserSMS=SMS
 Field_OTP_Identifier=Identificador
 Field_OTP_Secret=Secreto
 Field_OTP_Type=Tipo
 Field_OTP_RecoveryCodes=C\u00f3digos de recuperaci\u00f3n
+Field_OTP_Stored=OTP almacenada
+Field_OTP_Timestamp=Tiempo 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
+Field_VerificationMethodChallengeResponses=Preguntas y respuestas secretas
+Field_VerificationMethodAttributes=Datos personales
+Field_VerificationMethodRemoteResponses=Respuestas externas
+Field_VerificationMethodNAAF=Autenticaci\u00f3n avanzada
 Long_Title_ActivateUser=Active una cuenta preconfigurada y establezca una contrase\u00f1a nueva.
 Long_Title_Admin=Funciones administrativas
 Long_Title_ChangePassword=Cambie su contrase\u00f1a actual.
@@ -180,21 +234,23 @@ Long_Title_Logout=Salga de la aplicaci\u00f3n de autoservicio de contrase\u00f1a
 Long_Title_Main_Menu=Men\u00fa principal de autoservicio de contrase\u00f1a. Desde aqu\u00ed puede cambiar su contrase\u00f1a actual, restablecer una contrase\u00f1a olvidada o llevar a cabo actividades relacionadas con la contrase\u00f1a.
 Long_Title_NewUser=Cree una nueva cuenta de usuario.
 Long_Title_PeopleSearch=Busque informaci\u00f3n de contacto de sus colegas.
-Long_Title_SetupResponses=Configure las respuestas para la contrase\u00f1a olvidada. Estas preguntas secretas le permitir\u00e1n recuperar la contrase\u00f1a si la olvida.
-Long_Title_SetupOtpSecret=Configurar testigo de software de contrase\u00f1a para una sola vez
+Long_Title_SetupResponses=Configure las preguntas y respuestas de seguridad para la contrase\u00f1a olvidada. Estas respuestas a la pregunta secreta le permitir\u00e1n recuperar su contrase\u00f1a si la olvida.
+Long_Title_SetupOtpSecret=Configure su dispositivo de aplicaciones m\u00f3viles. Si olvida su contrase\u00f1a, puede usar su dispositivo m\u00f3vil para autenticarse en este sitio.
 Long_Title_Shortcuts=Accesos directos personalizados.
 Long_Title_UpdateProfile=Actualizar los datos del perfil de usuario.
 Long_Title_UserEventHistory=Historial de eventos de contrase\u00f1a. Consulte cu\u00e1ndo ha cambiado su contrase\u00f1a en el pasado.
 Long_Title_UserInformation=Informaci\u00f3n sobre su contrase\u00f1a y las directivas de contrase\u00f1a.
+Title_AnsweredQuestions=Preguntas contestadas
 Title_ActivateUser=Activar cuenta
 Title_Admin=Administraci\u00f3n
+Title_Application=NetIQ Self Service Password Reset
 Title_Captcha=Verificaci\u00f3n
 Title_ChangePassword=Cambiar contrase\u00f1a
-Title_ConfirmResponses=Confirmar respuestas de contrase\u00f1a
+Title_ConfirmResponses=Confirmar preguntas de seguridad
 Title_Error=Error
 Title_ForgottenPassword=Contrase\u00f1a olvidada
 Title_ForgottenUsername=Nombre de usuario olvidado
-Title_GuestRegistration=Registrar usuario guest
+Title_GuestRegistration=Registro de usuario invitado
 Title_GuestUpdate=Actualizar usuario guest
 Title_Helpdesk=Servicio de ayuda t\u00e9cnica
 Title_LocaleSelect=Selecci\u00f3n de configuraci\u00f3n regional
@@ -202,6 +258,7 @@ Title_Login=Entre a la sesi\u00f3n
 Title_Logout=Salir
 Title_MainPage=Men\u00fa principal
 Title_NewUser=Registro de usuario nuevo
+Title_OrgChart=Organigrama corporativo
 Title_PasswordGuide=Gu\u00eda de contrase\u00f1as
 Title_PasswordPolicy=Directiva de contrase\u00f1as
 Title_PasswordStrength=Nivel de contrase\u00f1a
@@ -215,16 +272,20 @@ Title_RecoverRequiredResponses=Preguntas obligatorias
 Title_SecurityResponses=Respuestas de seguridad
 Title_SetupRandomResponses=Preguntas aleatorias
 Title_SetupRequiredResponses=Preguntas obligatorias
-Title_SetupResponses=Configurar respuestas de contrase\u00f1a
-Title_SetupOtpSecret=Configurar secreto de contrase\u00f1a para una vez
+Title_SetupResponses=Configurar preguntas de seguridad
+Title_SetupOtpSecret=Configurar autenticaci\u00f3n de aplicaciones m\u00f3viles
 Title_Shortcuts=Accesos directos
+Title_Status=Estado
 Title_Success=Correcto
 Title_TitleBar=Autoservicio de contrase\u00f1a de @User:ID@
 Title_UpdateProfile=Actualizar perfil
 Title_UpdateProfileConfirm=Confirmar datos del perfil
 Title_UserEventHistory=Historial de contrase\u00f1a
-Title_UserInformation=Informaci\u00f3n de la cuenta
+Title_UserInformation=Mi cuenta
 Tooltip_PasswordStrength=El medidor de nivel de la contrase\u00f1a muestra lo f\u00e1cil que es adivinar su contrase\u00f1a. Pruebe lo siguiente para fortalecer su contrase\u00f1a:<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>
+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
 Value_True=Verdadero
 Value_NotApplicable=n/a
+Value_Default=Por defecto

+ 295 - 234
pwm/servlet/src/password/pwm/i18n/Display_fr.properties

@@ -1,234 +1,295 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2015 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Button_Activate=Activer
-Button_Agree=J'accepte
-Button_Cancel=Annuler
-Button_ChangePassword=\u00c9diter le mot de passe
-Button_ChangeResponses=Pr\u00e9c\u00e9dent
-Button_CheckCode=V\u00e9rifier le code
-Button_HelpdeskClearOtpSecret=Effacer le secret du mot de passe \u00e0 usage unique
-Button_ClearResponses=Effacer les r\u00e9ponses
-Button_CloseWindow=Fermer la fen\u00eatre
-Button_Confirm=Confirmer
-Button_ConfirmResponses=Confirmer les r\u00e9ponses
-Button_Continue=Continuer
-Button_Create=Cr\u00e9er
-Button_GoBack=Pr\u00e9c\u00e9dent
-Button_Hide=Masquer
-Button_Hide_Responses=Masquer les r\u00e9ponses
-Button_Home=Accueil
-Button_Login=Connexion
-Button_Logout=D\u00e9connexion
-Button_More=Suite
-Button_RecoverPassword=V\u00e9rifier les r\u00e9ponses
-Button_Reset=Effacer
-Button_Search=Rechercher
-Button_SetResponses=Enregistrer les r\u00e9ponses
-Button_Show=Afficher
-Button_Show_Responses=Afficher les r\u00e9ponses
-Button_Unlock=D\u00e9verrouiller
-Button_UnlockPassword=D\u00e9verrouiller le mot de passe
-Button_Update=Mettre \u00e0 jour
-Button_Verify=V\u00e9rifier
-Button_OK=OK
-Display_ActivateUser=Pour confirmer votre identit\u00e9, saisissez les informations suivantes. Elles serviront \u00e0 localiser votre compte utilisateur et \u00e0 l'activer.<p/>Veillez \u00e0 finaliser le processus pour que votre compte soit activ\u00e9 correctement.
-Display_AutoGeneratedPassword=G\u00e9n\u00e9rer automatiquement un nouveau mot de passe
-Display_CapsLockIsOn=La fonction VERR MAJ est activ\u00e9e
-Display_Captcha=Saisissez le code de v\u00e9rification ci-dessous. Ce code permettra de prot\u00e9ger votre compte de toute utilisation frauduleuse.
-Display_CaptchaInputWords=Saisissez les deux mots affich\u00e9s ci-dessus
-Display_CaptchaInputNumbers=Saisissez les chiffres que vous entendez
-Display_CaptchaGetAudio=Obtenir un code CAPTCHA sonore
-Display_CaptchaGetImage=Obtenir un code CAPTCHA sous forme d'image
-Display_CaptchaHelp=Aide
-Display_CaptchaRefresh=Rafra\u00eechir
-Display_ChangePassword=Veuillez \u00e9diter le mot de passe et s\u00e9curiser le nouveau mot de passe. Apr\u00e8s avoir saisi le nouveau mot de passe, cliquez sur le bouton \u00c9diter le mot de passe. Si vous devez le noter sur papier, veillez \u00e0 le conserver en lieu s\u00fbr. Votre nouveau mot de passe doit r\u00e9pondre aux exigences suivantes :
-Display_ChangePasswordForm=Saisissez les donn\u00e9es suivantes. Elles serviront \u00e0 la v\u00e9rification n\u00e9cessaire de votre identit\u00e9 pour que vous puissiez changer votre mot de passe.
-Display_CheckingData=V\u00e9rification des donn\u00e9es...
-Display_CheckingPassword=V\u00e9rification du mot de passe...
-Display_CheckingResponses=V\u00e9rification des r\u00e9ponses...
-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 leur orthographe et la ponctuation. Si vous oubliez votre mot de passe, vous devrez saisir les r\u00e9ponses exactes aux questions ci-dessous.
-Display_Day=jour
-Display_Days=jours
-Display_ErrorBody=Une erreur s'est produite. Fermez le navigateur et r\u00e9essayez. Si elle se reproduit, contactez le service d'assistance.
-Display_ExpirationDate=Date d'expiration du compte (%1% jours au maximum)
-Display_FooterInfoText=
-
-Display_ForgottenPassword=Si vous avez oubli\u00e9 votre mot de passe, suivez les invites pour r\u00e9initialiser le mot de passe.
-Display_ForgottenUsername=Saisissez les informations suivantes. Elles serviront \u00e0 rechercher votre nom d'utilisateur si vous l'oubliez.
-Display_GuestRegistration=Pour enregistrer un nouveau compte invit\u00e9, saisissez les informations suivantes.
-Display_GuestUpdate=Pour mettre \u00e0 jour un nouveau compte invit\u00e9, v\u00e9rifiez les informations suivantes et modifiez-les.
-Display_Helpdesk=Saisissez les donn\u00e9es de recherche de l'utilisateur.
-Display_Hour=heure
-Display_Hours=heures
-Display_IdleTimeout=Timeout d'inactivit\u00e9 :
-Display_IdleWarningMessage=Timeout imminent de la session du navigateur. Cliquez n'importe o\u00f9 dans cette page pour reprendre.
-Display_IdleWarningTitle=Timeout d'inactivit\u00e9
-Display_LeaveDirtyPasswordPage=Si vous quittez cette page, votre mot de passe ne sera pas \u00e9dit\u00e9.
-Display_Login=
-
-Display_LoginPasswordOnly=Saisissez votre mot de passe ci-dessous. Vous devez indiquer votre mot de passe actuel pour acc\u00e9der \u00e0 cette application.
-Display_Logout=<b>Vous \u00eates d\u00e9sormais d\u00e9connect\u00e9.</b><p/>Fermez toutes les fen\u00eatres du navigateur Internet avant d'essayer de vous reconnecter.
-Display_Minute=minute
-Display_Minutes=minutes
-Display_NewUser=Pour enregistrer un nouveau compte, compl\u00e9tez le formulaire suivant.
-Display_PasswordExpired=Votre mot de passe est arriv\u00e9 \u00e0 expiration. Vous devez en d\u00e9finir un autre maintenant.
-Display_PasswordGeneration=Les mots de passe suivants ont \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9s pour vous de mani\u00e8re al\u00e9atoire. Ils sont bas\u00e9s sur des mots r\u00e9els afin de faciliter leur m\u00e9morisation, mais ont \u00e9t\u00e9 modifi\u00e9s pour les rendre compliqu\u00e9s \u00e0 deviner.
-Display_PasswordNoExpire=Votre mot de passe n'a pas de date d'expiration.
-Display_PasswordPrompt=Saisissez votre nouveau mot de passe
-Display_PasswordStrengthHigh=Force : <b>Fort</b>
-Display_PasswordStrengthLow=Force : <b>Faible</b>
-Display_PasswordStrengthMedium=Force : <b>Correct</b>
-Display_PasswordReplicationStatus=R\u00e9plication de mot de passe (progression %1%)
-Display_PasswordWarn=<b>Votre mot de passe va prochainement arriver \u00e0 expiration</b>. \u00c9ditez votre mot de passe rapidement afin d'\u00e9viter tout probl\u00e8me d'acc\u00e8s \u00e0 ce service.  <br/><br/>Votre mot de passe va arriver \u00e0 expiration le %1%.
-Display_PeopleSearch=Saisissez votre recherche ci-dessous. Vous pouvez rechercher une personne par son nom, son adresse \u00e9lectronique ou son num\u00e9ro de t\u00e9l\u00e9phone.
-Display_PleaseWait=Veuillez patienter...
-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_RecoverChoiceReset=D\u00e9finissez un nouveau mot de passe. Si vous avez oubli\u00e9 votre mot de passe et souhaitez en d\u00e9finir un autre, cliquez ici. Votre compte sera \u00e9galement \u00eatre d\u00e9verrouill\u00e9 lorsque vous d\u00e9finirez un nouveau mot de passe.
-Display_RecoverChoiceUnlock=D\u00e9verrouillez votre compte. Si vous vous souvenez de votre mot de passe, vous pouvez d\u00e9verrouiller votre compte en s\u00e9lectionnant cette option. Votre mot de passe ne sera pas \u00e9dit\u00e9.
-Display_RecoverEnterCode=Pour que vous puissiez confirmer votre identit\u00e9, un code de s\u00e9curit\u00e9 vous a \u00e9t\u00e9 envoy\u00e9. Cliquez sur le lien figurant dans le message \u00e9lectronique ou copiez le code de s\u00e9curit\u00e9 et collez-le ici.
-Display_RecoverEnterCodeSMS=Pour que vous puissiez confirmer votre identit\u00e9, un code de s\u00e9curit\u00e9 vous a \u00e9t\u00e9 envoy\u00e9 par SMS. Saisissez ici le code de s\u00e9curit\u00e9 figurant dans ce message.
-Display_RecoverPassword=Veuillez r\u00e9pondre aux questions suivantes. Si vous y r\u00e9pondez correctement, vous pourrez r\u00e9initialiser votre mot de passe.
-Display_RecoverPasswordChoices=Votre compte a \u00e9t\u00e9 verrouill\u00e9 en raison d'un nombre excessif de tentatives de connexion incorrectes. Vous pouvez continuer en d\u00e9verrouillant votre compte ou en \u00e9ditant votre mot de passe.
-Display_RecoverRandomResponses=Vous devez r\u00e9pondre aux questions suivantes pour continuer.
-Display_RecoverRequiredResponses=Ces questions sont exig\u00e9es par votre administrateur.
-Display_RecoverOTP=Afin de confirmer votre identit\u00e9, saisissez le mot de passe \u00e0 usage unique g\u00e9n\u00e9r\u00e9.
-Display_RecoverOTPIdentified=Afin de confirmer votre identit\u00e9, saisissez le mot de passe \u00e0 usage unique g\u00e9n\u00e9r\u00e9 et identifi\u00e9 par %1%.
-Display_ResponsesPrompt=Saisissez vos r\u00e9ponses de s\u00e9curit\u00e9
-Display_SelectionIndicator=S\u00e9lectionnez un \u00e9l\u00e9ment de la liste
-Display_SearchCompleted=Recherche termin\u00e9e.
-Display_SearchResultsExceeded=Les r\u00e9sultats de la recherche d\u00e9passent la taille maximale de la recherche.
-Display_SetRandomPasswordPrompt=D\u00e9finir un nouveau mot de passe al\u00e9atoire pour cet utilisateur ?
-Display_SearchResultsNone=Aucun r\u00e9sultat.
-Display_Second=seconde
-Display_Seconds=secondes
-Display_SetupHelpdeskResponses=<p>L'administrateur exige que vous indiquiez les r\u00e9ponses suivantes. Elles permettront de v\u00e9rifier votre identit\u00e9 si vous devez vous adresser au service d'assistance pour obtenir de l'aide.</p>
-Display_SetupRandomResponses=
-
-Display_SetupRequiredResponses=
-
-Display_SetupResponses=<p>Si vous oubliez votre mot de passe, vous pourrez le r\u00e9cup\u00e9rer en r\u00e9pondant aux questions dont vous \u00eates le seul \u00e0 conna\u00eetre les r\u00e9ponses.</p><p>Choisissez les questions et r\u00e9ponses qui serviront \u00e0 v\u00e9rifier votre identit\u00e9 si vous oubliez votre mot de passe. \u00c9tant donn\u00e9 que les r\u00e9ponses \u00e0 ces questions peuvent \u00eatre utilis\u00e9es pour acc\u00e9der \u00e0 votre compte, veillez \u00e0 fournir des r\u00e9ponses difficiles \u00e0 deviner ou \u00e0 d\u00e9couvrir par les autres personnes.</p>
-Display_SetupOtpSecret=<p><b>Configuration d'un jeton logiciel de mot de passe \u00e0 usage unique</b></p><p>Num\u00e9risez le code QR pour configurer votre demande de jeton logiciel ou saisissez le secret et les options manuellement.</p>
-Display_WarnExistingOtpSecret=Un secret de mot de passe \u00e0 usage unique existe d\u00e9j\u00e0. Cliquez sur Continuer pour effacer le secret existant et en configurer un nouveau.
-Display_PleaseVerifyOtp=Saisissez le mot de passe \u00e0 usage unique g\u00e9n\u00e9r\u00e9 pour v\u00e9rifier la configuration.
-Display_Shortcuts=S\u00e9lectionnez l'un des liens suivants pour continuer.
-Display_ShowPasswordGuide=Guide des mots de passe
-Display_StrengthMeter=Force du mot de passe
-Display_UpdateProfile=Mettez \u00e0 jour les informations suivantes :
-Display_UpdateProfileConfirm=V\u00e9rifiez les informations suivantes que vous avez saisies et confirmez-les.
-Display_UserEventHistory=Cette page affiche l'historique des \u00e9v\u00e9nements concernant le mot de passe. Seules les op\u00e9rations r\u00e9alis\u00e9es avec cette application sont mentionn\u00e9es ici. Toutes les heures indiqu\u00e9es ici sont exprim\u00e9es dans le fuseau horaire %1%.
-Display_TypingWait=Attente de la fin de la saisie....
-Field_AccountEnabled=Compte activ\u00e9
-Field_Code=Code
-Field_OneTimePassword=Mot de passe \u00e0 usage unique
-Field_Confirm_Prefix=Confirmer
-Field_ConfirmPassword=Confirmer le mot de passe
-Field_CurrentPassword=Mot de passe actuel
-Field_LastLoginTime=Heure de la derni\u00e8re connexion
-Field_LastLoginTimeDelta=Diff\u00e9rence d'heure de la derni\u00e8re connexion
-Field_LdapProfile=Profil LDAP
-Field_Location=Emplacement
-Field_NewPassword=Nouveau mot de passe
-Field_Option_Select=S\u00e9lectionnez une question
-Field_Password=Mot de passe actuel
-Field_PasswordExpirationTime=Date d'expiration du mot de passe
-Field_PasswordExpired=Mot de passe arriv\u00e9 \u00e0 expiration
-Field_PasswordLocked=Mot de passe verrouill\u00e9 (d\u00e9tection d'intrus)
-Field_PasswordPreExpired=Mot de passe arriv\u00e9 \u00e0 pr\u00e9expiration
-Field_PasswordSetTime=Heure de d\u00e9finition du mot de passe
-Field_PasswordSetTimeDelta=Diff\u00e9rence d'heure de d\u00e9finition du mot de passe
-Field_PasswordViolatesPolicy=Violation de la strat\u00e9gie de mot de passe
-Field_PasswordWithinWarningPeriod=Dans la p\u00e9riode d'avertissement
-Field_ResponsesNeeded=Des mises \u00e0 jour des r\u00e9ponses sont n\u00e9cessaires
-Field_ResponsesStored=R\u00e9ponses stock\u00e9es
-Field_ResponsesTimestamp=Tampon horaire des r\u00e9ponses stock\u00e9es
-Field_User_Supplied_Question=Question
-Field_UserDN=DN utilisateur
-Field_UserGUID=GUID utilisateur
-Field_Username=Nom d'utilisateur
-Field_OTP_Identifier=Identificateur
-Field_OTP_Secret=Secret
-Field_OTP_Type=Type
-Field_OTP_RecoveryCodes=Codes de r\u00e9cup\u00e9ration
-Long_Title_ActivateUser=Activez un compte pr\u00e9configur\u00e9 et \u00e9tablissez un nouveau mot de passe.
-Long_Title_Admin=Fonctions administratives
-Long_Title_ChangePassword=\u00c9ditez votre mot de passe actuel.
-Long_Title_ForgottenPassword=R\u00e9cup\u00e9rez l'acc\u00e8s \u00e0 votre compte si vous avez oubli\u00e9 votre mot de passe.
-Long_Title_ForgottenUsername=Recherchez votre nom d'utilisateur que vous avez oubli\u00e9.
-Long_Title_GuestRegistration=Enregistrez un nouveau compte utilisateur invit\u00e9.
-Long_Title_GuestUpdate=Mettez \u00e0 jour un nouveau compte utilisateur invit\u00e9.
-Long_Title_Helpdesk=Outils du service d'assistance
-Long_Title_Logout=D\u00e9connexion de l'application Self Service Password Reset.
-Long_Title_Main_Menu=Menu principal en self-service de mot de passe. Depuis ce menu, vous pouvez changer votre mot de passe actuel, r\u00e9initialiser un mot de passe oubli\u00e9 ou effectuer d'autres op\u00e9rations relatives aux mots de passe.
-Long_Title_NewUser=Cr\u00e9ez un compte utilisateur.
-Long_Title_PeopleSearch=Recherchez les informations de contact de vos coll\u00e8gues.
-Long_Title_SetupResponses=Configurez vos r\u00e9ponses en cas de mot de passe oubli\u00e9. Ces questions secr\u00e8tes vous permettront de r\u00e9cup\u00e9rer votre mot de passe si vous l'avez oubli\u00e9.
-Long_Title_SetupOtpSecret=Configuration du jeton logiciel de mot de passe \u00e0 usage unique
-Long_Title_Shortcuts=Raccourcis personnalis\u00e9s.
-Long_Title_UpdateProfile=Mettez \u00e0 jour les donn\u00e9es de votre profil utilisateur.
-Long_Title_UserEventHistory=Historique des \u00e9v\u00e9nements concernant les mots de passe. Consultez la date \u00e0 laquelle vous avez chang\u00e9 votre mot de passe.
-Long_Title_UserInformation=Informations sur votre mot de passe et sur les strat\u00e9gies de mot de passe.
-Title_ActivateUser=Activer le compte
-Title_Admin=Administration
-Title_Captcha=V\u00e9rification
-Title_ChangePassword=\u00c9diter le mot de passe
-Title_ConfirmResponses=Confirmer les r\u00e9ponses concernant le mot de passe
-Title_Error=Erreur
-Title_ForgottenPassword=Mot de passe oubli\u00e9
-Title_ForgottenUsername=Nom d'utilisateur oubli\u00e9
-Title_GuestRegistration=Enregistrer l'utilisateur invit\u00e9
-Title_GuestUpdate=Mettre \u00e0 jour l'utilisateur invit\u00e9
-Title_Helpdesk=Service d'assistance
-Title_LocaleSelect=S\u00e9lection du param\u00e8tre local
-Title_Login=Veuillez vous connecter
-Title_Logout=D\u00e9connexion
-Title_MainPage=Menu principal
-Title_NewUser=Enregistrement de nouvel utilisateur
-Title_PasswordGuide=Guide des mots de passe
-Title_PasswordPolicy=Strat\u00e9gie de mot de passe
-Title_PasswordStrength=Force du mot de passe
-Title_PasswordWarning=Avertissement concernant le mot de passe
-Title_PeopleSearch=Recherche de personnes
-Title_PleaseWait=Veuillez patienter
-Title_RandomPasswords=Mots de passe al\u00e9atoires
-Title_RecoverPassword=Mot de passe oubli\u00e9
-Title_RecoverRandomResponses=Questions al\u00e9atoires
-Title_RecoverRequiredResponses=Questions obligatoires
-Title_SecurityResponses=R\u00e9ponses de s\u00e9curit\u00e9
-Title_SetupRandomResponses=Questions al\u00e9atoires
-Title_SetupRequiredResponses=Questions obligatoires
-Title_SetupResponses=Configurer les r\u00e9ponses concernant le mot de passe
-Title_SetupOtpSecret=Configurer le secret du mot de passe \u00e0 usage unique
-Title_Shortcuts=Raccourcis
-Title_Success=R\u00e9ussite
-Title_TitleBar=Self-service de mot de passe @User:ID@
-Title_UpdateProfile=Mettre \u00e0 jour le profil
-Title_UpdateProfileConfirm=Confirmer les donn\u00e9es du profil
-Title_UserEventHistory=Historique des mots de passe
-Title_UserInformation=Informations sur le compte
-Tooltip_PasswordStrength=La mesure de la force des mots 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 d'autres chiffres.</li><li>Ajoutez d'autres symboles.</li></ul>
-Value_False=Faux
-Value_True=Vrai
-Value_NotApplicable=s/o
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Button_Activate=Activer
+Button_Agree=J'accepte
+Button_Cancel=Annuler
+Button_ChangePassword=\u00c9diter le mot de passe
+Button_ChangeResponses=Pr\u00e9c\u00e9dent
+Button_CheckCode=V\u00e9rifier le code
+Button_ClearOtpReEnroll=R\u00e9inscrire votre p\u00e9riph\u00e9rique mobile
+Button_HelpdeskClearOtpSecret=Effacer le secret du mot de passe \u00e0 usage unique
+Button_ClearResponses=Effacer les r\u00e9ponses
+Button_CloseWindow=Fermer la fen\u00eatre
+Button_Confirm=Confirmer
+Button_ConfirmResponses=Confirmer les r\u00e9ponses de s\u00e9curit\u00e9
+Button_Continue=Continuer
+Button_Create=Cr\u00e9er
+Button_Delete=Supprimer
+Button_Email=Courrier \u00e9lectronique
+Button_GoBack=Pr\u00e9c\u00e9dent
+Button_Hide=Masquer
+Button_Hide_Responses=Masquer les r\u00e9ponses
+Button_Home=Accueil
+Button_Login=Connexion
+Button_Logout=D\u00e9connexion
+Button_More=Suite
+Button_OrgChart=Organigramme
+Button_RecoverPassword=V\u00e9rifier les r\u00e9ponses
+Button_Reset=Effacer
+Button_Search=Rechercher
+Button_SetResponses=Enregistrer les r\u00e9ponses
+Button_Show=Afficher
+Button_Show_Responses=Afficher les r\u00e9ponses
+Button_Skip=Ignorer
+Button_SMS=SMS
+Button_Unlock=D\u00e9verrouiller
+Button_UnlockPassword=D\u00e9verrouiller le mot de passe
+Button_Update=Mettre \u00e0 jour
+Button_Verify=V\u00e9rifier
+Button_OK=OK
+Display_ActivateUser=Pour confirmer votre identit\u00e9, saisissez les informations suivantes. Elles serviront \u00e0 localiser votre compte utilisateur et \u00e0 l'activer.<p/>Veillez \u00e0 finaliser le processus pour que votre compte soit activ\u00e9 correctement.
+Display_AutoGeneratedPassword=G\u00e9n\u00e9rer automatiquement un nouveau mot de passe
+Display_CapsLockIsOn=La fonction VERR MAJ est activ\u00e9e
+Display_Captcha=Proc\u00e9dez \u00e0 la v\u00e9rification. Elle vous permet de prot\u00e9ger votre compte contre des utilisations abusives.
+Display_CaptchaInputWords=Entrez le texte affich\u00e9 ci-dessus.
+Display_CaptchaInputNumbers=Saisissez les chiffres que vous entendez
+Display_CaptchaGetAudio=Obtenir un code CAPTCHA sonore
+Display_CaptchaGetImage=Obtenir un code CAPTCHA sous forme d'image
+Display_CaptchaHelp=Aide
+Display_CaptchaRefresh=Rafra\u00eechir
+Display_ChangePassword=Veuillez \u00e9diter le mot de passe et s\u00e9curiser le nouveau mot de passe. Apr\u00e8s avoir saisi le nouveau mot de passe, cliquez sur le bouton \u00c9diter le mot de passe. Si vous devez le noter sur papier, veillez \u00e0 le conserver en lieu s\u00fbr. Votre nouveau mot de passe doit r\u00e9pondre aux exigences suivantes :
+Display_ChangePasswordForm=Saisissez les donn\u00e9es suivantes. Elles serviront \u00e0 la v\u00e9rification n\u00e9cessaire de votre identit\u00e9 pour que vous puissiez changer votre mot de passe.
+Display_CheckingData=V\u00e9rification des donn\u00e9es...
+Display_CheckingPassword=V\u00e9rification du mot de passe...
+Display_CheckingResponses=V\u00e9rification des r\u00e9ponses...
+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 avez oubli\u00e9 votre mot de passe, vous pourrez acc\u00e9der \u00e0 votre compte en r\u00e9pondant \u00e0 ces questions de s\u00e9curit\u00e9.
+Display_Day=jour
+Display_Days=jours
+Display_ErrorBody=Une erreur s'est produite. Fermez le navigateur et r\u00e9essayez. Si elle se reproduit, contactez le service d'assistance.
+Display_ExpirationDate=Date d'expiration du compte (%1% jours au maximum)
+Display_FooterInfoText=
+
+Display_ForgottenPassword=Si vous avez oubli\u00e9 votre mot de passe, suivez les invites pour r\u00e9initialiser le mot de passe.
+Display_ForgottenUsername=Saisissez les informations suivantes. Elles serviront \u00e0 rechercher votre nom d'utilisateur si vous l'oubliez.
+Display_GuestRegistration=Pour enregistrer un nouveau compte invit\u00e9, saisissez les informations suivantes.
+Display_GuestUpdate=Pour mettre \u00e0 jour un nouveau compte invit\u00e9, v\u00e9rifiez les informations suivantes et modifiez-les.
+Display_Helpdesk=Saisissez les donn\u00e9es de recherche de l'utilisateur.
+Display_Hour=heure
+Display_Hours=heures
+Display_IdleTimeout=Timeout d'inactivit\u00e9 :
+Display_IdleWarningMessage=Timeout imminent de la session du navigateur. Cliquez n'importe o\u00f9 dans cette page pour reprendre.
+Display_IdleWarningTitle=Timeout d'inactivit\u00e9
+Display_JavascriptRequired=Javascript est requis pour afficher cette page.
+Display_LeaveDirtyPasswordPage=Si vous quittez cette page, votre mot de passe ne sera pas \u00e9dit\u00e9.
+Display_Login=
+
+Display_LoginPasswordOnly=Saisissez votre mot de passe ci-dessous. Vous devez indiquer votre mot de passe actuel pour acc\u00e9der \u00e0 cette application.
+Display_Logout=<b>Vous \u00eates d\u00e9sormais d\u00e9connect\u00e9.</b><p/>Fermez toutes les fen\u00eatres du navigateur Internet avant d'essayer de vous reconnecter.
+Display_Minute=minute
+Display_Minutes=minutes
+Display_NAAF_PASSWORD=Veuillez fournir votre mot de passe d'authentification NAAF.
+Display_NAAF_LDAP_PASSWORD=Veuillez fournir votre mot de passe d'authentification LDAP.
+Display_NAAF_SECURITY_QUESTIONS=R\u00e9pondez \u00e0 vos questions de s\u00e9curit\u00e9.
+Display_NAAF_EMAIL_OTP=Un courrier \u00e9lectronique a \u00e9t\u00e9 envoy\u00e9 avec un mot de passe \u00e0 usage unique.
+Display_NAAF_SMS_OTP=Un SMS a \u00e9t\u00e9 envoy\u00e9 avec votre mot de passe \u00e0 usage unique.
+Display_NAAF_SMARTPHONE=La proc\u00e9dure de v\u00e9rification par smartphone a d\u00e9marr\u00e9. Veuillez reprendre une fois qu'elle sera termin\u00e9e.
+Display_NAAF_RADIUS=Veuillez fournir votre mot de passe d'authentification RADIUS.
+Display_NAAF_TOTP=Entrez votre valeur TOTP.
+Display_NAAF_HOTP=Entrez votre valeur HOTP.
+Display_NAAF_VOICE=La proc\u00e9dure de v\u00e9rification vocale a d\u00e9marr\u00e9. Veuillez reprendre une fois qu'elle sera termin\u00e9e.
+Display_NewUser=Pour enregistrer un nouveau compte, compl\u00e9tez le formulaire suivant.
+Display_NewUserProfile=Pour enregistrer un nouveau compte, s\u00e9lectionnez un profil.
+Display_PasswordExpired=Votre mot de passe est arriv\u00e9 \u00e0 expiration. Vous devez en d\u00e9finir un autre maintenant.
+Display_PasswordGeneration=Les mots de passe suivants ont \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9s pour vous de mani\u00e8re al\u00e9atoire. Ils sont bas\u00e9s sur des mots r\u00e9els afin de faciliter leur m\u00e9morisation, mais ont \u00e9t\u00e9 modifi\u00e9s pour les rendre compliqu\u00e9s \u00e0 deviner.
+Display_PasswordNoExpire=Votre mot de passe n'a pas de date d'expiration.
+Display_PasswordPrompt=Saisissez votre nouveau mot de passe
+Display_PasswordStrengthHigh=Force : <b>Fort</b>
+Display_PasswordStrengthLow=Force : <b>Faible</b>
+Display_PasswordStrengthMedium=Force : <b>Correct</b>
+Display_PasswordReplicationStatus=R\u00e9plication de mot de passe (progression %1%)
+Display_PasswordWarn=<b>Votre mot de passe va prochainement arriver \u00e0 expiration</b>. \u00c9ditez votre mot de passe rapidement afin d'\u00e9viter tout probl\u00e8me d'acc\u00e8s \u00e0 ce service.  <br/><br/>Votre mot de passe va arriver \u00e0 expiration le %1%.
+Display_PeopleSearch=Saisissez votre recherche ci-dessous. Vous pouvez rechercher une personne par son nom, son adresse \u00e9lectronique ou son num\u00e9ro de t\u00e9l\u00e9phone.
+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.
+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 sur votre t\u00e9l\u00e9phone mobile au moyen d'un message texte (SMS).
+Display_RecoverChoiceReset=D\u00e9finissez un nouveau mot de passe. Si vous avez oubli\u00e9 votre mot de passe et souhaitez en d\u00e9finir un autre, cliquez ici. Votre compte sera \u00e9galement \u00eatre d\u00e9verrouill\u00e9 lorsque vous d\u00e9finirez un nouveau mot de passe.
+Display_RecoverChoiceUnlock=D\u00e9verrouillez votre compte. Si vous vous souvenez de votre mot de passe, vous pouvez d\u00e9verrouiller votre compte en s\u00e9lectionnant cette option. Votre mot de passe ne sera pas \u00e9dit\u00e9.
+Display_RecoverEnterCode=Pour que vous puissiez confirmer votre identit\u00e9, un code de s\u00e9curit\u00e9 vous a \u00e9t\u00e9 envoy\u00e9. Cliquez sur le lien figurant dans le message \u00e9lectronique ou copiez le code de s\u00e9curit\u00e9 et collez-le ici.
+Display_RecoverEnterCodeSMS=Pour que vous puissiez confirmer votre identit\u00e9, un code de s\u00e9curit\u00e9 vous a \u00e9t\u00e9 envoy\u00e9 par SMS. Saisissez ici le code de s\u00e9curit\u00e9 figurant dans ce message.
+Display_RecoverPassword=Veuillez r\u00e9pondre aux questions suivantes. Si vous y r\u00e9pondez correctement, vous pourrez r\u00e9initialiser votre mot de passe.
+Display_RecoverPasswordChoices=Votre compte a \u00e9t\u00e9 verrouill\u00e9 en raison d'un nombre excessif de tentatives de connexion incorrectes. Vous pouvez continuer en d\u00e9verrouillant votre compte ou en \u00e9ditant votre mot de passe.
+Display_RecoverRandomResponses=Vous devez r\u00e9pondre aux questions suivantes pour continuer.
+Display_RecoverRequiredResponses=Ces questions sont exig\u00e9es par votre administrateur.
+Display_RecoverOTP=Pour que votre identit\u00e9 puisse \u00eatre v\u00e9rifi\u00e9e, utilisez votre p\u00e9riph\u00e9rique mobile pour g\u00e9n\u00e9rer votre code de s\u00e9curit\u00e9.
+Display_RecoverOTPIdentified=Pour que votre identit\u00e9 puisse \u00eatre v\u00e9rifi\u00e9e, utilisez votre p\u00e9riph\u00e9rique mobile pour g\u00e9n\u00e9rer votre code de s\u00e9curit\u00e9. L'ID d'inscription de votre p\u00e9riph\u00e9rique mobile est <b>%1%</b>.
+Display_ResponsesPrompt=Veuillez entrer vos r\u00e9ponses de s\u00e9curit\u00e9.
+Display_SelectionIndicator=S\u00e9lectionnez une question dans la liste.
+Display_SearchCompleted=Recherche termin\u00e9e.
+Display_SearchResultsExceeded=Les r\u00e9sultats de la recherche d\u00e9passent la taille maximale de la recherche.
+Display_SetRandomPasswordPrompt=D\u00e9finir un nouveau mot de passe al\u00e9atoire pour cet utilisateur ?
+Display_SearchResultsNone=Aucun r\u00e9sultat.
+Display_Second=seconde
+Display_Seconds=secondes
+Display_SetupHelpdeskResponses=<p>L'administrateur exige que vous indiquiez les r\u00e9ponses suivantes. Elles permettront de v\u00e9rifier votre identit\u00e9 si vous devez vous adresser au service d'assistance pour obtenir de l'aide.</p>
+Display_SetupRandomResponses=
+
+Display_SetupRequiredResponses=
+
+Display_SetupResponses=<p>Si vous avez oubli\u00e9 votre mot de passe, vous pourrez acc\u00e9der \u00e0 votre compte en r\u00e9pondant \u00e0 vos questions de s\u00e9curit\u00e9.</p><p>Choisissez les questions et r\u00e9ponses qui serviront \u00e0 v\u00e9rifier votre identit\u00e9 en cas d'oubli de votre mot de passe. \u00c9tant donn\u00e9 que les r\u00e9ponses \u00e0 ces questions peuvent \u00eatre utilis\u00e9es pour acc\u00e9der \u00e0 votre compte, veillez \u00e0 fournir des r\u00e9ponses difficiles \u00e0 deviner ou \u00e0 d\u00e9couvrir pour d'autres utilisateurs.</p>
+Display_SetupOtpSecret=Si vous oubliez votre mot de passe, vous pouvez acc\u00e9der \u00e0 votre compte \u00e0 l'aide de votre p\u00e9riph\u00e9rique mobile. Suivez les instructions ci-dessous en fonction du type de votre appareil.
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>Installez l'application Google Authenticator pour Android.</b><ol><li>Sur votre t\u00e9l\u00e9phone, acc\u00e9dez \u00e0 Google Play Store.</li><li>Recherchez <b>Google Authenticator</b>.<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">T\u00e9l\u00e9chargez \u00e0 partir de Google Play Store.</a>)</li><li>T\u00e9l\u00e9chargez et installez l'application.</li></ol><b>Ensuite, ouvrez et configurez Google Authenticator.</b><ol><li>Dans Google Authenticator, appuyez sur Menu et s\u00e9lectionnez "Set up account"(Configurer le compte).</li><li>S\u00e9lectionnez "Scan a barcode" (Scanner un code-barres).</li><li>Utilisez l'appareil photo de votre t\u00e9l\u00e9phone pour ce faire.</li><li>Une fois scann\u00e9, cliquez sur le bouton Continue (Continuer).</li></ol>
+Display_SetupOtp_iPhone_Title=iPhone
+Display_SetupOtp_iPhone_Steps=<b>Sur votre iPhone, appuyez sur l'ic\u00f4ne App Store.</b><ol><li>Sur votre t\u00e9l\u00e9phone, acc\u00e9dez \u00e0 l'App Store.</li><li>Recherchez <b>Google Authenticator</b>.<br/>(<a target="itunesstore" href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">T\u00e9l\u00e9chargez l'application \u00e0 partir de l'App Store.</a>)</li><li>Appuyez sur l'application, puis appuyez sur Free (Gratuit) pour la t\u00e9l\u00e9charger et l'installer.</li></ol><b>Ensuite, ouvrez et configurez Google Authenticator.</b><ol><li>Dans Google Authenticator, appuyez sur le signe "+", puis sur "Scan Barcode" (Scanner un code-barres).</li><li>Utilisez l'appareil photo de votre t\u00e9l\u00e9phone pour ce faire.</li><li>Une fois scann\u00e9, cliquez sur le bouton Continue (Continuer).</li></ol>
+Display_SetupOtp_Other_Title=Autre(s)
+Display_SetupOtp_Other_Steps=<b>Recherchez une application \u00e0 deux facteurs compatible.</b><ul><li>Essayez de trouver <b>Google Authenticator</b> dans l'App Store de votre appareil.<br/>De nombreux p\u00e9riph\u00e9riques ont des applications compatibles.</li><li>Essayez de trouver une application qui prend en charge les "<b>jetons de s\u00e9curit\u00e9 TOTP"</b> ou "RFC6238".</li><li>T\u00e9l\u00e9chargez et installez l'application.</li></ul><b>Ensuite, ouvrez et configurez l'application.</b><ol><li>Entrez les donn\u00e9es ci-dessous ou scannez le code en suivant les instructions de l'application.</li><li>Une fois l'application configur\u00e9e, cliquez sur le bouton Continuer.</li></ol>
+Display_WarnExistingOtpSecretTime=Vous avez d\u00e9j\u00e0 inscrit votre appareil le <span class="timestamp">%1%</span>. Vous pouvez tester votre appareil actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre appareil actuel.
+Display_WarnExistingOtpSecret=Vous avez d\u00e9j\u00e0 inscrit votre appareil. Vous pouvez tester votre appareil actuel en tapant le code g\u00e9n\u00e9r\u00e9 ci-dessous. Si vous continuez, vous pouvez reconfigurer votre appareil 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.
+Display_PleaseVerifyOtp=Veuillez entrer le code de v\u00e9rification \u00e0 6 chiffres pour votre p\u00e9riph\u00e9rique. S'il n'est pas configur\u00e9 pour fournir un code de v\u00e9rification, retournez \u00e0 la page pr\u00e9c\u00e9dente et configurez-le.
+Display_OtpRecoveryInfo=Chacun de ces codes de r\u00e9cup\u00e9ration ne peut \u00eatre utilis\u00e9 qu'une seule fois dans l'\u00e9ventualit\u00e9 o\u00f9 vous ne pouvez pas acc\u00e9der \u00e0 votre t\u00e9l\u00e9phone. Veillez \u00e0 <a class="pwm-link-print">imprimer cette page</a> ou \u00e0 recopier ces codes et \u00e0 les conserver en lieu s\u00fbr.
+Display_OtpClearWarning=Voulez-vous vraiment continuer ? Si vous poursuivez, votre inscription existante sera effac\u00e9e et vous devrez reconfigurer votre appareil.
+Display_ResponsesClearWarning=Voulez-vous vraiment continuer ? Si vous poursuivez, vos r\u00e9ponses existantes seront effac\u00e9es et vous devrez r\u00e9pondre \u00e0 nouveau aux questions de s\u00e9curit\u00e9.
+Display_Shortcuts=S\u00e9lectionnez l'un des liens suivants pour continuer.
+Display_ShowPasswordGuide=Guide des mots de passe
+Display_StrengthMeter=Force du mot de passe
+Display_UpdateProfile=Mettez \u00e0 jour les informations suivantes :
+Display_UpdateProfileConfirm=V\u00e9rifiez les informations suivantes que vous avez saisies et confirmez-les.
+Display_UserEventHistory=Cette page affiche l'historique des \u00e9v\u00e9nements concernant le mot de passe. Seules les op\u00e9rations r\u00e9alis\u00e9es avec cette application sont mentionn\u00e9es ici. Toutes les heures indiqu\u00e9es ici sont exprim\u00e9es dans le fuseau horaire %1%.
+Display_TypingWait=Attente de la fin de la saisie....
+Field_AccountEnabled=Compte activ\u00e9
+Field_AccountExpired=Compte expir\u00e9
+Field_AccountExpirationTime=Heure d'expiration du compte
+Field_Code=Code
+Field_OneTimePassword=Mot de passe \u00e0 usage unique
+Field_Confirm_Prefix=Confirmer
+Field_ConfirmPassword=Confirmer le mot de passe
+Field_CurrentPassword=Mot de passe actuel
+Field_Display=Afficher
+Field_ForwardURL=URL de r\u00e9acheminement
+Field_LastLoginTime=Heure de la derni\u00e8re connexion
+Field_LastLoginTimeDelta=Diff\u00e9rence d'heure de la derni\u00e8re connexion
+Field_LdapProfile=Profil LDAP
+Field_Location=Emplacement
+Field_LogoutURL=URL de d\u00e9connexion
+Field_NetworkAddress=Adresse r\u00e9seau
+Field_NetworkHost=H\u00f4te r\u00e9seau
+Field_NewPassword=Nouveau mot de passe
+Field_Option_Select=S\u00e9lectionnez une question
+Field_Password=Mot de passe actuel
+Field_PasswordExpirationTime=Date d'expiration du mot de passe
+Field_PasswordExpired=Mot de passe arriv\u00e9 \u00e0 expiration
+Field_PasswordLocked=Mot de passe verrouill\u00e9 (d\u00e9tection d'intrus)
+Field_PasswordPreExpired=Mot de passe arriv\u00e9 \u00e0 pr\u00e9expiration
+Field_PasswordSetTime=Heure de d\u00e9finition du mot de passe
+Field_PasswordSetTimeDelta=Diff\u00e9rence d'heure de d\u00e9finition du mot de passe
+Field_PasswordViolatesPolicy=Violation de la strat\u00e9gie de mot de passe
+Field_PasswordWithinWarningPeriod=Dans la p\u00e9riode d'avertissement
+Field_Policy=Strat\u00e9gie
+Field_Profile=Profil
+Field_ResponsesNeeded=Des mises \u00e0 jour des r\u00e9ponses sont n\u00e9cessaires
+Field_ResponsesStored=R\u00e9ponses stock\u00e9es
+Field_ResponsesTimestamp=Tampon horaire des r\u00e9ponses stock\u00e9es
+Field_User_Supplied_Question=Question
+Field_UserDN=DN utilisateur
+Field_UserGUID=GUID utilisateur
+Field_Username=Nom d'utilisateur
+Field_UserEmail=Courrier \u00e9lectronique
+Field_UserSMS=SMS
+Field_OTP_Identifier=Identificateur
+Field_OTP_Secret=Secret
+Field_OTP_Type=Type
+Field_OTP_RecoveryCodes=Codes de r\u00e9cup\u00e9ration
+Field_OTP_Stored=OTP stock\u00e9
+Field_OTP_Timestamp=Heure de stockage du mot de passe OTP
+Field_VerificationMethodPreviousAuth=Authentification pr\u00e9c\u00e9dente
+Field_VerificationMethodToken=V\u00e9rification par SMS/courrier \u00e9lectronique
+Field_VerificationMethodOTP=V\u00e9rification du p\u00e9riph\u00e9rique mobile
+Field_VerificationMethodChallengeResponses=Questions et r\u00e9ponses secr\u00e8tes
+Field_VerificationMethodAttributes=Donn\u00e9es personnelles
+Field_VerificationMethodRemoteResponses=R\u00e9ponses externes
+Field_VerificationMethodNAAF=Authentification avanc\u00e9e
+Long_Title_ActivateUser=Activez un compte pr\u00e9configur\u00e9 et \u00e9tablissez un nouveau mot de passe.
+Long_Title_Admin=Fonctions administratives
+Long_Title_ChangePassword=\u00c9ditez votre mot de passe actuel.
+Long_Title_ForgottenPassword=R\u00e9cup\u00e9rez l'acc\u00e8s \u00e0 votre compte si vous avez oubli\u00e9 votre mot de passe.
+Long_Title_ForgottenUsername=Recherchez votre nom d'utilisateur que vous avez oubli\u00e9.
+Long_Title_GuestRegistration=Enregistrez un nouveau compte utilisateur invit\u00e9.
+Long_Title_GuestUpdate=Mettez \u00e0 jour un nouveau compte utilisateur invit\u00e9.
+Long_Title_Helpdesk=Outils du service d'assistance
+Long_Title_Logout=D\u00e9connexion de l'application Self Service Password Reset.
+Long_Title_Main_Menu=Menu principal en self-service de mot de passe. Depuis ce menu, vous pouvez changer votre mot de passe actuel, r\u00e9initialiser un mot de passe oubli\u00e9 ou effectuer d'autres op\u00e9rations relatives aux mots de passe.
+Long_Title_NewUser=Cr\u00e9ez un compte utilisateur.
+Long_Title_PeopleSearch=Recherchez les informations de contact de vos coll\u00e8gues.
+Long_Title_SetupResponses=Configurez les questions et les r\u00e9ponses de s\u00e9curit\u00e9 en cas de mot de passe oubli\u00e9. Ces r\u00e9ponses secr\u00e8tes vous permettront de r\u00e9cup\u00e9rer votre mot de passe en cas d'oubli.
+Long_Title_SetupOtpSecret=Configurez votre p\u00e9riph\u00e9rique mobile. Si vous oubliez votre mot de passe, vous pouvez utiliser votre p\u00e9riph\u00e9rique mobile pour vous authentifier aupr\u00e8s de ce site.
+Long_Title_Shortcuts=Raccourcis personnalis\u00e9s.
+Long_Title_UpdateProfile=Mettez \u00e0 jour les donn\u00e9es de votre profil utilisateur.
+Long_Title_UserEventHistory=Historique des \u00e9v\u00e9nements concernant les mots de passe. Consultez la date \u00e0 laquelle vous avez chang\u00e9 votre mot de passe.
+Long_Title_UserInformation=Informations sur votre mot de passe et sur les strat\u00e9gies de mot de passe.
+Title_AnsweredQuestions=Questions auxquelles vous avez r\u00e9pondu
+Title_ActivateUser=Activer le compte
+Title_Admin=Administration
+Title_Application=NetIQ Self Service Password Reset
+Title_Captcha=V\u00e9rification
+Title_ChangePassword=\u00c9diter le mot de passe
+Title_ConfirmResponses=Confirmer les questions de s\u00e9curit\u00e9
+Title_Error=Erreur
+Title_ForgottenPassword=Mot de passe oubli\u00e9
+Title_ForgottenUsername=Nom d'utilisateur oubli\u00e9
+Title_GuestRegistration=Enregistrement de l'invit\u00e9
+Title_GuestUpdate=Mettre \u00e0 jour l'utilisateur invit\u00e9
+Title_Helpdesk=Service d'assistance
+Title_LocaleSelect=S\u00e9lection du param\u00e8tre local
+Title_Login=Veuillez vous connecter
+Title_Logout=D\u00e9connexion
+Title_MainPage=Menu principal
+Title_NewUser=Enregistrement de nouvel utilisateur
+Title_OrgChart=Organigramme
+Title_PasswordGuide=Guide des mots de passe
+Title_PasswordPolicy=Strat\u00e9gie de mot de passe
+Title_PasswordStrength=Force du mot de passe
+Title_PasswordWarning=Avertissement concernant le mot de passe
+Title_PeopleSearch=Recherche de personnes
+Title_PleaseWait=Veuillez patienter
+Title_RandomPasswords=Mots de passe al\u00e9atoires
+Title_RecoverPassword=Mot de passe oubli\u00e9
+Title_RecoverRandomResponses=Questions al\u00e9atoires
+Title_RecoverRequiredResponses=Questions obligatoires
+Title_SecurityResponses=R\u00e9ponses de s\u00e9curit\u00e9
+Title_SetupRandomResponses=Questions al\u00e9atoires
+Title_SetupRequiredResponses=Questions obligatoires
+Title_SetupResponses=Configurer des questions de s\u00e9curit\u00e9
+Title_SetupOtpSecret=Configurer l'authentification de l'application mobile
+Title_Shortcuts=Raccourcis
+Title_Status=\u00c9tat
+Title_Success=R\u00e9ussite
+Title_TitleBar=Self-service de mot de passe @User:ID@
+Title_UpdateProfile=Mettre \u00e0 jour le profil
+Title_UpdateProfileConfirm=Confirmer les donn\u00e9es du profil
+Title_UserEventHistory=Historique des mots de passe
+Title_UserInformation=Mon compte
+Tooltip_PasswordStrength=La mesure de la force des mots 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 d'autres chiffres.</li><li>Ajoutez d'autres 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
+Value_True=Vrai
+Value_NotApplicable=s/o
+Value_Default=Valeur par d\u00e9faut

+ 291 - 230
pwm/servlet/src/password/pwm/i18n/Display_ja.properties

@@ -1,230 +1,291 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2015 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Button_Activate=\u6709\u52b9\u5316
-Button_Agree=\u540c\u610f\u3059\u308b
-Button_Cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
-Button_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
-Button_ChangeResponses=\u623b\u308b
-Button_CheckCode=\u30b3\u30fc\u30c9\u306e\u78ba\u8a8d
-Button_HelpdeskClearOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306e\u6d88\u53bb
-Button_ClearResponses=\u56de\u7b54\u306e\u6d88\u53bb
-Button_CloseWindow=\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
-Button_Confirm=\u78ba\u8a8d
-Button_ConfirmResponses=\u56de\u7b54\u306e\u78ba\u8a8d
-Button_Continue=\u7d9a\u884c
-Button_Create=\u4f5c\u6210
-Button_GoBack=\u623b\u308b
-Button_Hide=\u975e\u8868\u793a
-Button_Hide_Responses=\u56de\u7b54\u3092\u975e\u8868\u793a\u306b\u3059\u308b
-Button_Home=\u30db\u30fc\u30e0
-Button_Login=\u30ed\u30b0\u30a4\u30f3
-Button_Logout=\u30ed\u30b0\u30a2\u30a6\u30c8
-Button_More=\u8a73\u7d30
-Button_RecoverPassword=\u56de\u7b54\u306e\u78ba\u8a8d
-Button_Reset=\u6d88\u53bb
-Button_Search=\u691c\u7d22
-Button_SetResponses=\u56de\u7b54\u306e\u4fdd\u5b58
-Button_Show=\u8868\u793a
-Button_Show_Responses=\u56de\u7b54\u3092\u8868\u793a\u3059\u308b
-Button_Unlock=\u30ed\u30c3\u30af\u89e3\u9664
-Button_UnlockPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ed\u30c3\u30af\u89e3\u9664
-Button_Update=\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
-Button_Verify=\u691c\u8a3c
-Button_OK=OK
-Display_ActivateUser=\u672c\u4eba\u78ba\u8a8d\u3092\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u60c5\u5831\u306f\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u898b\u3064\u3051\u3066\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<p/>\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u6709\u52b9\u306b\u306a\u308a\u307e\u305b\u3093\u3002
-Display_AutoGeneratedPassword=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u81ea\u52d5\u751f\u6210
-Display_CapsLockIsOn=CAPS LOCK\u304c\u30aa\u30f3\u306b\u306a\u3063\u3066\u3044\u307e\u3059
-Display_Captcha=\u4e0b\u306e\u691c\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4e0d\u6b63\u4f7f\u7528\u3092\u9632\u6b62\u3067\u304d\u307e\u3059\u3002
-Display_CaptchaInputWords=\u4e0a\u306b\u8868\u793a\u3055\u308c\u305f2\u3064\u306e\u5358\u8a9e\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-Display_CaptchaInputNumbers=\u805e\u3053\u3048\u305f\u6570\u5b57\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
-Display_CaptchaGetAudio=\u30aa\u30fc\u30c7\u30a3\u30aaCAPTCHA\u306e\u53d6\u5f97
-Display_CaptchaGetImage=\u30a4\u30e1\u30fc\u30b8CAPTCHA\u306e\u53d6\u5f97
-Display_CaptchaHelp=\u30d8\u30eb\u30d7
-Display_CaptchaRefresh=\u66f4\u65b0
-Display_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u305f\u3089\u3001\uff3b\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\uff3d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u66f8\u304d\u7559\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u5b89\u5168\u306a\u5834\u6240\u306b\u4fdd\u7ba1\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u6b21\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Display_ChangePasswordForm=\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u969b\u306b\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002
-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_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\u307e\u3059\u3002\u7db4\u308a\u3084\u53e5\u8aad\u70b9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u4e0b\u306e\u8cea\u554f\u306e\u56de\u7b54\u3092\u6b63\u3057\u304f\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Display_Day=\u65e5
-Display_Days=\u65e5
-Display_ErrorBody=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u3001\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30a8\u30e9\u30fc\u304c\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u5834\u5408\u306f\u3001\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
-Display_ExpirationDate=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u671f\u9650(\u6700\u5927 %1% \u65e5)
-Display_FooterInfoText=
-Display_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u753b\u9762\u4e0a\u306e\u6307\u793a\u306b\u5f93\u3063\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\u3002
-Display_ForgottenUsername=\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u60c5\u5831\u306f\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408\u306e\u691c\u7d22\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
-Display_GuestRegistration=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_GuestUpdate=\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_Helpdesk=\u30e6\u30fc\u30b6\u306e\u691c\u7d22\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_Hour=\u6642\u9593
-Display_Hours=\u6642\u9593
-Display_IdleTimeout=\u30a2\u30a4\u30c9\u30eb\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8:
-Display_IdleWarningMessage=\u30d6\u30e9\u30a6\u30b6\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u304c\u8feb\u3063\u3066\u3044\u307e\u3059\u3002\u518d\u958b\u3059\u308b\u306b\u306f\u3053\u306e\u30da\u30fc\u30b8\u4e0a\u306e\u4efb\u610f\u306e\u5834\u6240\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_IdleWarningTitle=\u30a2\u30a4\u30c9\u30eb\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8
-Display_LeaveDirtyPasswordPage=\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u79fb\u52d5\u3057\u3066\u3082\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002
-Display_Login=
-Display_LoginPasswordOnly=\u4e0b\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002
-Display_Logout=<b>\u30ed\u30b0\u30a2\u30a6\u30c8\u3055\u308c\u307e\u3057\u305f\u3002</b><p/>\u3059\u3079\u3066\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u304b\u3089\u3001\u30ed\u30b0\u30a4\u30f3\u3092\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_Minute=\u5206
-Display_Minutes=\u5206
-Display_NewUser=\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30d5\u30a9\u30fc\u30e0\u306b\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_PasswordExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002\u4eca\u3059\u3050\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Display_PasswordGeneration=\u6b21\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30e9\u30f3\u30c0\u30e0\u306b\u751f\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u7c21\u5358\u306b\u601d\u3044\u51fa\u305b\u308b\u3088\u3046\u306b\u5b9f\u969b\u306e\u5358\u8a9e\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u63a8\u6e2c\u3057\u306b\u304f\u304f\u306a\u308b\u3088\u3046\u306b\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\u3002
-Display_PasswordNoExpire=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u306f\u5207\u308c\u3066\u3044\u307e\u305b\u3093\u3002
-Display_PasswordPrompt=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_PasswordStrengthHigh=\u5f37\u5ea6: <b>\u5f37\u529b</b>
-Display_PasswordStrengthLow=\u5f37\u5ea6: <b>\u8106\u5f31</b>
-Display_PasswordStrengthMedium=\u5f37\u5ea6: <b>\u826f\u597d</b>
-Display_PasswordReplicationStatus=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u9032\u6357 %1 %)
-Display_PasswordWarn=<b>\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u8feb\u3063\u3066\u3044\u307e\u3059</b>\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u306a\u3044\u3088\u3046\u306b\u3001\u901f\u3084\u304b\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br/><br/>\u30d1\u30b9\u30ef\u30fc\u30c9\u306f %1% \u65e5\u306b\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u307e\u3059\u3002
-Display_PeopleSearch=\u4e0b\u306b\u691c\u7d22\u30af\u30a8\u30ea\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eba\u7269\u306f\u6c0f\u540d\u3001\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3001\u307e\u305f\u306f\u96fb\u8a71\u756a\u53f7\u3067\u691c\u7d22\u3067\u304d\u307e\u3059\u3002
-Display_PleaseWait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044...
-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_RecoverChoiceReset=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u89e3\u9664\u3055\u308c\u307e\u3059\u3002
-Display_RecoverChoiceUnlock=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u899a\u3048\u3066\u3044\u308c\u3070\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3067\u304d\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002
-Display_RecoverEnterCode=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u5185\u306e\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u304b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u3053\u3053\u306b\u30b3\u30d4\u30fc\u30a2\u30f3\u30c9\u30da\u30fc\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_RecoverEnterCodeSMS=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001SMS\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u30e1\u30c3\u30bb\u30fc\u30b8\u5185\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u3053\u3053\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_RecoverPassword=\u6b21\u306e\u8cea\u554f\u306b\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u56de\u7b54\u304c\u6b63\u3057\u3051\u308c\u3070\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
-Display_RecoverPasswordChoices=\u4f55\u5ea6\u3082\u30ed\u30b0\u30a4\u30f3\u306b\u5931\u6557\u3057\u305f\u7d50\u679c\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f\u3002\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3059\u308b\u304b\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Display_RecoverRandomResponses=\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u8cea\u554f\u306b\u7b54\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Display_RecoverRequiredResponses=\u3053\u308c\u3089\u306e\u8cea\u554f\u306f\u7ba1\u7406\u8005\u304b\u3089\u8981\u6c42\u3055\u308c\u305f\u3082\u306e\u3067\u3059\u3002
-Display_RecoverOTP=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u751f\u6210\u3055\u308c\u305f\u4f7f\u3044\u6368\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_RecoverOTPIdentified=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001%1% \u3067\u8b58\u5225\u3055\u308c\u308b\u751f\u6210\u3055\u308c\u305f\u4f7f\u3044\u6368\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_ResponsesPrompt=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u56de\u7b54\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_SelectionIndicator=\u30ea\u30b9\u30c8\u304b\u3089\u9805\u76ee\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
-Display_SearchCompleted=\u691c\u7d22\u304c\u5b8c\u4e86\u3057\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_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_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>
-Display_SetupRandomResponses=
-Display_SetupRequiredResponses=
-Display_SetupResponses=<p>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u672c\u4eba\u3060\u3051\u304c\u77e5\u308a\u5f97\u308b\u8cea\u554f\u306b\u56de\u7b54\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u56de\u5fa9\u3067\u304d\u307e\u3059\u3002</p><p>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306e\u672c\u4eba\u78ba\u8a8d\u306b\u4f7f\u7528\u53ef\u80fd\u306a\u8cea\u554f\u3068\u56de\u7b54\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u56de\u7b54\u306f\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u4f7f\u7528\u3067\u304d\u308b\u305f\u3081\u3001\u4ed6\u306e\u4eba\u306b\u7c21\u5358\u306b\u63a8\u6e2c\u3055\u308c\u305f\u308a\u898b\u3064\u3051\u3089\u308c\u306a\u3044\u56de\u7b54\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002</p>
-Display_SetupOtpSecret=<p><b>\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u30bd\u30d5\u30c8\u30c8\u30fc\u30af\u30f3\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002</b></p><p>QR\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u30bd\u30d5\u30c8\u30c8\u30fc\u30af\u30f3\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3059\u308b\u304b\u3001\u624b\u52d5\u3067\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3068\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u5165\u529b\u3057\u307e\u3059\u3002</p>
-Display_WarnExistingOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u304c\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\uff3b\u7d9a\u884c\uff3d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u3001\u65e2\u5b58\u306e\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u6d88\u53bb\u3057\u3001\u65b0\u3057\u3044\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002
-Display_PleaseVerifyOtp=\u751f\u6210\u3055\u308c\u305f\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u3001\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_Shortcuts=\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30ea\u30f3\u30af\u306e\u3044\u305a\u308c\u304b\u3092\u9078\u629e\u3057\u307e\u3059\u3002
-Display_ShowPasswordGuide=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ac\u30a4\u30c9
-Display_StrengthMeter=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6
-Display_UpdateProfile=\u6b21\u306e\u60c5\u5831\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_UpdateProfileConfirm=\u5165\u529b\u3057\u305f\u6b21\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Display_UserEventHistory=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u30a4\u30d9\u30f3\u30c8\u5c65\u6b74\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u307f\u304c\u3053\u3053\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u8868\u793a\u3055\u308c\u305f\u6642\u523b\u306f\u3059\u3079\u3066 %1% \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u3059\u3002
-Display_TypingWait=\u5165\u529b\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u304a\u5f85\u3061\u304f\u3060\u3055\u3044....
-Field_AccountEnabled=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6709\u52b9\u306b\u306a\u308a\u307e\u3057\u305f
-Field_Code=\u30b3\u30fc\u30c9
-Field_OneTimePassword=\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9
-Field_Confirm_Prefix=\u78ba\u8a8d
-Field_ConfirmPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u78ba\u8a8d
-Field_CurrentPassword=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
-Field_LastLoginTime=\u6700\u7d42\u30ed\u30b0\u30a4\u30f3\u6642\u9593
-Field_LastLoginTimeDelta=\u6700\u7d42\u30ed\u30b0\u30a4\u30f3\u5f8c\u306e\u7d4c\u904e\u6642\u9593
-Field_LdapProfile=LDAP\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb
-Field_Location=\u5834\u6240
-Field_NewPassword=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9
-Field_Option_Select=\u8cea\u554f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044:
-Field_Password=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
-Field_PasswordExpirationTime=\u30d1\u30b9\u30ef\u30fc\u30c9\u671f\u9650\u306e\u6642\u523b
-Field_PasswordExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u307e\u3057\u305f
-Field_PasswordLocked=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f(\u4e0d\u6b63\u4fb5\u5165\u8005\u691c\u51fa)
-Field_PasswordPreExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u8feb\u3063\u3066\u3044\u307e\u3059
-Field_PasswordSetTime=\u30d1\u30b9\u30ef\u30fc\u30c9\u8a2d\u5b9a\u6642\u9593
-Field_PasswordSetTimeDelta=\u30d1\u30b9\u30ef\u30fc\u30c9\u8a2d\u5b9a\u5f8c\u306e\u7d4c\u904e\u6642\u9593
-Field_PasswordViolatesPolicy=\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u9055\u53cd\u3057\u3066\u3044\u307e\u3059
-Field_PasswordWithinWarningPeriod=\u8b66\u544a\u671f\u9593\u5185
-Field_ResponsesNeeded=\u56de\u7b54\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u3059
-Field_ResponsesStored=\u56de\u7b54\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f
-Field_ResponsesTimestamp=\u56de\u7b54\u4fdd\u5b58\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7
-Field_User_Supplied_Question=\u8cea\u554f
-Field_UserDN=\u30e6\u30fc\u30b6DN
-Field_UserGUID=\u30e6\u30fc\u30b6GUID
-Field_Username=\u30e6\u30fc\u30b6\u540d
-Field_OTP_Identifier=\u8b58\u5225\u5b50
-Field_OTP_Secret=\u30b7\u30fc\u30af\u30ec\u30c3\u30c8
-Field_OTP_Type=\u30bf\u30a4\u30d7
-Field_OTP_RecoveryCodes=\u56de\u5fa9\u30b3\u30fc\u30c9
-Long_Title_ActivateUser=\u4e8b\u524d\u8a2d\u5b9a\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3001\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
-Long_Title_Admin=\u7ba1\u7406\u6a5f\u80fd
-Long_Title_ChangePassword=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u307e\u3059\u3002
-Long_Title_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u56de\u5fa9\u3057\u307e\u3059\u3002
-Long_Title_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u691c\u7d22\u3057\u307e\u3059\u3002
-Long_Title_GuestRegistration=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002
-Long_Title_GuestUpdate=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u307e\u3059\u3002
-Long_Title_Helpdesk=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u30c4\u30fc\u30eb
-Long_Title_Logout=\u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002
-Long_Title_Main_Menu=\u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9\u306e\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc\u3002\u3053\u3053\u3067\u306f\u3001\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u305f\u308a\u3001\u5fd8\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u305f\u308a\u3001\u305d\u306e\u4ed6\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u95a2\u9023\u3057\u305f\u64cd\u4f5c\u3092\u884c\u3063\u305f\u308a\u3067\u304d\u307e\u3059\u3002
-Long_Title_NewUser=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
-Long_Title_PeopleSearch=\u540c\u50da\u306e\u9023\u7d61\u5148\u60c5\u5831\u3092\u691c\u7d22\u3057\u307e\u3059\u3002
-Long_Title_SetupResponses=\u5fd8\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u56de\u7b54\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002\u3053\u306e\u79d8\u5bc6\u306e\u8cea\u554f\u306b\u3088\u3063\u3066\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u56de\u5fa9\u3067\u304d\u307e\u3059\u3002
-Long_Title_SetupOtpSecret=\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u30bd\u30d5\u30c8\u30c8\u30fc\u30af\u30f3\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
-Long_Title_Shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u304c\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba\u3055\u308c\u307e\u3057\u305f\u3002
-Long_Title_UpdateProfile=\u30e6\u30fc\u30b6\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u307e\u3059\u3002
-Long_Title_UserEventHistory=\u30d1\u30b9\u30ef\u30fc\u30c9\u30a4\u30d9\u30f3\u30c8\u5c65\u6b74\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u3044\u3064\u5909\u66f4\u3057\u305f\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
-Long_Title_UserInformation=\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u95a2\u3059\u308b\u60c5\u5831\u3067\u3059\u3002
-Title_ActivateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u5316
-Title_Admin=\u7ba1\u7406
-Title_Captcha=\u78ba\u8a8d
-Title_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
-Title_ConfirmResponses=\u30d1\u30b9\u30ef\u30fc\u30c9\u56de\u7b54\u306e\u78ba\u8a8d
-Title_Error=\u30a8\u30e9\u30fc
-Title_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408
-Title_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408
-Title_GuestRegistration=\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306e\u767b\u9332
-Title_GuestUpdate=\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
-Title_Helpdesk=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af
-Title_LocaleSelect=\u30ed\u30b1\u30fc\u30eb\u306e\u9078\u629e
-Title_Login=\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044
-Title_Logout=\u30ed\u30b0\u30a2\u30a6\u30c8
-Title_MainPage=\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc
-Title_NewUser=\u65b0\u898f\u30e6\u30fc\u30b6\u767b\u9332
-Title_PasswordGuide=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ac\u30a4\u30c9
-Title_PasswordPolicy=\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc
-Title_PasswordStrength=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6
-Title_PasswordWarning=\u30d1\u30b9\u30ef\u30fc\u30c9\u8b66\u544a
-Title_PeopleSearch=\u4eba\u7269\u691c\u7d22
-Title_PleaseWait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044
-Title_RandomPasswords=\u30e9\u30f3\u30c0\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9
-Title_RecoverPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408
-Title_RecoverRandomResponses=\u30e9\u30f3\u30c0\u30e0\u8cea\u554f
-Title_RecoverRequiredResponses=\u5fc5\u9808\u8cea\u554f
-Title_SecurityResponses=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u56de\u7b54
-Title_SetupRandomResponses=\u30e9\u30f3\u30c0\u30e0\u8cea\u554f
-Title_SetupRequiredResponses=\u5fc5\u9808\u8cea\u554f
-Title_SetupResponses=\u30d1\u30b9\u30ef\u30fc\u30c9\u56de\u7b54\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
-Title_SetupOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
-Title_Shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8
-Title_Success=\u6210\u529f
-Title_TitleBar=@User:ID@  \u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9
-Title_UpdateProfile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
-Title_UpdateProfileConfirm=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30c7\u30fc\u30bf\u306e\u78ba\u8a8d
-Title_UserEventHistory=\u30d1\u30b9\u30ef\u30fc\u30c9\u5c65\u6b74
-Title_UserInformation=\u30a2\u30ab\u30a6\u30f3\u30c8\u60c5\u5831
-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\u3002<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>
-Value_False=\u507d
-Value_True=\u771f
-Value_NotApplicable=\u8a72\u5f53\u306a\u3057
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Button_Activate=\u6709\u52b9\u5316
+Button_Agree=\u540c\u610f\u3059\u308b
+Button_Cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
+Button_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
+Button_ChangeResponses=\u623b\u308b
+Button_CheckCode=\u30b3\u30fc\u30c9\u306e\u78ba\u8a8d
+Button_ClearOtpReEnroll=\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306e\u518d\u767b\u9332
+Button_HelpdeskClearOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306e\u6d88\u53bb
+Button_ClearResponses=\u56de\u7b54\u306e\u6d88\u53bb
+Button_CloseWindow=\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u308b
+Button_Confirm=\u78ba\u8a8d
+Button_ConfirmResponses=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u56de\u7b54\u306e\u78ba\u8a8d
+Button_Continue=\u7d9a\u884c
+Button_Create=\u4f5c\u6210
+Button_Delete=\u524a\u9664
+Button_Email=\u96fb\u5b50\u30e1\u30fc\u30eb
+Button_GoBack=\u623b\u308b
+Button_Hide=\u975e\u8868\u793a
+Button_Hide_Responses=\u56de\u7b54\u3092\u975e\u8868\u793a\u306b\u3059\u308b
+Button_Home=\u30db\u30fc\u30e0
+Button_Login=\u30ed\u30b0\u30a4\u30f3
+Button_Logout=\u30ed\u30b0\u30a2\u30a6\u30c8
+Button_More=\u8a73\u7d30
+Button_OrgChart=\u7d44\u7e54\u30c1\u30e3\u30fc\u30c8
+Button_RecoverPassword=\u56de\u7b54\u306e\u78ba\u8a8d
+Button_Reset=\u6d88\u53bb
+Button_Search=\u691c\u7d22
+Button_SetResponses=\u56de\u7b54\u306e\u4fdd\u5b58
+Button_Show=\u8868\u793a
+Button_Show_Responses=\u56de\u7b54\u3092\u8868\u793a\u3059\u308b
+Button_Skip=\u30b9\u30ad\u30c3\u30d7
+Button_SMS=SMS
+Button_Unlock=\u30ed\u30c3\u30af\u89e3\u9664
+Button_UnlockPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ed\u30c3\u30af\u89e3\u9664
+Button_Update=\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
+Button_Verify=\u691c\u8a3c
+Button_OK=OK
+Display_ActivateUser=\u672c\u4eba\u78ba\u8a8d\u3092\u3059\u308b\u305f\u3081\u306b\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u60c5\u5831\u306f\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u898b\u3064\u3051\u3066\u6709\u52b9\u306b\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002<p/>\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u6709\u52b9\u306b\u306a\u308a\u307e\u305b\u3093\u3002
+Display_AutoGeneratedPassword=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u81ea\u52d5\u751f\u6210
+Display_CapsLockIsOn=CAPS LOCK\u304c\u30aa\u30f3\u306b\u306a\u3063\u3066\u3044\u307e\u3059
+Display_Captcha=\u691c\u8a3c\u30d7\u30ed\u30bb\u30b9\u3092\u5b8c\u4e86\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u3092\u5b8c\u4e86\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4e0d\u6b63\u4f7f\u7528\u3092\u9632\u6b62\u3067\u304d\u307e\u3059\u3002
+Display_CaptchaInputWords=\u4e0a\u306b\u8868\u793a\u3055\u308c\u305f\u30c6\u30ad\u30b9\u30c8\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+Display_CaptchaInputNumbers=\u805e\u3053\u3048\u305f\u6570\u5b57\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+Display_CaptchaGetAudio=\u30aa\u30fc\u30c7\u30a3\u30aaCAPTCHA\u306e\u53d6\u5f97
+Display_CaptchaGetImage=\u30a4\u30e1\u30fc\u30b8CAPTCHA\u306e\u53d6\u5f97
+Display_CaptchaHelp=\u30d8\u30eb\u30d7
+Display_CaptchaRefresh=\u66f4\u65b0
+Display_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u5b89\u5168\u6027\u3092\u78ba\u4fdd\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u305f\u3089\u3001\uff3b\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\uff3d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u66f8\u304d\u7559\u3081\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306f\u3001\u5b89\u5168\u306a\u5834\u6240\u306b\u4fdd\u7ba1\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u6b21\u306e\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_ChangePasswordForm=\u6b21\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u305f\u3081\u306e\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u969b\u306b\u5fc5\u8981\u3068\u306a\u308a\u307e\u3059\u3002
+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_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\u307e\u3059\u3002\u7db4\u308a\u3084\u53e5\u8aad\u70b9\u3092\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u4e0b\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\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002
+Display_Day=\u65e5
+Display_Days=\u65e5
+Display_ErrorBody=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u3001\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30a8\u30e9\u30fc\u304c\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u5834\u5408\u306f\u3001\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
+Display_ExpirationDate=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u671f\u9650(\u6700\u5927 %1% \u65e5)
+Display_FooterInfoText=
+Display_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u753b\u9762\u4e0a\u306e\u6307\u793a\u306b\u5f93\u3063\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u307e\u3059\u3002
+Display_ForgottenUsername=\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u60c5\u5831\u306f\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408\u306e\u691c\u7d22\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002
+Display_GuestRegistration=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_GuestUpdate=\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_Helpdesk=\u30e6\u30fc\u30b6\u306e\u691c\u7d22\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_Hour=\u6642\u9593
+Display_Hours=\u6642\u9593
+Display_IdleTimeout=\u30a2\u30a4\u30c9\u30eb\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8:
+Display_IdleWarningMessage=\u30d6\u30e9\u30a6\u30b6\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u304c\u8feb\u3063\u3066\u3044\u307e\u3059\u3002\u518d\u958b\u3059\u308b\u306b\u306f\u3053\u306e\u30da\u30fc\u30b8\u4e0a\u306e\u4efb\u610f\u306e\u5834\u6240\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_IdleWarningTitle=\u30a2\u30a4\u30c9\u30eb\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8
+Display_JavascriptRequired=\u3053\u306e\u30da\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u306b\u306fJavascript\u304c\u5fc5\u8981\u3067\u3059\u3002
+Display_LeaveDirtyPasswordPage=\u3053\u306e\u30da\u30fc\u30b8\u304b\u3089\u79fb\u52d5\u3057\u3066\u3082\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002
+Display_Login=
+Display_LoginPasswordOnly=\u4e0b\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059\u3002
+Display_Logout=<b>\u30ed\u30b0\u30a2\u30a6\u30c8\u3055\u308c\u307e\u3057\u305f\u3002</b><p/>\u3059\u3079\u3066\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u304b\u3089\u3001\u30ed\u30b0\u30a4\u30f3\u3092\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_Minute=\u5206
+Display_Minutes=\u5206
+Display_NAAF_PASSWORD=NAAF\u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_LDAP_PASSWORD=LDAP\u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_SECURITY_QUESTIONS=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306b\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_EMAIL_OTP=\u4f7f\u3044\u6368\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a18\u8f09\u3057\u305f\u96fb\u5b50\u30e1\u30fc\u30eb\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002
+Display_NAAF_SMS_OTP=\u4f7f\u3044\u6368\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a18\u8f09\u3057\u305fSMS\u304c\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002
+Display_NAAF_SMARTPHONE=\u30b9\u30de\u30fc\u30c8\u30d5\u30a9\u30f3\u306e\u691c\u8a3c\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3057\u305f\u3002\u5b8c\u4e86\u3057\u305f\u3089\u3001\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_RADIUS=RADIUS\u8a8d\u8a3c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_TOTP=TOTP\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_HOTP=HOTP\u5024\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NAAF_VOICE=\u97f3\u58f0\u306e\u691c\u8a3c\u30d7\u30ed\u30bb\u30b9\u3092\u958b\u59cb\u3057\u307e\u3057\u305f\u3002\u5b8c\u4e86\u3057\u305f\u3089\u3001\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NewUser=\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30d5\u30a9\u30fc\u30e0\u306b\u60c5\u5831\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_NewUserProfile=\u65b0\u3057\u3044\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3059\u308b\u306b\u306f\u3001\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_PasswordExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002\u4eca\u3059\u3050\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_PasswordGeneration=\u6b21\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30e9\u30f3\u30c0\u30e0\u306b\u751f\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u308c\u3089\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u7c21\u5358\u306b\u601d\u3044\u51fa\u305b\u308b\u3088\u3046\u306b\u5b9f\u969b\u306e\u5358\u8a9e\u306b\u57fa\u3065\u3044\u3066\u3044\u307e\u3059\u304c\u3001\u63a8\u6e2c\u3057\u306b\u304f\u304f\u306a\u308b\u3088\u3046\u306b\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059\u3002
+Display_PasswordNoExpire=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u306f\u5207\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Display_PasswordPrompt=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_PasswordStrengthHigh=\u5f37\u5ea6: <b>\u5f37\u529b</b>
+Display_PasswordStrengthLow=\u5f37\u5ea6: <b>\u8106\u5f31</b>
+Display_PasswordStrengthMedium=\u5f37\u5ea6: <b>\u826f\u597d</b>
+Display_PasswordReplicationStatus=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3(\u9032\u6357 %1 %)
+Display_PasswordWarn=<b>\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u8feb\u3063\u3066\u3044\u307e\u3059</b>\u3002\u3053\u306e\u30b5\u30fc\u30d3\u30b9\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u306a\u3044\u3088\u3046\u306b\u3001\u901f\u3084\u304b\u306b\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br/><br/>\u30d1\u30b9\u30ef\u30fc\u30c9\u306f %1% \u65e5\u306b\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u307e\u3059\u3002
+Display_PeopleSearch=\u4e0b\u306b\u691c\u7d22\u30af\u30a8\u30ea\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u4eba\u7269\u306f\u6c0f\u540d\u3001\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3001\u307e\u305f\u306f\u96fb\u8a71\u756a\u53f7\u3067\u691c\u7d22\u3067\u304d\u307e\u3059\u3002
+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=\u672c\u4eba\u78ba\u8a8d\u306e\u65b9\u6cd5\u3092\u3001\u6b21\u306e\u4e2d\u304b\u30891\u3064\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_RecoverTokenSendChoices=\u672c\u4eba\u78ba\u8a8d\u306e\u305f\u3081\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u304c\u9001\u4fe1\u3055\u308c\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=SMS\u3067\u643a\u5e2f\u96fb\u8a71\u306b\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3059\u3002
+Display_RecoverChoiceReset=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u306b\u306f\u3001\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3059\u308b\u3068\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u89e3\u9664\u3055\u308c\u307e\u3059\u3002
+Display_RecoverChoiceUnlock=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u899a\u3048\u3066\u3044\u308c\u3070\u3001\u3053\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3067\u304d\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5909\u66f4\u3055\u308c\u307e\u305b\u3093\u3002
+Display_RecoverEnterCode=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u5185\u306e\u30ea\u30f3\u30af\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u304b\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u3053\u3053\u306b\u30b3\u30d4\u30fc\u30a2\u30f3\u30c9\u30da\u30fc\u30b9\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_RecoverEnterCodeSMS=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001SMS\u3067\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f\u3002\u30e1\u30c3\u30bb\u30fc\u30b8\u5185\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u3053\u3053\u306b\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_RecoverPassword=\u6b21\u306e\u8cea\u554f\u306b\u56de\u7b54\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u56de\u7b54\u304c\u6b63\u3057\u3051\u308c\u3070\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002
+Display_RecoverPasswordChoices=\u4f55\u5ea6\u3082\u30ed\u30b0\u30a4\u30f3\u306b\u5931\u6557\u3057\u305f\u7d50\u679c\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f\u3002\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3059\u308b\u304b\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_RecoverRandomResponses=\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u8cea\u554f\u306b\u7b54\u3048\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_RecoverRequiredResponses=\u3053\u308c\u3089\u306e\u8cea\u554f\u306f\u7ba1\u7406\u8005\u304b\u3089\u8981\u6c42\u3055\u308c\u305f\u3082\u306e\u3067\u3059\u3002
+Display_RecoverOTP=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_RecoverOTPIdentified=\u672c\u4eba\u78ba\u8a8d\u3092\u884c\u3046\u305f\u3081\u306b\u3001\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30b3\u30fc\u30c9\u3092\u751f\u6210\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3054\u4f7f\u7528\u306e\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306e\u767b\u9332ID\u306f <b>%1%</b> \u3067\u3059\u3002
+Display_ResponsesPrompt=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u56de\u7b54\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044
+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_SearchResultsExceeded=\u691c\u7d22\u7d50\u679c\u304c\u6700\u5927\u691c\u7d22\u30b5\u30a4\u30ba\u3092\u8d85\u3048\u307e\u3057\u305f\u3002
+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_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>
+Display_SetupRandomResponses=
+Display_SetupRequiredResponses=
+Display_SetupResponses=<p>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306b\u56de\u7b54\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002</p><p>\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306e\u672c\u4eba\u78ba\u8a8d\u306b\u4f7f\u7528\u3059\u308b\u8cea\u554f\u3068\u7b54\u3048\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u7b54\u3048\u306f\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u4f7f\u7528\u3067\u304d\u308b\u305f\u3081\u3001\u4ed6\u306e\u4eba\u304c\u7c21\u5358\u306b\u63a8\u6e2c\u307e\u305f\u306f\u767a\u898b\u3067\u304d\u306a\u3044\u7b54\u3048\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002</p>
+Display_SetupOtpSecret=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306e\u7a2e\u985e\u306b\u5fdc\u3058\u3066\u3001\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044\u3002
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>Android\u5411\u3051\u306eGoogle Authenticator\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002</b><ol><li>\u3054\u4f7f\u7528\u306e\u643a\u5e2f\u96fb\u8a71\u3067Google Play\u30b9\u30c8\u30a2\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002</li><li><b>Google Authenticator</b>\u3092\u691c\u7d22\u3057\u307e\u3059\u3002<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Google Play\u30b9\u30c8\u30a2\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9</a>)</li><li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002</li></ol><b>\u6b21\u306b\u3001Google Authenticator\u3092\u958b\u3044\u3066\u8a2d\u5b9a\u3057\u307e\u3059\u3002</b><ol><li>Google Authenticator\u3067\u3001\uff3b\u30e1\u30cb\u30e5\u30fc\uff3d\u3092\u30bf\u30c3\u30c1\u3057\u3001\uff3b\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u8a2d\u5b9a\uff3d\u3092\u9078\u629e\u3057\u307e\u3059\u3002</li><li>\uff3b\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\uff3d\u3092\u9078\u629e\u3057\u307e\u3059\u3002</li><li>\u3054\u4f7f\u7528\u306e\u643a\u5e2f\u96fb\u8a71\u306e\u30ab\u30e1\u30e9\u3092\u4f7f\u7528\u3057\u3066\u3001\u3053\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u3002</li><li>\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u3089\u3001\u6b21\u3078\u9032\u3080\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002</li></ol>
+Display_SetupOtp_iPhone_Title=iPhone
+Display_SetupOtp_iPhone_Steps=<b>\u3054\u4f7f\u7528\u306eiPhone\u3067\u3001App Store\u30a2\u30a4\u30b3\u30f3\u3092\u30bf\u30c3\u30d7\u3057\u307e\u3059\u3002</b><ol><li>\u3054\u4f7f\u7528\u306e\u643a\u5e2f\u96fb\u8a71\u3067App Store\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002</li><li><b>Google Authenticator</b>\u3092\u691c\u7d22\u3057\u307e\u3059\u3002<br/>(<a target="itunesstore" href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">App Store</a>\u304b\u3089\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9)</li><li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30bf\u30c3\u30d7\u3057\u3066\u304b\u3089\u3001\uff3b\u7121\u6599\uff3d\u3092\u30bf\u30c3\u30d7\u3057\u3001\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3068\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3092\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002</li></ol><b>\u6b21\u306bGoogle Authenticator\u3092\u958b\u3044\u3066\u8a2d\u5b9a\u3057\u307e\u3059\u3002</b><ol><li>Google Authenticator\u3067\u3001\uff3b+\uff3d\u3001\uff3b\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\uff3d\u306e\u9806\u306b\u30bf\u30c3\u30d7\u3057\u307e\u3059\u3002</li><li>\u3054\u4f7f\u7528\u306e\u643a\u5e2f\u96fb\u8a71\u306e\u30ab\u30e1\u30e9\u3092\u4f7f\u7528\u3057\u3066\u3001\u3053\u306e\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u3002</li><li>\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u305f\u3089\u3001\u6b21\u3078\u9032\u3080\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002</li></ol>
+Display_SetupOtp_Other_Title=\u305d\u306e\u4ed6
+Display_SetupOtp_Other_Steps=<b>\u4e92\u63db\u6027\u306e\u3042\u308b2\u6bb5\u968e\u8a8d\u8a3c\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u898b\u3064\u3051\u307e\u3059\u3002</b><ul><li>\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b9\u30c8\u30a2\u3067<b>Google Authenticator</b>\u3092\u691c\u7d22\u3057\u307e\u3059\u3002<br/>\u591a\u304f\u306e\u30c7\u30d0\u30a4\u30b9\u3067\u306f\u3001\u4e92\u63db\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u3042\u308a\u307e\u3059\u3002</li><li>\u300c<b>TOTP\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30fc\u30c8\u30fc\u30af\u30f3\u300d</b>\u307e\u305f\u306f\u300cRFC6238\u300d\u3092\u30b5\u30dd\u30fc\u30c8\u3059\u308b\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u63a2\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002</li><li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3057\u3066\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002</li></ul><b>\u6b21\u306b\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u3044\u3066\u8a2d\u5b9a\u3057\u307e\u3059\u3002</b><ol><li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u3001\u4e0b\u306e\u30c7\u30fc\u30bf\u3092\u5165\u529b\u3059\u308b\u304b\u3001\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u3002</li><li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8a2d\u5b9a\u3057\u305f\u3089\u3001\u6b21\u3078\u9032\u3080\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002</li></ol>
+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_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\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u8cea\u554f\u306b\u5bfe\u3059\u308b\u7b54\u3048\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002
+Display_WarnExistingResponse=\u3059\u3067\u306b\u79d8\u5bc6\u306e\u8cea\u554f\u306e\u7b54\u3048\u304c\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u7d9a\u884c\u3059\u308b\u3068\u3001\u8cea\u554f\u306b\u5bfe\u3059\u308b\u7b54\u3048\u3092\u5909\u66f4\u3067\u304d\u307e\u3059\u3002
+Display_PleaseVerifyOtp=\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306e6\u6841\u306e\u691c\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u691c\u8a3c\u30b3\u30fc\u30c9\u3092\u63d0\u4f9b\u3059\u308b\u3088\u3046\u306b\u30c7\u30d0\u30a4\u30b9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u306f\u3001\u524d\u306e\u30da\u30fc\u30b8\u306b\u623b\u3063\u3066\u30c7\u30d0\u30a4\u30b9\u3092\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_OtpRecoveryInfo=\u96fb\u8a71\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u5834\u5408\u306b\u3001\u305d\u308c\u305e\u308c\u306e\u56de\u5fa9\u30b3\u30fc\u30c9\u3092\u4f7f\u7528\u3067\u304d\u308b\u306e\u306f1\u56de\u306e\u307f\u3067\u3059\u3002\u5fc5\u305a<a class="pwm-link-print">\u3053\u306e\u30da\u30fc\u30b8\u3092\u5370\u5237</a>\u3059\u308b\u304b\u3001\u30b3\u30fc\u30c9\u3092\u66f8\u304d\u7559\u3081\u3066\u5b89\u5168\u306a\u5834\u6240\u306b\u4fdd\u7ba1\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_OtpClearWarning=\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f\u7d9a\u884c\u3059\u308b\u3068\u3001\u65e2\u5b58\u306e\u767b\u9332\u306f\u6d88\u53bb\u3055\u308c\u308b\u305f\u3081\u3001\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u3092\u518d\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_ResponsesClearWarning=\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f\u7d9a\u884c\u3059\u308b\u3068\u3001\u65e2\u5b58\u306e\u56de\u7b54\u306f\u6d88\u53bb\u3055\u308c\u308b\u305f\u3081\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306e\u56de\u7b54\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Display_Shortcuts=\u7d9a\u884c\u3059\u308b\u306b\u306f\u3001\u6b21\u306e\u30ea\u30f3\u30af\u306e\u3044\u305a\u308c\u304b\u3092\u9078\u629e\u3057\u307e\u3059\u3002
+Display_ShowPasswordGuide=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ac\u30a4\u30c9
+Display_StrengthMeter=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6
+Display_UpdateProfile=\u6b21\u306e\u60c5\u5831\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_UpdateProfileConfirm=\u5165\u529b\u3057\u305f\u6b21\u306e\u60c5\u5831\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Display_UserEventHistory=\u3053\u306e\u30da\u30fc\u30b8\u306b\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u30a4\u30d9\u30f3\u30c8\u5c65\u6b74\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u5b9f\u884c\u3055\u308c\u305f\u30a2\u30af\u30b7\u30e7\u30f3\u306e\u307f\u304c\u3053\u3053\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u8868\u793a\u3055\u308c\u305f\u6642\u523b\u306f\u3059\u3079\u3066 %1% \u30bf\u30a4\u30e0\u30be\u30fc\u30f3\u3067\u3059\u3002
+Display_TypingWait=\u5165\u529b\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u304a\u5f85\u3061\u304f\u3060\u3055\u3044....
+Field_AccountEnabled=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6709\u52b9\u306b\u306a\u308a\u307e\u3057\u305f
+Field_AccountExpired=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059
+Field_AccountExpirationTime=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u671f\u9650
+Field_Code=\u30b3\u30fc\u30c9
+Field_OneTimePassword=\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9
+Field_Confirm_Prefix=\u78ba\u8a8d
+Field_ConfirmPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u78ba\u8a8d
+Field_CurrentPassword=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
+Field_Display=\u8868\u793a
+Field_ForwardURL=\u8ee2\u9001URL
+Field_LastLoginTime=\u6700\u7d42\u30ed\u30b0\u30a4\u30f3\u6642\u9593
+Field_LastLoginTimeDelta=\u6700\u7d42\u30ed\u30b0\u30a4\u30f3\u5f8c\u306e\u7d4c\u904e\u6642\u9593
+Field_LdapProfile=LDAP\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb
+Field_Location=\u5834\u6240
+Field_LogoutURL=\u30ed\u30b0\u30a2\u30a6\u30c8URL
+Field_NetworkAddress=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30a2\u30c9\u30ec\u30b9
+Field_NetworkHost=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u30db\u30b9\u30c8
+Field_NewPassword=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9
+Field_Option_Select=\u8cea\u554f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044:
+Field_Password=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9
+Field_PasswordExpirationTime=\u30d1\u30b9\u30ef\u30fc\u30c9\u671f\u9650\u306e\u6642\u523b
+Field_PasswordExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u307e\u3057\u305f
+Field_PasswordLocked=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30ed\u30c3\u30af\u3055\u308c\u307e\u3057\u305f(\u4e0d\u6b63\u4fb5\u5165\u8005\u691c\u51fa)
+Field_PasswordPreExpired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u8feb\u3063\u3066\u3044\u307e\u3059
+Field_PasswordSetTime=\u30d1\u30b9\u30ef\u30fc\u30c9\u8a2d\u5b9a\u6642\u9593
+Field_PasswordSetTimeDelta=\u30d1\u30b9\u30ef\u30fc\u30c9\u8a2d\u5b9a\u5f8c\u306e\u7d4c\u904e\u6642\u9593
+Field_PasswordViolatesPolicy=\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u9055\u53cd\u3057\u3066\u3044\u307e\u3059
+Field_PasswordWithinWarningPeriod=\u8b66\u544a\u671f\u9593\u5185
+Field_Policy=\u30dd\u30ea\u30b7\u30fc
+Field_Profile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb
+Field_ResponsesNeeded=\u56de\u7b54\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u304c\u5fc5\u8981\u3067\u3059
+Field_ResponsesStored=\u56de\u7b54\u304c\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f
+Field_ResponsesTimestamp=\u56de\u7b54\u4fdd\u5b58\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7
+Field_User_Supplied_Question=\u8cea\u554f
+Field_UserDN=\u30e6\u30fc\u30b6DN
+Field_UserGUID=\u30e6\u30fc\u30b6GUID
+Field_Username=\u30e6\u30fc\u30b6\u540d
+Field_UserEmail=\u96fb\u5b50\u30e1\u30fc\u30eb
+Field_UserSMS=SMS
+Field_OTP_Identifier=\u8b58\u5225\u5b50
+Field_OTP_Secret=\u30b7\u30fc\u30af\u30ec\u30c3\u30c8
+Field_OTP_Type=\u30bf\u30a4\u30d7
+Field_OTP_RecoveryCodes=\u56de\u5fa9\u30b3\u30fc\u30c9
+Field_OTP_Stored=OTP\u4fdd\u5b58\u6e08\u307f
+Field_OTP_Timestamp=OTP\u4fdd\u5b58\u6642\u9593
+Field_VerificationMethodPreviousAuth=\u524d\u56de\u306e\u8a8d\u8a3c
+Field_VerificationMethodToken=SMS/\u96fb\u5b50\u30e1\u30fc\u30eb\u306b\u3088\u308b\u691c\u8a3c
+Field_VerificationMethodOTP=\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306e\u691c\u8a3c
+Field_VerificationMethodChallengeResponses=\u79d8\u5bc6\u306e\u8cea\u554f\u3068\u7b54\u3048
+Field_VerificationMethodAttributes=\u500b\u4eba\u30c7\u30fc\u30bf
+Field_VerificationMethodRemoteResponses=\u5916\u90e8\u5fdc\u7b54
+Field_VerificationMethodNAAF=\u9ad8\u5ea6\u306a\u8a8d\u8a3c
+Long_Title_ActivateUser=\u4e8b\u524d\u8a2d\u5b9a\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3057\u3066\u3001\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002
+Long_Title_Admin=\u7ba1\u7406\u6a5f\u80fd
+Long_Title_ChangePassword=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u307e\u3059\u3002
+Long_Title_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u30a2\u30ab\u30a6\u30f3\u30c8\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u56de\u5fa9\u3057\u307e\u3059\u3002
+Long_Title_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u691c\u7d22\u3057\u307e\u3059\u3002
+Long_Title_GuestRegistration=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u767b\u9332\u3057\u307e\u3059\u3002
+Long_Title_GuestUpdate=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u307e\u3059\u3002
+Long_Title_Helpdesk=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u30c4\u30fc\u30eb
+Long_Title_Logout=\u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u30ed\u30b0\u30a2\u30a6\u30c8\u3057\u307e\u3059\u3002
+Long_Title_Main_Menu=\u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9\u306e\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc\u3002\u3053\u3053\u3067\u306f\u3001\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u305f\u308a\u3001\u5fd8\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3057\u305f\u308a\u3001\u305d\u306e\u4ed6\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u95a2\u9023\u3057\u305f\u64cd\u4f5c\u3092\u884c\u3063\u305f\u308a\u3067\u304d\u307e\u3059\u3002
+Long_Title_NewUser=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002
+Long_Title_PeopleSearch=\u540c\u50da\u306e\u9023\u7d61\u5148\u60c5\u5831\u3092\u691c\u7d22\u3057\u307e\u3059\u3002
+Long_Title_SetupResponses=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306e\u8cea\u554f\u3068\u7b54\u3048\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u306e\u79d8\u5bc6\u306e\u7b54\u3048\u306b\u3088\u3063\u3066\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306b\u56de\u5fa9\u3067\u304d\u307e\u3059\u3002
+Long_Title_SetupOtpSecret=\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30c7\u30d0\u30a4\u30b9\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u307e\u3059\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u3001\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u3092\u4f7f\u7528\u3057\u3066\u3053\u306e\u30b5\u30a4\u30c8\u3078\u306e\u8a8d\u8a3c\u3092\u884c\u3048\u307e\u3059\u3002
+Long_Title_Shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u304c\u30d1\u30fc\u30bd\u30ca\u30e9\u30a4\u30ba\u3055\u308c\u307e\u3057\u305f\u3002
+Long_Title_UpdateProfile=\u30e6\u30fc\u30b6\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30c7\u30fc\u30bf\u3092\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u307e\u3059\u3002
+Long_Title_UserEventHistory=\u30d1\u30b9\u30ef\u30fc\u30c9\u30a4\u30d9\u30f3\u30c8\u5c65\u6b74\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u3044\u3064\u5909\u66f4\u3057\u305f\u304b\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002
+Long_Title_UserInformation=\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u95a2\u3059\u308b\u60c5\u5831\u3067\u3059\u3002
+Title_AnsweredQuestions=\u56de\u7b54\u6e08\u307f\u306e\u8cea\u554f
+Title_ActivateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u5316
+Title_Admin=\u7ba1\u7406
+Title_Application=NetIQ Self Service Password Reset
+Title_Captcha=\u78ba\u8a8d
+Title_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
+Title_ConfirmResponses=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306e\u78ba\u8a8d
+Title_Error=\u30a8\u30e9\u30fc
+Title_ForgottenPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408
+Title_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u3092\u5fd8\u308c\u305f\u5834\u5408
+Title_GuestRegistration=\u30b2\u30b9\u30c8\u767b\u9332
+Title_GuestUpdate=\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
+Title_Helpdesk=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af
+Title_LocaleSelect=\u30ed\u30b1\u30fc\u30eb\u306e\u9078\u629e
+Title_Login=\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044
+Title_Logout=\u30ed\u30b0\u30a2\u30a6\u30c8
+Title_MainPage=\u30e1\u30a4\u30f3\u30e1\u30cb\u30e5\u30fc
+Title_NewUser=\u65b0\u898f\u30e6\u30fc\u30b6\u767b\u9332
+Title_OrgChart=\u7d44\u7e54\u30c1\u30e3\u30fc\u30c8
+Title_PasswordGuide=\u30d1\u30b9\u30ef\u30fc\u30c9\u30ac\u30a4\u30c9
+Title_PasswordPolicy=\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc
+Title_PasswordStrength=\u30d1\u30b9\u30ef\u30fc\u30c9\u5f37\u5ea6
+Title_PasswordWarning=\u30d1\u30b9\u30ef\u30fc\u30c9\u8b66\u544a
+Title_PeopleSearch=\u4eba\u7269\u691c\u7d22
+Title_PleaseWait=\u304a\u5f85\u3061\u304f\u3060\u3055\u3044
+Title_RandomPasswords=\u30e9\u30f3\u30c0\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9
+Title_RecoverPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408
+Title_RecoverRandomResponses=\u30e9\u30f3\u30c0\u30e0\u8cea\u554f
+Title_RecoverRequiredResponses=\u5fc5\u9808\u8cea\u554f
+Title_SecurityResponses=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u56de\u7b54
+Title_SetupRandomResponses=\u30e9\u30f3\u30c0\u30e0\u8cea\u554f
+Title_SetupRequiredResponses=\u5fc5\u9808\u8cea\u554f
+Title_SetupResponses=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u8cea\u554f\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
+Title_SetupOtpSecret=\u30e2\u30d0\u30a4\u30eb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a8d\u8a3c\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
+Title_Shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8
+Title_Status=\u30b9\u30c6\u30fc\u30bf\u30b9
+Title_Success=\u6210\u529f
+Title_TitleBar=@User:ID@  \u30d1\u30b9\u30ef\u30fc\u30c9\u30bb\u30eb\u30d5\u30b5\u30fc\u30d3\u30b9
+Title_UpdateProfile=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
+Title_UpdateProfileConfirm=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30c7\u30fc\u30bf\u306e\u78ba\u8a8d
+Title_UserEventHistory=\u30d1\u30b9\u30ef\u30fc\u30c9\u5c65\u6b74
+Title_UserInformation=My\u30a2\u30ab\u30a6\u30f3\u30c8
+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\u3002<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>
+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
+Value_True=\u771f
+Value_NotApplicable=\u8a72\u5f53\u306a\u3057
+Value_Default=\u30c7\u30d5\u30a9\u30eb\u30c8

+ 291 - 230
pwm/servlet/src/password/pwm/i18n/Display_pt_BR.properties

@@ -1,230 +1,291 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2015 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Button_Activate=Ativar
-Button_Agree=Eu Concordo
-Button_Cancel=Cancelar
-Button_ChangePassword=Mudar Senha
-Button_ChangeResponses=Voltar
-Button_CheckCode=Verificar C\u00f3digo
-Button_HelpdeskClearOtpSecret=Limpar Segredo OTP
-Button_ClearResponses=Limpar Respostas
-Button_CloseWindow=Fechar Janela
-Button_Confirm=Confirmar
-Button_ConfirmResponses=Confirmar Respostas
-Button_Continue=Continuar
-Button_Create=Criar
-Button_GoBack=Voltar
-Button_Hide=Ocultar
-Button_Hide_Responses=Ocultar Respostas
-Button_Home=In\u00edcio
-Button_Login=Login
-Button_Logout=Efetuar logout
-Button_More=Mais...
-Button_RecoverPassword=Verificar Respostas
-Button_Reset=Limpar
-Button_Search=Pesquisa
-Button_SetResponses=Salvar Respostas
-Button_Show=Mostrar
-Button_Show_Responses=Mostrar Respostas
-Button_Unlock=Desbloquear
-Button_UnlockPassword=Desbloquear Senha
-Button_Update=Atualizar
-Button_Verify=Verificar
-Button_OK=OK
-Display_ActivateUser=Para confirmar sua identidade, insira as informa\u00e7\u00f5es a seguir. Suas informa\u00e7\u00f5es ser\u00e3o usadas para localizar e ativar a conta do usu\u00e1rio.<p/>Conclua o processo ou sua conta n\u00e3o ser\u00e1 ativada adequadamente.
-Display_AutoGeneratedPassword=Gerar uma nova senha automaticamente
-Display_CapsLockIsOn=CAPS LOCK est\u00e1 ativado
-Display_Captcha=Insira o c\u00f3digo de verifica\u00e7\u00e3o abaixo. Digitar esse c\u00f3digo ajuda a proteger sua conta contra abuso.
-Display_CaptchaInputWords=Digite as duas palavras exibidas acima
-Display_CaptchaInputNumbers=Digite os n\u00fameros que ouvir
-Display_CaptchaGetAudio=Obter \u00e1udio CAPTCHA
-Display_CaptchaGetImage=Obter imagem CAPTCHA
-Display_CaptchaHelp=Ajuda
-Display_CaptchaRefresh=Atualizar
-Display_ChangePassword=Mude sua senha. Guarde a nova senha com seguran\u00e7a. Depois de digitar a nova senha, clique no bot\u00e3o Mudar Senha. Se precisar anot\u00e1-la, guarde-a em um lugar seguro. A nova senha deve atender os seguintes requisitos:
-Display_ChangePasswordForm=Insira os dados a seguir. Isso \u00e9 necess\u00e1rio para verificar sua identidade antes de voc\u00ea poder mudar a senha.
-Display_CheckingData=Verificando Dados...
-Display_CheckingPassword=Verificando Senha...
-Display_CheckingResponses=Verificando Respostas...
-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. No caso de esquecer a senha, ser\u00e1 preciso digitar as respostas exatas para as perguntas abaixo.
-Display_Day=dia
-Display_Days=dias
-Display_ErrorBody=Ocorreu um erro. Feche o browser e tente novamente mais tarde. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Display_ExpirationDate=Data de vencimento da conta (m\u00e1ximo de %1% dias)
-Display_FooterInfoText=
-Display_ForgottenPassword=Se voc\u00ea tiver esquecido sua senha, siga os prompts para redefini-la.
-Display_ForgottenUsername=Digite as informa\u00e7\u00f5es a seguir. Essas informa\u00e7\u00f5es ser\u00e3o usadas para pesquisar seu nome de usu\u00e1rio esquecido.
-Display_GuestRegistration=Para registrar uma nova conta de convidado, preencha as informa\u00e7\u00f5es a seguir.
-Display_GuestUpdate=Para atualizar uma conta de convidado, confirme e modifique as informa\u00e7\u00f5es a seguir.
-Display_Helpdesk=Insira os dados de pesquisa para o usu\u00e1rio.
-Display_Hour=hora
-Display_Hours=horas
-Display_IdleTimeout=Tempo de Espera por Inatividade:
-Display_IdleWarningMessage=A sess\u00e3o do browser est\u00e1 prestes a expirar. Clique em qualquer lugar na p\u00e1gina para reiniciar.
-Display_IdleWarningTitle=Tempo de Espera por Inatividade
-Display_LeaveDirtyPasswordPage=Se voc\u00ea sair desta p\u00e1gina, a senha n\u00e3o ser\u00e1 alterada.
-Display_Login=
-Display_LoginPasswordOnly=Insira sua senha abaixo. Sua senha atual \u00e9 necess\u00e1ria para acessar o aplicativo.
-Display_Logout=<b>Voc\u00ea agora est\u00e1 desconectado.</b><p/>Feche todas as janelas do browser da Internet antes de tentar efetuar login novamente.
-Display_Minute=minuto
-Display_Minutes=minutos
-Display_NewUser=Para registrar uma nova conta, preencha o formul\u00e1rio a seguir.
-Display_PasswordExpired=Sua senha expirou. Voc\u00ea deve definir uma nova senha agora.
-Display_PasswordGeneration=As senhas a seguir foram geradas aleatoriamente para voc\u00ea. Essas senhas s\u00e3o baseadas em palavras reais para serem mais f\u00e1ceis de lembrar, mas foram modificadas para serem dif\u00edceis de adivinhar.
-Display_PasswordNoExpire=A senha n\u00e3o expira.
-Display_PasswordPrompt=Digite a nova senha.
-Display_PasswordStrengthHigh=For\u00e7a: <b>Forte</b>
-Display_PasswordStrengthLow=For\u00e7a: <b>Fraca</b>
-Display_PasswordStrengthMedium=For\u00e7a: <b>Boa</b>
-Display_PasswordReplicationStatus=Replica\u00e7\u00e3o de senha (progresso %1%)
-Display_PasswordWarn=<b>A sua senha expirar\u00e1 em breve</b>. Mude a senha logo para evitar problemas no acesso a este servi\u00e7o. <br/><br/>Sua senha expirar\u00e1 em %1%.
-Display_PeopleSearch=Digite sua consulta de pesquisa abaixo. Voc\u00ea pode pesquisar uma pessoa com base no nome, no endere\u00e7o de e-mail ou no n\u00famero de telefone.
-Display_PleaseWait=Aguarde...
-Display_PleaseWaitNewUser=Sua nova conta foi configurada. Esse processo pode levar v\u00e1rios minutos, seja paciente.
-Display_PleaseWaitPassword=A senha est\u00e1 sendo alterada. Esse processo pode levar v\u00e1rios minutos, seja paciente.
-Display_Random=Aleat\u00f3rio
-Display_RecoverChoiceReset=Defina uma nova senha. Se tiver esquecido a senha e desejar obter uma nova, clique aqui. A conta tamb\u00e9m ser\u00e1 desbloqueada ao definir uma nova senha.
-Display_RecoverChoiceUnlock=Desbloqueie a sua conta. Se voc\u00ea lembrar sua senha, poder\u00e1 desbloquear a conta selecionando esta op\u00e7\u00e3o. Sua senha n\u00e3o ser\u00e1 alterada.
-Display_RecoverEnterCode=Para verificar sua identidade, um c\u00f3digo de seguran\u00e7a foi enviado a voc\u00ea. Clique no link no e-mail ou copie e cole o c\u00f3digo de seguran\u00e7a aqui.
-Display_RecoverEnterCodeSMS=Para verificar sua identidade, um c\u00f3digo de seguran\u00e7a foi enviado a voc\u00ea por SMS. Insira o c\u00f3digo de seguran\u00e7a da mensagem aqui.
-Display_RecoverPassword=Responda \u00e0s seguintes perguntas. Se respond\u00ea-las corretamente, poder\u00e1 redefinir sua senha.
-Display_RecoverPasswordChoices=Sua conta foi bloqueada devido a tentativas de login incorretas em excesso. Voc\u00ea pode continuar desbloqueando a conta ou alterando a senha.
-Display_RecoverRandomResponses=Voc\u00ea deve responder \u00e0s seguintes perguntas para continuar.
-Display_RecoverRequiredResponses=Estas perguntas s\u00e3o exigidas pelo seu administrador.
-Display_RecoverOTP=Para verificar sua identidade, insira a senha para um \u00fanico uso gerada.
-Display_RecoverOTPIdentified=Para verificar sua identidade, insira a senha para um \u00fanico uso gerada identificada por %1%.
-Display_ResponsesPrompt=Digite suas respostas de seguran\u00e7a
-Display_SelectionIndicator=Selecione um item na lista
-Display_SearchCompleted=Pesquisa conclu\u00edda.
-Display_SearchResultsExceeded=Os resultados da pesquisa excedem o tamanho m\u00e1ximo da pesquisa.
-Display_SetRandomPasswordPrompt=Definir uma nova senha aleat\u00f3ria para este usu\u00e1rio?
-Display_SearchResultsNone=Nenhum resultado.
-Display_Second=segundo
-Display_Seconds=segundos
-Display_SetupHelpdeskResponses=<p>O administrador precisa que voc\u00ea forne\u00e7a as seguintes respostas. Essas respostas s\u00e3o usadas para verificar sua identidade no caso de contato com o suporte t\u00e9cnico para assist\u00eancia.</p>
-Display_SetupRandomResponses=
-Display_SetupRequiredResponses=
-Display_SetupResponses=<p>Se esquecer a senha, ser\u00e1 poss\u00edvel recuper\u00e1-la respondendo \u00e0s perguntas conhecidas apenas por voc\u00ea.</p><p>Escolha as perguntas e respostas a serem usadas para verificar sua identidade no caso de esquecimento de sua senha. Como as respostas a essas perguntas podem ser usadas para acessar a sua conta, forne\u00e7a respostas que n\u00e3o sejam f\u00e1ceis de adivinhar ou descobrir.</p>
-Display_SetupOtpSecret=<p><b>Configurar soft token da senha senha para um \u00fanico uso</b></p><p>Explore o c\u00f3digo QR para configurar o aplicativo de soft token ou insira o segredo e as op\u00e7\u00f5es manualmente.</p>
-Display_WarnExistingOtpSecret=J\u00e1 existe um segredo OTP. Clique em Continuar para limpar o segredo existente e configurar um novo.
-Display_PleaseVerifyOtp=Insira a senha para um \u00fanico uso gerada para verificar a configura\u00e7\u00e3o.
-Display_Shortcuts=Selecione qualquer um dos links a seguir para continuar.
-Display_ShowPasswordGuide=Guia de Senha
-Display_StrengthMeter=For\u00e7a da Senha
-Display_UpdateProfile=Atualize as informa\u00e7\u00f5es a seguir:
-Display_UpdateProfileConfirm=Confira as seguintes informa\u00e7\u00f5es inseridas e confirme.
-Display_UserEventHistory=Esta p\u00e1gina mostra o hist\u00f3rico de evento de senha. Somente as a\u00e7\u00f5es realizadas com este aplicativo s\u00e3o mostradas aqui. Todos os hor\u00e1rios listados est\u00e3o no fuso hor\u00e1rio %1%.
-Display_TypingWait=Aguardando a digita\u00e7\u00e3o ser conclu\u00edda...
-Field_AccountEnabled=Conta Habilitada
-Field_Code=C\u00f3digo
-Field_OneTimePassword=Senha para um \u00fanico uso
-Field_Confirm_Prefix=Confirmar
-Field_ConfirmPassword=Confirmar Senha
-Field_CurrentPassword=Senha Atual
-Field_LastLoginTime=Hor\u00e1rio do \u00daltimo Login
-Field_LastLoginTimeDelta=Delta do Hor\u00e1rio do \u00daltimo Login
-Field_LdapProfile=Perfil LDAP
-Field_Location=Localiza\u00e7\u00e3o
-Field_NewPassword=Nova Senha
-Field_Option_Select=Selecione uma pergunta
-Field_Password=Senha Atual
-Field_PasswordExpirationTime=Hor\u00e1rio de Vencimento da Senha
-Field_PasswordExpired=Senha Expirada
-Field_PasswordLocked=Senha Bloqueada (Detec\u00e7\u00e3o de Intruso)
-Field_PasswordPreExpired=Senha Pr\u00e9-expirada
-Field_PasswordSetTime=Tempo de Defini\u00e7\u00e3o da Senha
-Field_PasswordSetTimeDelta=Delta do Hor\u00e1rio de Defini\u00e7\u00e3o da Senha
-Field_PasswordViolatesPolicy=Viola a Pol\u00edtica de Senha
-Field_PasswordWithinWarningPeriod=Dentro do Per\u00edodo de Aviso
-Field_ResponsesNeeded=Atualiza\u00e7\u00f5es da Resposta s\u00e3o Necess\u00e1rias
-Field_ResponsesStored=Respostas Armazenadas
-Field_ResponsesTimestamp=Marca\u00e7\u00e3o de Hor\u00e1rio das Respostas Armazenadas
-Field_User_Supplied_Question=Pergunta
-Field_UserDN=DN do Usu\u00e1rio
-Field_UserGUID=GUID do Usu\u00e1rio
-Field_Username=Nome de usu\u00e1rio
-Field_OTP_Identifier=Identificador
-Field_OTP_Secret=Segredo
-Field_OTP_Type=Tipo
-Field_OTP_RecoveryCodes=C\u00f3digos de recupera\u00e7\u00e3o
-Long_Title_ActivateUser=Ative uma conta pr\u00e9-configurada e estabele\u00e7a uma nova senha.
-Long_Title_Admin=Fun\u00e7\u00f5es administrativas
-Long_Title_ChangePassword=Mude sua senha atual.
-Long_Title_ForgottenPassword=Recupere o acesso \u00e0 sua conta caso tenha esquecido a senha.
-Long_Title_ForgottenUsername=Localize o nome de usu\u00e1rio esquecido.
-Long_Title_GuestRegistration=Registre uma nova conta do usu\u00e1rio convidado.
-Long_Title_GuestUpdate=Atualize nova conta do usu\u00e1rio convidado.
-Long_Title_Helpdesk=Ferramentas do suporte t\u00e9cnico
-Long_Title_Logout=Efetue o logout do aplicativo de autoatendimento de senha.
-Long_Title_Main_Menu=Menu principal de autoatendimento de senha. A partir daqui, \u00e9 poss\u00edvel mudar a senha atual, redefinir uma senha esquecida ou realizar outras atividades relacionadas \u00e0 senha.
-Long_Title_NewUser=Crie uma nova conta do usu\u00e1rio.
-Long_Title_PeopleSearch=Pesquise informa\u00e7\u00f5es de contato para seus colegas.
-Long_Title_SetupResponses=Configure suas respostas da senha esquecida. Essas perguntas secretas permitir\u00e3o recuperar uma senha esquecida.
-Long_Title_SetupOtpSecret=Configurar soft token da senha para um \u00fanico uso
-Long_Title_Shortcuts=Personalize atalhos.
-Long_Title_UpdateProfile=Atualize dados do perfil de usu\u00e1rio.
-Long_Title_UserEventHistory=Hist\u00f3rico de evento de senha. Veja quando voc\u00ea mudou sua senha no passado.
-Long_Title_UserInformation=Informa\u00e7\u00f5es sobre sua senha e pol\u00edticas de senha.
-Title_ActivateUser=Ativar Conta
-Title_Admin=Administra\u00e7\u00e3o
-Title_Captcha=Verifica\u00e7\u00e3o
-Title_ChangePassword=Mudar Senha
-Title_ConfirmResponses=Confirmar Respostas da Senha
-Title_Error=Erro
-Title_ForgottenPassword=Senha Esquecida
-Title_ForgottenUsername=Nome de Usu\u00e1rio Esquecido
-Title_GuestRegistration=Registrar Usu\u00e1rio Convidado
-Title_GuestUpdate=Atualizar Usu\u00e1rio Convidado
-Title_Helpdesk=Suporte T\u00e9cnico
-Title_LocaleSelect=Sele\u00e7\u00e3o de Idioma
-Title_Login=Efetue Login
-Title_Logout=Efetuar logout
-Title_MainPage=Menu Principal
-Title_NewUser=Registro de Novo Usu\u00e1rio
-Title_PasswordGuide=Guia de Senha
-Title_PasswordPolicy=Pol\u00edtica de Senha
-Title_PasswordStrength=For\u00e7a da Senha
-Title_PasswordWarning=Aviso de Senha
-Title_PeopleSearch=Pesquisa de Pessoas
-Title_PleaseWait=Aguarde
-Title_RandomPasswords=Senhas Aleat\u00f3rias
-Title_RecoverPassword=Senha Esquecida
-Title_RecoverRandomResponses=Perguntas Aleat\u00f3rias
-Title_RecoverRequiredResponses=Perguntas Obrigat\u00f3rias
-Title_SecurityResponses=Respostas de Seguran\u00e7a
-Title_SetupRandomResponses=Perguntas Aleat\u00f3rias
-Title_SetupRequiredResponses=Perguntas Obrigat\u00f3rias
-Title_SetupResponses=Configurar Respostas da Senha
-Title_SetupOtpSecret=Configurar Segredo OTP
-Title_Shortcuts=Atalhos
-Title_Success=Sucesso
-Title_TitleBar=@User:ID@  Autoatendimento de Senha
-Title_UpdateProfile=Atualizar Perfil
-Title_UpdateProfileConfirm=Confirmar Dados do Perfil
-Title_UserEventHistory=Hist\u00f3rico de Senhas
-Title_UserInformation=Informa\u00e7\u00f5es da Conta
-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 ou n\u00fameros</li><li>Use letras mai\u00fasculas e min\u00fasculas (mistas)</li><li>Adicione mais n\u00fameros</li><li>Adicione mais caracteres de s\u00edmbolo</li></ul>
-Value_False=Falso
-Value_True=Verdadeiro
-Value_NotApplicable=n/a
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Button_Activate=Ativar
+Button_Agree=Eu Concordo
+Button_Cancel=Cancelar
+Button_ChangePassword=Mudar Senha
+Button_ChangeResponses=Voltar
+Button_CheckCode=Verificar C\u00f3digo
+Button_ClearOtpReEnroll=Inscrever novamente dispositivo m\u00f3vel
+Button_HelpdeskClearOtpSecret=Limpar Segredo OTP
+Button_ClearResponses=Limpar Respostas
+Button_CloseWindow=Fechar Janela
+Button_Confirm=Confirmar
+Button_ConfirmResponses=Confirmar Respostas de Seguran\u00e7a
+Button_Continue=Continuar
+Button_Create=Criar
+Button_Delete=Apagar
+Button_Email=E-mail
+Button_GoBack=Voltar
+Button_Hide=Ocultar
+Button_Hide_Responses=Ocultar Respostas
+Button_Home=In\u00edcio
+Button_Login=Login
+Button_Logout=Efetuar logout
+Button_More=Mais...
+Button_OrgChart=Organograma
+Button_RecoverPassword=Verificar Respostas
+Button_Reset=Limpar
+Button_Search=Pesquisa
+Button_SetResponses=Salvar Repostas
+Button_Show=Mostrar
+Button_Show_Responses=Mostrar Respostas
+Button_Skip=Ignorar
+Button_SMS=SMS
+Button_Unlock=Desbloquear
+Button_UnlockPassword=Desbloquear Senha
+Button_Update=Atualizar
+Button_Verify=Verificar
+Button_OK=OK
+Display_ActivateUser=Para confirmar sua identidade, insira as informa\u00e7\u00f5es a seguir. Suas informa\u00e7\u00f5es ser\u00e3o usadas para localizar e ativar a conta do usu\u00e1rio.<p/>Conclua o processo ou sua conta n\u00e3o ser\u00e1 ativada adequadamente.
+Display_AutoGeneratedPassword=Gerar uma nova senha automaticamente
+Display_CapsLockIsOn=CAPS LOCK est\u00e1 ativado
+Display_Captcha=Conclua o processo de verifica\u00e7\u00e3o. Esse processo ajuda a proteger sua conta contra abusos.
+Display_CaptchaInputWords=Digite o texto exibido acima
+Display_CaptchaInputNumbers=Digite os n\u00fameros que ouvir
+Display_CaptchaGetAudio=Obter \u00e1udio CAPTCHA
+Display_CaptchaGetImage=Obter imagem CAPTCHA
+Display_CaptchaHelp=Ajuda
+Display_CaptchaRefresh=Atualizar
+Display_ChangePassword=Mude sua senha. Guarde a nova senha com seguran\u00e7a. Depois de digitar a nova senha, clique no bot\u00e3o Mudar Senha. Se precisar anot\u00e1-la, guarde-a em um lugar seguro. A nova senha deve atender os seguintes requisitos:
+Display_ChangePasswordForm=Insira os dados a seguir. Isso \u00e9 necess\u00e1rio para verificar sua identidade antes de voc\u00ea poder mudar a senha.
+Display_CheckingData=Verificando Dados...
+Display_CheckingPassword=Verificando Senha...
+Display_CheckingResponses=Verificando Respostas...
+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. No caso de esquecer a senha, ser\u00e1 poss\u00edvel acessar a conta informando as respostas a estas perguntas de seguran\u00e7a.
+Display_Day=dia
+Display_Days=dias
+Display_ErrorBody=Ocorreu um erro. Feche o browser e tente novamente mais tarde. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Display_ExpirationDate=Data de vencimento da conta (m\u00e1ximo de %1% dias)
+Display_FooterInfoText=
+Display_ForgottenPassword=Se voc\u00ea tiver esquecido sua senha, siga os prompts para redefini-la.
+Display_ForgottenUsername=Digite as informa\u00e7\u00f5es a seguir. Essas informa\u00e7\u00f5es ser\u00e3o usadas para pesquisar seu nome de usu\u00e1rio esquecido.
+Display_GuestRegistration=Para registrar uma nova conta de convidado, preencha as informa\u00e7\u00f5es a seguir.
+Display_GuestUpdate=Para atualizar uma conta de convidado, confirme e modifique as informa\u00e7\u00f5es a seguir.
+Display_Helpdesk=Insira os dados de pesquisa para o usu\u00e1rio.
+Display_Hour=hora
+Display_Hours=horas
+Display_IdleTimeout=Tempo de Espera por Inatividade:
+Display_IdleWarningMessage=A sess\u00e3o do browser est\u00e1 prestes a expirar. Clique em qualquer lugar na p\u00e1gina para reiniciar.
+Display_IdleWarningTitle=Tempo de Espera por Inatividade
+Display_JavascriptRequired=Javascript \u00e9 necess\u00e1rio para ver esta p\u00e1gina.
+Display_LeaveDirtyPasswordPage=Se voc\u00ea sair desta p\u00e1gina, a senha n\u00e3o ser\u00e1 alterada.
+Display_Login=
+Display_LoginPasswordOnly=Insira sua senha abaixo. Sua senha atual \u00e9 necess\u00e1ria para acessar o aplicativo.
+Display_Logout=<b>Voc\u00ea agora est\u00e1 desconectado.</b><p/>Feche todas as janelas do browser da Internet antes de tentar efetuar login novamente.
+Display_Minute=minuto
+Display_Minutes=minutos
+Display_NAAF_PASSWORD=Forne\u00e7a a senha de autentica\u00e7\u00e3o NAAF.
+Display_NAAF_LDAP_PASSWORD=Forne\u00e7a a senha de autentica\u00e7\u00e3o LDAP.
+Display_NAAF_SECURITY_QUESTIONS=Responda \u00e0s suas perguntas de seguran\u00e7a.
+Display_NAAF_EMAIL_OTP=Foi enviado um e-mail com uma senha para um \u00fanico uso.
+Display_NAAF_SMS_OTP=Foi enviada uma mensagem SMS com a senha para um \u00fanico uso.
+Display_NAAF_SMARTPHONE=O processo de verifica\u00e7\u00e3o de smartphone come\u00e7ou. Continue quando concluir.
+Display_NAAF_RADIUS=Forne\u00e7a a senha de autentica\u00e7\u00e3o RADIUS.
+Display_NAAF_TOTP=Digite o valor do TOTP.
+Display_NAAF_HOTP=Digite o valor do HOTP.
+Display_NAAF_VOICE=O processo de verifica\u00e7\u00e3o de voz come\u00e7ou. Continue quando concluir.
+Display_NewUser=Para registrar uma nova conta, preencha o formul\u00e1rio a seguir.
+Display_NewUserProfile=Para registrar uma nova conta, selecione um perfil.
+Display_PasswordExpired=Sua senha expirou. Voc\u00ea deve definir uma nova senha agora.
+Display_PasswordGeneration=As senhas a seguir foram geradas aleatoriamente para voc\u00ea. Essas senhas s\u00e3o baseadas em palavras reais para serem mais f\u00e1ceis de lembrar, mas foram modificadas para serem dif\u00edceis de adivinhar.
+Display_PasswordNoExpire=A senha n\u00e3o expira.
+Display_PasswordPrompt=Digite a nova senha.
+Display_PasswordStrengthHigh=For\u00e7a: <b>Forte</b>
+Display_PasswordStrengthLow=For\u00e7a: <b>Fraca</b>
+Display_PasswordStrengthMedium=For\u00e7a: <b>Boa</b>
+Display_PasswordReplicationStatus=Replica\u00e7\u00e3o de senha (progresso %1%)
+Display_PasswordWarn=<b>A sua senha expirar\u00e1 em breve</b>. Mude a senha logo para evitar problemas no acesso a este servi\u00e7o. <br/><br/>Sua senha expirar\u00e1 em %1%.
+Display_PeopleSearch=Digite sua consulta de pesquisa abaixo. Voc\u00ea pode pesquisar uma pessoa com base no nome, no endere\u00e7o de e-mail ou no n\u00famero de telefone.
+Display_PleaseWait=Carregando...
+Display_PleaseWaitNewUser=Sua nova conta foi configurada. Esse processo pode levar v\u00e1rios minutos, seja paciente.
+Display_PleaseWaitPassword=A senha est\u00e1 sendo alterada. 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.
+Display_RecoverTokenSendChoices=Para verificar sua identidade, ser\u00e1 enviado um c\u00f3digo de seguran\u00e7a a voc\u00ea. 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).
+Display_RecoverChoiceReset=Defina uma nova senha. Se tiver esquecido a senha e desejar obter uma nova, clique aqui. A conta tamb\u00e9m ser\u00e1 desbloqueada ao definir uma nova senha.
+Display_RecoverChoiceUnlock=Desbloqueie a sua conta. Se voc\u00ea lembrar sua senha, poder\u00e1 desbloquear a conta selecionando esta op\u00e7\u00e3o. Sua senha n\u00e3o ser\u00e1 alterada.
+Display_RecoverEnterCode=Para verificar sua identidade, um c\u00f3digo de seguran\u00e7a foi enviado a voc\u00ea. Clique no link no e-mail ou copie e cole o c\u00f3digo de seguran\u00e7a aqui.
+Display_RecoverEnterCodeSMS=Para verificar sua identidade, um c\u00f3digo de seguran\u00e7a foi enviado a voc\u00ea por SMS. Insira o c\u00f3digo de seguran\u00e7a da mensagem aqui.
+Display_RecoverPassword=Responda \u00e0s seguintes perguntas. Se respond\u00ea-las corretamente, poder\u00e1 redefinir sua senha.
+Display_RecoverPasswordChoices=Sua conta foi bloqueada devido a tentativas de login incorretas em excesso. Voc\u00ea pode continuar desbloqueando a conta ou alterando a senha.
+Display_RecoverRandomResponses=Voc\u00ea deve responder \u00e0s seguintes perguntas para continuar.
+Display_RecoverRequiredResponses=Estas perguntas s\u00e3o exigidas pelo seu administrador.
+Display_RecoverOTP=Para verificar sua identidade, use o dispositivo m\u00f3vel para gerar o c\u00f3digo de seguran\u00e7a.
+Display_RecoverOTPIdentified=Para verificar a identidade, use o dispositivo m\u00f3vel para gerar o c\u00f3digo de seguran\u00e7a. O ID de inscri\u00e7\u00e3o no dispositivo \u00e9 <b>%1%</b>.
+Display_ResponsesPrompt=Digite suas respostas de seguran\u00e7a
+Display_SelectionIndicator=Selecione um item de pergunta na lista
+Display_SearchCompleted=Pesquisa conclu\u00edda.
+Display_SearchResultsExceeded=Os resultados da pesquisa excedem o tamanho m\u00e1ximo da pesquisa.
+Display_SetRandomPasswordPrompt=Definir uma nova senha aleat\u00f3ria para este usu\u00e1rio?
+Display_SearchResultsNone=Nenhum resultado.
+Display_Second=segundo
+Display_Seconds=segundos
+Display_SetupHelpdeskResponses=<p>O administrador precisa que voc\u00ea forne\u00e7a as seguintes respostas. Essas respostas s\u00e3o usadas para verificar sua identidade no caso de contato com o suporte t\u00e9cnico para assist\u00eancia.</p>
+Display_SetupRandomResponses=
+Display_SetupRequiredResponses=
+Display_SetupResponses=<p>No caso de esquecer a senha, ser\u00e1 poss\u00edvel acessar a conta respondendo \u00e0s perguntas de seguran\u00e7a.</p><p>Escolha as perguntas e respostas a serem usadas para verificar sua identidade no caso de esquecimento da senha. Uma vez que as respostas a essas perguntas podem ser usadas para acessar a sua conta, forne\u00e7a respostas que n\u00e3o sejam f\u00e1ceis de adivinhar ou descobrir.</p>
+Display_SetupOtpSecret=Se esquecer a senha, \u00e9 poss\u00edvel acessar a conta usando o dispositivo m\u00f3vel. Siga as instru\u00e7\u00f5es abaixo com base no tipo de dispositivo.
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>Instale o aplicativo Google Authenticator para Android.</b><ol><li>No telefone, acesse a Google Play Store.</li><li>Pesquise <b>Google Authenticator</b>.<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">Fa\u00e7a o download da Google Play Store</a>)</li><li>Fa\u00e7a o download e instale o aplicativo.</li></ol><b>A seguir, abra e configure o Google Authenticator.</b><ol><li>No Google Authenticator, toque em Menu e selecione "Configurar conta".</li><li>Selecione "Ler um c\u00f3digo de barras".</li><li>Use a c\u00e2mera do telefone para ler esse c\u00f3digo de barras.</li><li>Depois de ter lido o c\u00f3digo de barras, clique no bot\u00e3o continuar.</li></ol>
+Display_SetupOtp_iPhone_Title=iPhone
+Display_SetupOtp_iPhone_Steps=<b>No iPhone, toque no \u00edcone App Store.</b><ol><li>No telefone, acesse a App Store.</li><li>Pesquise <b>Google Authenticator</b>.<br/>(<a target="itunesstore" href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">Fa\u00e7a o download da App Store</a>)</li><li>Toque no aplicativo e depois toque em Gratuito para download e instale.</li></ol><b>A seguir, abra e configure o Google Authenticator.</b><ol><li>No Google Authenticator, toque em "+" e em "Ler C\u00f3digo de Barras".</li><li>Use a c\u00e2mera do telefone para ler esse c\u00f3digo de barras.</li><li>Depois de ter lido o c\u00f3digo de barras, clique no bot\u00e3o continuar.</li></ol>
+Display_SetupOtp_Other_Title=Outro
+Display_SetupOtp_Other_Steps=<b>Encontre um aplicativo bifatorial compat\u00edvel.</b><ul><li>Tente pesquisar na loja de aplicativos do dispositivo o <b>Google Authenticator</b>.<br/>Muitos dispositivos possuem aplicativos compat\u00edveis.</li><li>Tente procurar um aplicativo com suporte para "<b>tokens de seguran\u00e7a TOTP"</b> ou "RFC6238"</li><li>Fa\u00e7a o download e instale o aplicativo.</li></ul><b>A seguir, abra e configure o aplicativo.</b><ol><li>Digite os dados abaixo ou leia o c\u00f3digo conforme as instru\u00e7\u00f5es do aplicativo.</li><li>Depois de ter configurado o aplicativo, clique no bot\u00e3o continuar.</li></ol>
+Display_WarnExistingOtpSecretTime=Voc\u00ea j\u00e1 inscreveu seu dispositivo em <span class="timestamp">%1%</span>.  \u00c9 poss\u00edvel testar o dispositivo atual digitando o c\u00f3digo gerado abaixo. Se continuar, ser\u00e1 poss\u00edvel 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, ser\u00e1 poss\u00edvel responder as 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 as perguntas novamente.
+Display_PleaseVerifyOtp=Digite o c\u00f3digo de verifica\u00e7\u00e3o de 6 d\u00edgitos do dispositivo. Se o dispositivo n\u00e3o estiver configurado para fornecer um c\u00f3digo de verifica\u00e7\u00e3o, volte para a p\u00e1gina anterior e configure-o.
+Display_OtpRecoveryInfo=Cada um desses c\u00f3digos de recupera\u00e7\u00e3o pode ser usado exatamente uma vez no caso de voc\u00ea n\u00e3o conseguir acessar seu telefone. <a class="pwm-link-print">Imprima esta p\u00e1gina</a> ou anote esses c\u00f3digos e guarde-os em um local seguro.
+Display_OtpClearWarning=Tem certeza de que deseja continuar? Se continuar, a inscri\u00e7\u00e3o atual ser\u00e1 apagada e ser\u00e1 preciso reconfigurar o dispositivo.
+Display_ResponsesClearWarning=Tem certeza de que deseja continuar? Se continuar, as respostas atuais ser\u00e3o apagadas e ser\u00e1 preciso responder novamente \u00e0s perguntas de seguran\u00e7a.
+Display_Shortcuts=Selecione qualquer um dos links a seguir para continuar.
+Display_ShowPasswordGuide=Guia de Senha
+Display_StrengthMeter=For\u00e7a da Senha
+Display_UpdateProfile=Atualize as informa\u00e7\u00f5es a seguir:
+Display_UpdateProfileConfirm=Confira as seguintes informa\u00e7\u00f5es inseridas e confirme.
+Display_UserEventHistory=Esta p\u00e1gina mostra o hist\u00f3rico de evento de senha. Somente as a\u00e7\u00f5es realizadas com este aplicativo s\u00e3o mostradas aqui. Todos os hor\u00e1rios listados est\u00e3o no fuso hor\u00e1rio %1%.
+Display_TypingWait=Aguardando a digita\u00e7\u00e3o ser conclu\u00edda...
+Field_AccountEnabled=Conta Habilitada
+Field_AccountExpired=Conta Expirada
+Field_AccountExpirationTime=Hor\u00e1rio de Vencimento da Conta
+Field_Code=C\u00f3digo
+Field_OneTimePassword=Senha para um \u00fanico uso
+Field_Confirm_Prefix=Confirmar
+Field_ConfirmPassword=Confirmar Senha
+Field_CurrentPassword=Senha Atual
+Field_Display=Exibir
+Field_ForwardURL=Encaminhar URL
+Field_LastLoginTime=Hor\u00e1rio do \u00daltimo Login
+Field_LastLoginTimeDelta=Delta do Hor\u00e1rio do \u00daltimo Login
+Field_LdapProfile=Perfil LDAP
+Field_Location=Localiza\u00e7\u00e3o
+Field_LogoutURL=Efetuar Logout do URL
+Field_NetworkAddress=Endere\u00e7o de Rede
+Field_NetworkHost=Host de Rede
+Field_NewPassword=Nova Senha
+Field_Option_Select=Selecione uma pergunta
+Field_Password=Senha Atual
+Field_PasswordExpirationTime=Hor\u00e1rio de Vencimento da Senha
+Field_PasswordExpired=Senha Expirada
+Field_PasswordLocked=Senha Bloqueada (Detec\u00e7\u00e3o de Intruso)
+Field_PasswordPreExpired=Senha Pr\u00e9-expirada
+Field_PasswordSetTime=Tempo de Defini\u00e7\u00e3o da Senha
+Field_PasswordSetTimeDelta=Delta do Hor\u00e1rio de Defini\u00e7\u00e3o da Senha
+Field_PasswordViolatesPolicy=Viola a Pol\u00edtica de Senha
+Field_PasswordWithinWarningPeriod=Dentro do Per\u00edodo de Aviso
+Field_Policy=Pol\u00edtica
+Field_Profile=Perfil
+Field_ResponsesNeeded=Atualiza\u00e7\u00f5es da Resposta s\u00e3o Necess\u00e1rias
+Field_ResponsesStored=Respostas Armazenadas
+Field_ResponsesTimestamp=Marca\u00e7\u00e3o de Hor\u00e1rio das Respostas Armazenadas
+Field_User_Supplied_Question=Pergunta
+Field_UserDN=DN do Usu\u00e1rio
+Field_UserGUID=GUID do Usu\u00e1rio
+Field_Username=Nome de usu\u00e1rio
+Field_UserEmail=E-mail
+Field_UserSMS=SMS
+Field_OTP_Identifier=Identificador
+Field_OTP_Secret=Segredo
+Field_OTP_Type=Tipo
+Field_OTP_RecoveryCodes=C\u00f3digos de recupera\u00e7\u00e3o
+Field_OTP_Stored=OTP Armazenado
+Field_OTP_Timestamp=Tempo do OTP Armazenado
+Field_VerificationMethodPreviousAuth=Autentica\u00e7\u00e3o Anterior
+Field_VerificationMethodToken=Verifica\u00e7\u00e3o por SMS/E-mail
+Field_VerificationMethodOTP=Verifica\u00e7\u00e3o de Dispositivo M\u00f3vel
+Field_VerificationMethodChallengeResponses=Perguntas e Respostas Secretas
+Field_VerificationMethodAttributes=Dados Pessoais
+Field_VerificationMethodRemoteResponses=Respostas Externas
+Field_VerificationMethodNAAF=Autentica\u00e7\u00e3o Avan\u00e7ada
+Long_Title_ActivateUser=Ative uma conta pr\u00e9-configurada e estabele\u00e7a uma nova senha.
+Long_Title_Admin=Fun\u00e7\u00f5es administrativas
+Long_Title_ChangePassword=Mude sua senha atual.
+Long_Title_ForgottenPassword=Recupere o acesso \u00e0 sua conta caso tenha esquecido a senha.
+Long_Title_ForgottenUsername=Localize o nome de usu\u00e1rio esquecido.
+Long_Title_GuestRegistration=Registre uma nova conta do usu\u00e1rio convidado.
+Long_Title_GuestUpdate=Atualize nova conta do usu\u00e1rio convidado.
+Long_Title_Helpdesk=Ferramentas do suporte t\u00e9cnico
+Long_Title_Logout=Efetue o logout do aplicativo de autoatendimento de senha.
+Long_Title_Main_Menu=Menu principal de autoatendimento de senha. A partir daqui, \u00e9 poss\u00edvel mudar a senha atual, redefinir uma senha esquecida ou realizar outras atividades relacionadas \u00e0 senha.
+Long_Title_NewUser=Crie uma nova conta do usu\u00e1rio.
+Long_Title_PeopleSearch=Pesquise informa\u00e7\u00f5es de contato para seus colegas.
+Long_Title_SetupResponses=Configure suas perguntas e respostas de seguran\u00e7a para senha esquecida. Essas respostas secretas permitir\u00e3o recuperar uma senha esquecida.
+Long_Title_SetupOtpSecret=Configure o dispositivo do aplicativo m\u00f3vel. Se esquecer a senha, \u00e9 poss\u00edvel usar o dispositivo m\u00f3vel para autentica\u00e7\u00e3o nesse site.
+Long_Title_Shortcuts=Personalize atalhos.
+Long_Title_UpdateProfile=Atualize dados do perfil de usu\u00e1rio.
+Long_Title_UserEventHistory=Hist\u00f3rico de evento de senha. Veja quando voc\u00ea mudou sua senha no passado.
+Long_Title_UserInformation=Informa\u00e7\u00f5es sobre sua senha e pol\u00edticas de senha.
+Title_AnsweredQuestions=Perguntas Respondidas
+Title_ActivateUser=Ativar Conta
+Title_Admin=Administra\u00e7\u00e3o
+Title_Application=NetIQ Self Service Password Reset
+Title_Captcha=Verifica\u00e7\u00e3o
+Title_ChangePassword=Mudar Senha
+Title_ConfirmResponses=Confirmar Perguntas de Seguran\u00e7a
+Title_Error=Erro
+Title_ForgottenPassword=Senha Esquecida
+Title_ForgottenUsername=Nome de Usu\u00e1rio Esquecido
+Title_GuestRegistration=Registro de Convidado
+Title_GuestUpdate=Atualizar Usu\u00e1rio Convidado
+Title_Helpdesk=Suporte T\u00e9cnico
+Title_LocaleSelect=Sele\u00e7\u00e3o de Idioma
+Title_Login=Efetue Login
+Title_Logout=Efetuar logout
+Title_MainPage=Menu Principal
+Title_NewUser=Registro de Novo Usu\u00e1rio
+Title_OrgChart=Organograma
+Title_PasswordGuide=Guia de Senha
+Title_PasswordPolicy=Pol\u00edtica de Senha
+Title_PasswordStrength=For\u00e7a da Senha
+Title_PasswordWarning=Aviso de Senha
+Title_PeopleSearch=Pesquisa de Pessoas
+Title_PleaseWait=Aguarde
+Title_RandomPasswords=Senhas Aleat\u00f3rias
+Title_RecoverPassword=Senha Esquecida
+Title_RecoverRandomResponses=Perguntas Aleat\u00f3rias
+Title_RecoverRequiredResponses=Perguntas Obrigat\u00f3rias
+Title_SecurityResponses=Respostas de Seguran\u00e7a
+Title_SetupRandomResponses=Perguntas Aleat\u00f3rias
+Title_SetupRequiredResponses=Perguntas Obrigat\u00f3rias
+Title_SetupResponses=Configurar Perguntas de Seguran\u00e7a
+Title_SetupOtpSecret=Configurar Autentica\u00e7\u00e3o do Aplicativo M\u00f3vel
+Title_Shortcuts=Atalhos
+Title_Status=Status
+Title_Success=Sucesso
+Title_TitleBar=@User:ID@  Autoatendimento de Senha
+Title_UpdateProfile=Atualizar Perfil
+Title_UpdateProfileConfirm=Confirmar Dados do Perfil
+Title_UserEventHistory=Hist\u00f3rico de Senhas
+Title_UserInformation=Minha Conta
+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 ou n\u00fameros</li><li>Use letras mai\u00fasculas e min\u00fasculas (mistas)</li><li>Adicione mais n\u00fameros</li><li>Adicione mais caracteres de s\u00edmbolo</li></ul>
+Confirm_DeleteUser=Tem certeza de que deseja continuar? Se continuar, o usu\u00e1rio selecionado ser\u00e1 exclu\u00eddo permanentemente. Isso n\u00e3o pode ser desfeito.
+Confirm=Tem certeza de que deseja continuar?
+Value_False=Falso
+Value_True=Verdadeiro
+Value_NotApplicable=n/a
+Value_Default=Padr\u00e3o

+ 41 - 6
pwm/servlet/src/password/pwm/i18n/Display_sv.properties

@@ -26,13 +26,16 @@ Button_Cancel=Avbryt
 Button_ChangePassword=\u00c4ndra l\u00f6senord
 Button_ChangeResponses=Bak\u00e5t
 Button_CheckCode=Kontrollera kod
-Button_ClearOtpSecret=Rensa secret f\u00f6r eng\u00e5ngsl\u00f6senord
+Button_ClearOtpReEnroll=Registrera om mobil enhet
+Button_HelpdeskClearOtpSecret=Rensa secret f\u00f6r eng\u00e5ngsl\u00f6senord
 Button_ClearResponses=Rensa svar
 Button_CloseWindow=St\u00e4ng f\u00f6nster
 Button_Confirm=Bekr\u00e4fta
 Button_ConfirmResponses=Bekr\u00e4fta svar p\u00e5 s\u00e4kerhetsfr\u00e5gor
 Button_Continue=Forts\u00e4tt
 Button_Create=Skapa
+Button_Delete=Ta bort
+Button_Email=E-post
 Button_GoBack=Bak\u00e5t
 Button_Hide=D\u00f6lj
 Button_Hide_Responses=D\u00f6lj svar
@@ -40,12 +43,15 @@ Button_Home=Hem
 Button_Login=Logga in
 Button_Logout=Logga ut
 Button_More=Mer
+Button_OrgChart=Organisationsschema
 Button_RecoverPassword=Kontrollera svar
 Button_Reset=Rensa
 Button_Search=S\u00f6k
 Button_SetResponses=Spara svar
 Button_Show=Visa
 Button_Show_Responses=Visa svar
+Button_Skip=Hoppa \u00f6ver
+Button_SMS=SMS
 Button_Unlock=L\u00e5s upp
 Button_UnlockPassword=L\u00e5s upp l\u00f6senordet
 Button_Update=Uppdatera
@@ -54,8 +60,8 @@ Button_OK=OK
 Display_ActivateUser=Du bekr\u00e4ftar din identitet genom att ange f\u00f6ljande information. Din information anv\u00e4nds f\u00f6r att hitta och aktivera ditt anv\u00e4ndarkonto.<p/>Du m\u00e5ste slutf\u00f6ra processen, annars aktiveras inte ditt konto korrekt.
 Display_AutoGeneratedPassword=Skapa ett nytt l\u00f6senord automatiskt
 Display_CapsLockIsOn=CAPS LOCK \u00e4r aktiverat
-Display_Captcha=Ange verifieringskoden nedan. Att ange koden hj\u00e4lper till att skydda ditt konto fr\u00e5n missbruk.
-Display_CaptchaInputWords=Ange de tv\u00e5 ord som visas ovan
+Display_Captcha=Slutf\u00f6r verifieringsprocessen. Processen hj\u00e4lper till att skydda ditt konto fr\u00e5n missbruk.
+Display_CaptchaInputWords=Ange den text som visas ovan
 Display_CaptchaInputNumbers=Ange de tal du h\u00f6r
 Display_CaptchaGetAudio=F\u00e5 en ljud-CAPTCHA
 Display_CaptchaGetImage=F\u00e5 en bild-CAPTCHA
@@ -83,13 +89,25 @@ Display_Hours=timmar
 Display_IdleTimeout=Timeout vid inaktivitet:
 Display_IdleWarningMessage=Din webbl\u00e4sarsession h\u00e5ller p\u00e5 att n\u00e5 tidsgr\u00e4nsen. 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.
 Display_LeaveDirtyPasswordPage=Om du l\u00e4mnar den h\u00e4r sidan kommer ditt l\u00f6senord inte att \u00e4ndras.
 Display_Login=
 Display_LoginPasswordOnly=Ange ditt l\u00f6senord nedan. Ditt nuvarande l\u00f6senord kr\u00e4vs f\u00f6r att det ska g\u00e5 att komma \u00e5t det h\u00e4r programmet.
 Display_Logout=<b>Nu \u00e4r du utloggad.</b><p/>St\u00e4ng alla webbl\u00e4sarf\u00f6nster innan du f\u00f6rs\u00f6ker logga in igen.
 Display_Minute=minut
 Display_Minutes=minuter
+Display_NAAF_PASSWORD=Ange ditt NAAF-autentiseringsl\u00f6senord.
+Display_NAAF_LDAP_PASSWORD=Ange ditt LDAP-autentiseringsl\u00f6senord.
+Display_NAAF_SECURITY_QUESTIONS=Svara p\u00e5 dina s\u00e4kerhetsfr\u00e5gor.
+Display_NAAF_EMAIL_OTP=Ett e-postmeddelande har skickats med ditt eng\u00e5ngsl\u00f6senord.
+Display_NAAF_SMS_OTP=Ett SMS har skickats med ditt eng\u00e5ngsl\u00f6senord.
+Display_NAAF_SMARTPHONE=Processen f\u00f6r att verifiera din smartphone har p\u00e5b\u00f6rjats. Tryck p\u00e5 Forts\u00e4tt n\u00e4r du \u00e4r klar.
+Display_NAAF_RADIUS=Ange ditt RADIUS-autentiseringsl\u00f6senord.
+Display_NAAF_TOTP=Ange ditt TOTP-v\u00e4rde.
+Display_NAAF_HOTP=Ange ditt HOTP-v\u00e4rde.
+Display_NAAF_VOICE=R\u00f6stverifieringen har startats. Forts\u00e4tt n\u00e4r du \u00e4r klar,.
 Display_NewUser=Du registrerar ett konto genom att fylla i f\u00f6ljande formul\u00e4r.
+Display_NewUserProfile=Om du vill registrera ett nytt konto v\u00e4ljer du f\u00f6rst en profil.
 Display_PasswordExpired=Ditt l\u00f6senord har g\u00e5tt ut. Du m\u00e5ste ange ett nytt nu.
 Display_PasswordGeneration=F\u00f6ljande l\u00f6senord har genererats slumpm\u00e4ssigt \u00e5t dig. Dessa l\u00f6senord \u00e4r baserade p\u00e5 verkliga ord f\u00f6r att de ska bli l\u00e4ttare att komma ih\u00e5g, men har \u00e4ndrats s\u00e5 att de ska bli sv\u00e5rare att gissa.
 Display_PasswordNoExpire=Ditt l\u00f6senord g\u00e5r inte ut.
@@ -104,6 +122,10 @@ 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 n\u00e5gon av f\u00f6ljande metoder f\u00f6r att verifiera din identitet.
+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).
 Display_RecoverChoiceReset=Ange ett nytt l\u00f6senord. Om du har gl\u00f6mt bort ditt l\u00f6senord och vill ange ett nytt klickar du h\u00e4r. Ditt konto kommer ocks\u00e5 att l\u00e5sas upp n\u00e4r du anger ett nytt l\u00f6senord.
 Display_RecoverChoiceUnlock=L\u00e5s upp ditt konto. Om du kommer ih\u00e5g l\u00f6senordet kan du l\u00e5sa upp kontot med det h\u00e4r alternativet. Ditt l\u00f6senord \u00e4ndras inte.
 Display_RecoverEnterCode=F\u00f6r att verifiera din identitet har en s\u00e4kerhetskod skickats till dig. Klicka p\u00e5 l\u00e4nken i e-postmeddelandet eller kopiera och klistra in s\u00e4kerhetskoden h\u00e4r.
@@ -137,7 +159,8 @@ Display_WarnExistingOtpSecretTime=Du har redan registrerat din enhet <span class
 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.
-Display_PleaseVerifyOtp=Ange den sexsiffriga verifieringskoden f\u00f6r din enhet. Om din enhet inte har konfigurerats f\u00f6r att ge dig en verifieringskod g\u00e5r du tillbaka till f\u00f6reg\u00e5ende sida och konfigurerar enheten.
+Display_PleaseVerifyOtp=Ange den sexsiffriga verifieringskoden fr\u00e5n din enhet. Om din enhet inte har konfigurerats f\u00f6r att ge dig en verifieringskod g\u00e5r du tillbaka till f\u00f6reg\u00e5ende sida och konfigurerar enheten.
+Display_OtpRecoveryInfo=Var och en av dessa \u00e5terst\u00e4llningskoder kan anv\u00e4ndas exakt en g\u00e5ng om du inte kan komma \u00e5t din telefon. Kom ih\u00e5g att <a class="pwm-link-print">skriva ut den h\u00e4r sidan</a> eller p\u00e5 n\u00e5got annat s\u00e4tt skriva ned dessa koder, och f\u00f6rvara dem p\u00e5 en s\u00e4ker plats.
 Display_OtpClearWarning=\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta? Om du forts\u00e4tter raderas din befintliga registrering och du m\u00e5ste konfigurera din enhet igen.
 Display_ResponsesClearWarning=\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta? Om du forts\u00e4tter raderas dina befintliga svar och du m\u00e5ste svara p\u00e5 dina s\u00e4kerhetsfr\u00e5gor igen.
 Display_Shortcuts=V\u00e4lj n\u00e5gon av f\u00f6ljande l\u00e4nkar f\u00f6r att forts\u00e4tta.
@@ -148,6 +171,8 @@ Display_UpdateProfileConfirm=Granska den information du har angett och bekr\u00e
 Display_UserEventHistory=Den h\u00e4r sidan visar h\u00e4ndelsehistoriken f\u00f6r ditt l\u00f6senord. Den visar endast \u00e5tg\u00e4rder som utf\u00f6rts med det h\u00e4r programmet. Alla klockslag som anges \u00e4r enligt tidszonen %1%.
 Display_TypingWait=V\u00e4ntar p\u00e5 att tangentbordstryckningarna ska slutf\u00f6ras....
 Field_AccountEnabled=Kontot \u00e4r aktiverat
+Field_AccountExpired=Kontot har g\u00e5tt ut
+Field_AccountExpirationTime=Kontots utg\u00e5ngstid
 Field_Code=Kod
 Field_OneTimePassword=Eng\u00e5ngsl\u00f6senord
 Field_Confirm_Prefix=Bekr\u00e4fta
@@ -183,12 +208,20 @@ Field_UserDN=Anv\u00e4ndar-DN
 Field_UserGUID=Anv\u00e4ndar-GUID
 Field_Username=Anv\u00e4ndarnamn
 Field_UserEmail=E-post
+Field_UserSMS=SMS
 Field_OTP_Identifier=Identifierare
 Field_OTP_Secret=Secret
 Field_OTP_Type=Typ
 Field_OTP_RecoveryCodes=\u00c5terst\u00e4llningskoder
 Field_OTP_Stored=Eng\u00e5ngsl\u00f6senordet har lagrats
 Field_OTP_Timestamp=Eng\u00e5ngsl\u00f6senordet lagrades kl.
+Field_VerificationMethodPreviousAuth=F\u00f6reg\u00e5ende autentisering
+Field_VerificationMethodToken=Verifiering via SMS/e-post
+Field_VerificationMethodOTP=Mobilenhetsverifiering
+Field_VerificationMethodChallengeResponses=Hemliga fr\u00e5gor och svar
+Field_VerificationMethodAttributes=Personliga data
+Field_VerificationMethodRemoteResponses=Externa svar
+Field_VerificationMethodNAAF=Avancerad autentisering
 Long_Title_ActivateUser=Aktivera ett f\u00f6rkonfigurerat konto och ange ett nytt l\u00f6senord.
 Long_Title_Admin=Administrativa funktioner
 Long_Title_ChangePassword=\u00c4ndra ditt nuvarande l\u00f6senord.
@@ -201,7 +234,7 @@ Long_Title_Logout=Logga ut fr\u00e5n programmet f\u00f6r sj\u00e4lvbetj\u00e4nin
 Long_Title_Main_Menu=Huvudmeny f\u00f6r sj\u00e4lvbetj\u00e4ning f\u00f6r l\u00f6senord. H\u00e4rifr\u00e5n kan du \u00e4ndra ditt nuvarande l\u00f6senord, \u00e5terst\u00e4lla ett bortgl\u00f6mt l\u00f6senord eller utf\u00f6ra andra aktiviteter relaterade till l\u00f6senord.
 Long_Title_NewUser=Skapa ett nytt anv\u00e4ndarkonto.
 Long_Title_PeopleSearch=Sl\u00e5 upp kontaktinformation f\u00f6r dina kollegor.
-Long_Title_SetupResponses=Ange svar f\u00f6r bortgl\u00f6mt l\u00f6senord. Med dessa hemliga svar kan du \u00e5terst\u00e4lla ditt l\u00f6senord om du gl\u00f6mmer det.
+Long_Title_SetupResponses=Ange s\u00e4kerhetsfr\u00e5gor och svar f\u00f6r bortgl\u00f6mt l\u00f6senord. Med dessa hemliga svar kan du \u00e5terst\u00e4lla ditt l\u00f6senord om du gl\u00f6mmer det.
 Long_Title_SetupOtpSecret=Installera en mobilapp. Om du gl\u00f6mmer ditt l\u00f6senord kan du anv\u00e4nda din mobila enhet f\u00f6r att autentisera dig f\u00f6r den h\u00e4r webbplatsen.
 Long_Title_Shortcuts=Personliga genv\u00e4gar.
 Long_Title_UpdateProfile=Uppdatera data om din anv\u00e4ndarprofil.
@@ -217,7 +250,7 @@ Title_ConfirmResponses=Bekr\u00e4fta s\u00e4kerhetsfr\u00e5gor
 Title_Error=Fel
 Title_ForgottenPassword=Gl\u00f6mt l\u00f6senordet
 Title_ForgottenUsername=Gl\u00f6mt anv\u00e4ndarnamnet
-Title_GuestRegistration=Registrera g\u00e4stanv\u00e4ndare
+Title_GuestRegistration=G\u00e4stregistrering
 Title_GuestUpdate=Uppdatera g\u00e4stanv\u00e4ndare
 Title_Helpdesk=Supportavdelningen
 Title_LocaleSelect=Val av plats
@@ -225,6 +258,7 @@ Title_Login=Logga in
 Title_Logout=Logga ut
 Title_MainPage=Huvudmeny
 Title_NewUser=Registrering av ny anv\u00e4ndare
+Title_OrgChart=Organisationsschema
 Title_PasswordGuide=L\u00f6senordsguide
 Title_PasswordPolicy=L\u00f6senordspolicy
 Title_PasswordStrength=L\u00f6senordets styrka
@@ -250,6 +284,7 @@ Title_UserEventHistory=L\u00f6senordshistorik
 Title_UserInformation=Mitt konto
 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>
 Confirm_DeleteUser=\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta? Om du forts\u00e4tter raderas den markerade anv\u00e4ndaren permanent. Denna \u00e5tg\u00e4rd g\u00e5r inte att \u00e5ngra.
+Confirm=\u00c4r du s\u00e4ker p\u00e5 att du vill forts\u00e4tta?
 Value_False=Falskt
 Value_True=Sant
 Value_NotApplicable=ej till\u00e4mpligt

+ 291 - 230
pwm/servlet/src/password/pwm/i18n/Display_zh_TW.properties

@@ -1,230 +1,291 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2015 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Button_Activate=\u555f\u52d5
-Button_Agree=\u6211\u540c\u610f
-Button_Cancel=\u53d6\u6d88
-Button_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
-Button_ChangeResponses=\u8fd4\u56de
-Button_CheckCode=\u6aa2\u67e5\u9a57\u8b49\u78bc
-Button_HelpdeskClearOtpSecret=\u6e05\u9664 OTP \u6a5f\u5bc6
-Button_ClearResponses=\u6e05\u9664\u56de\u61c9
-Button_CloseWindow=\u95dc\u9589\u8996\u7a97
-Button_Confirm=\u78ba\u8a8d
-Button_ConfirmResponses=\u78ba\u8a8d\u56de\u61c9
-Button_Continue=\u7e7c\u7e8c
-Button_Create=\u5efa\u7acb
-Button_GoBack=\u8fd4\u56de
-Button_Hide=\u96b1\u85cf
-Button_Hide_Responses=\u96b1\u85cf\u56de\u61c9
-Button_Home=\u9996\u9801
-Button_Login=\u767b\u5165
-Button_Logout=\u767b\u51fa
-Button_More=\u66f4\u591a
-Button_RecoverPassword=\u6aa2\u67e5\u56de\u61c9
-Button_Reset=\u6e05\u9664
-Button_Search=\u641c\u5c0b
-Button_SetResponses=\u5132\u5b58\u56de\u61c9
-Button_Show=\u986f\u793a
-Button_Show_Responses=\u986f\u793a\u56de\u61c9
-Button_Unlock=\u89e3\u9664\u9396\u5b9a
-Button_UnlockPassword=\u89e3\u9664\u9396\u5b9a\u5bc6\u78bc
-Button_Update=\u66f4\u65b0
-Button_Verify=\u78ba\u8a8d
-Button_OK=\u78ba\u5b9a
-Display_ActivateUser=\u82e5\u8981\u78ba\u8a8d\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002\u7cfb\u7d71\u5c07\u4f7f\u7528\u60a8\u7684\u8cc7\u8a0a\u627e\u51fa\u4e26\u555f\u52d5\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002<p/>\u8acb\u52d9\u5fc5\u5b8c\u6210\u7a0b\u5e8f\uff0c\u5426\u5247\u5c07\u7121\u6cd5\u6b63\u78ba\u555f\u52d5\u60a8\u7684\u5e33\u6236\u3002
-Display_AutoGeneratedPassword=\u81ea\u52d5\u7522\u751f\u65b0\u5bc6\u78bc
-Display_CapsLockIsOn=CAPS LOCK \u958b\u555f
-Display_Captcha=\u8acb\u5728\u4e0b\u65b9\u8f38\u5165\u9a57\u8b49\u78bc\u3002\u8f38\u5165\u6b64\u9a57\u8b49\u78bc\u6709\u52a9\u65bc\u4fdd\u8b77\u60a8\u7684\u5e33\u6236\u514d\u53d7\u4ed6\u4eba\u6feb\u7528\u3002
-Display_CaptchaInputWords=\u8f38\u5165\u4e0a\u65b9\u986f\u793a\u7684\u5169\u500b\u5b57
-Display_CaptchaInputNumbers=\u8f38\u5165\u60a8\u807d\u5230\u7684\u6578\u5b57
-Display_CaptchaGetAudio=\u53d6\u5f97\u97f3\u8a0a CAPTCHA
-Display_CaptchaGetImage=\u53d6\u5f97\u5f71\u50cf CAPTCHA
-Display_CaptchaHelp=\u8aaa\u660e
-Display_CaptchaRefresh=\u91cd\u65b0\u6574\u7406
-Display_ChangePassword=\u8acb\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002\u8acb\u4fdd\u6301\u65b0\u5bc6\u78bc\u7684\u5b89\u5168\u6027\u3002\u8f38\u5165\u60a8\u7684\u65b0\u5bc6\u78bc\u5f8c\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u8b8a\u66f4\u5bc6\u78bc\u300d\u6309\u9215\u3002\u5982\u679c\u60a8\u5fc5\u9808\u5beb\u4e0b\u65b0\u5bc6\u78bc\uff0c\u8acb\u52d9\u5fc5\u653e\u5728\u5b89\u5168\u7684\u4f4d\u7f6e\u3002\u60a8\u7684\u65b0\u5bc6\u78bc\u5fc5\u9808\u7b26\u5408\u4e0b\u5217\u8981\u6c42\uff1a
-Display_ChangePasswordForm=\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u6599\u3002\u7cfb\u7d71\u5fc5\u9808\u5148\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u60a8\u624d\u80fd\u8b8a\u66f4\u5bc6\u78bc\u3002
-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_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\u9700\u8981\u5728\u4e0b\u65b9\u554f\u984c\u4e2d\u8f38\u5165\u5b8c\u5168\u6b63\u78ba\u7684\u7b54\u6848\u3002
-Display_Day=\u5929
-Display_Days=\u5929
-Display_ErrorBody=\u767c\u751f\u932f\u8aa4\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u4e26\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Display_ExpirationDate=\u5e33\u6236\u904e\u671f\u65e5 (\u6700\u591a %1% \u5929)
-Display_FooterInfoText=
-Display_ForgottenPassword=\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u8acb\u4f9d\u7167\u63d0\u793a\u91cd\u8a2d\u5bc6\u78bc\u3002
-Display_ForgottenUsername=\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002\u7cfb\u7d71\u5c07\u4f7f\u7528\u6b64\u8cc7\u8a0a\u67e5\u95b1\u60a8\u5fd8\u8a18\u7684\u4f7f\u7528\u8005\u540d\u7a31\u3002
-Display_GuestRegistration=\u82e5\u8981\u8a3b\u518a\u65b0\u7684\u8a2a\u5ba2\u5e33\u6236\uff0c\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002
-Display_GuestUpdate=\u82e5\u8981\u66f4\u65b0\u8a2a\u5ba2\u5e33\u6236\uff0c\u8acb\u6aa2\u67e5\u4e26\u4fee\u6539\u4e0b\u5217\u8cc7\u8a0a\u3002
-Display_Helpdesk=\u8acb\u8f38\u5165\u4f7f\u7528\u8005\u7684\u641c\u5c0b\u8cc7\u6599\u3002
-Display_Hour=\u5c0f\u6642
-Display_Hours=\u5c0f\u6642
-Display_IdleTimeout=\u9592\u7f6e\u903e\u6642\uff1a
-Display_IdleWarningMessage=\u60a8\u7684\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u5373\u5c07\u903e\u6642\u3002\u8acb\u6309\u4e00\u4e0b\u6b64\u9801\u9762\u4e0a\u7684\u4efb\u4f55\u4f4d\u7f6e\u4ee5\u7e7c\u7e8c\u3002
-Display_IdleWarningTitle=\u9592\u7f6e\u903e\u6642
-Display_LeaveDirtyPasswordPage=\u5982\u679c\u60a8\u96e2\u958b\u6b64\u9801\u9762\uff0c\u7cfb\u7d71\u5c07\u4e0d\u6703\u8b8a\u66f4\u5bc6\u78bc\u3002
-Display_Login=
-Display_LoginPasswordOnly=\u8acb\u5728\u4e0b\u65b9\u8f38\u5165\u60a8\u7684\u5bc6\u78bc\u3002\u9700\u8981\u60a8\u76ee\u524d\u7684\u5bc6\u78bc\u624d\u80fd\u5b58\u53d6\u6b64\u61c9\u7528\u7a0b\u5f0f\u3002
-Display_Logout=<b>\u60a8\u73fe\u5728\u5df2\u767b\u51fa\u3002</b><p/>\u8acb\u5148\u95dc\u9589\u6240\u6709\u7db2\u969b\u7db2\u8def\u700f\u89bd\u5668\u8996\u7a97\uff0c\u518d\u5617\u8a66\u767b\u5165\u3002
-Display_Minute=\u5206\u9418
-Display_Minutes=\u5206\u9418
-Display_NewUser=\u82e5\u8981\u8a3b\u518a\u65b0\u5e33\u6236\uff0c\u8acb\u5b8c\u6210\u4e0b\u5217\u8868\u55ae\u3002
-Display_PasswordExpired=\u60a8\u7684\u5bc6\u78bc\u5df2\u904e\u671f\u3002\u60a8\u5fc5\u9808\u7acb\u5373\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u3002
-Display_PasswordGeneration=\u5df2\u70ba\u60a8\u96a8\u6a5f\u7522\u751f\u4e0b\u5217\u5bc6\u78bc\u3002\u70ba\u65b9\u4fbf\u60a8\u8a18\u61b6\uff0c\u7cfb\u7d71\u4ee5\u5be6\u969b\u7684\u6587\u5b57\u70ba\u57fa\u790e\u7522\u751f\u9019\u4e9b\u5bc6\u78bc\uff0c\u4e26\u7a0d\u52a0\u4fee\u6539\u63d0\u9ad8\u731c\u6e2c\u96e3\u5ea6\u3002
-Display_PasswordNoExpire=\u60a8\u7684\u5bc6\u78bc\u4e0d\u6703\u904e\u671f\u3002
-Display_PasswordPrompt=\u8acb\u8f38\u5165\u60a8\u7684\u65b0\u5bc6\u78bc
-Display_PasswordStrengthHigh=\u6548\u529b\uff1a<b>\u5f37</b>
-Display_PasswordStrengthLow=\u6548\u529b\uff1a<b>\u5f31</b>
-Display_PasswordStrengthMedium=\u6548\u529b\uff1a<b>\u4f73</b>
-Display_PasswordReplicationStatus=\u5bc6\u78bc\u8907\u88fd (\u9032\u5ea6 %1%)
-Display_PasswordWarn=<b>\u60a8\u7684\u5bc6\u78bc\u5373\u5c07\u904e\u671f</b>\u3002\u8acb\u7acb\u5373\u8b8a\u66f4\u5bc6\u78bc\uff0c\u4ee5\u907f\u514d\u5728\u5b58\u53d6\u6b64\u670d\u52d9\u6642\u767c\u751f\u554f\u984c\u3002<br/><br/>\u60a8\u7684\u5bc6\u78bc\u5c07\u65bc %1% \u904e\u671f\u3002
-Display_PeopleSearch=\u8acb\u5728\u4e0b\u65b9\u8f38\u5165\u60a8\u7684\u641c\u5c0b\u67e5\u8a62\u3002\u60a8\u53ef\u4ee5\u6839\u64da\u540d\u7a31\u3001\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u6216\u96fb\u8a71\u865f\u78bc\u641c\u5c0b\u4eba\u54e1\u3002
-Display_PleaseWait=\u8acb\u7a0d\u5019...
-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_RecoverChoiceReset=\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u3002\u5982\u679c\u60a8\u5df2\u5fd8\u8a18\u5bc6\u78bc\u4e14\u60f3\u8981\u8a2d\u5b9a\u65b0\u5bc6\u78bc\uff0c\u8acb\u6309\u4e00\u4e0b\u9019\u88e1\u3002\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u6642\uff0c\u7cfb\u7d71\u4e5f\u6703\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002
-Display_RecoverChoiceUnlock=\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u5982\u679c\u60a8\u8a18\u5f97\u5bc6\u78bc\uff0c\u5247\u53ef\u4ee5\u9078\u53d6\u6b64\u9078\u9805\u4ee5\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u7cfb\u7d71\u4e0d\u6703\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002
-Display_RecoverEnterCode=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u7cfb\u7d71\u5df2\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u50b3\u9001\u7d66\u60a8\u3002\u8acb\u6309\u4e00\u4e0b\u96fb\u5b50\u90f5\u4ef6\u4e2d\u7684\u9023\u7d50\uff0c\u6216\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u8907\u88fd\u4e26\u8cbc\u81f3\u9019\u88e1\u3002
-Display_RecoverEnterCodeSMS=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u7cfb\u7d71\u5df2\u900f\u904e\u7c21\u8a0a\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u50b3\u9001\u7d66\u60a8\u3002\u8acb\u5728\u9019\u88e1\u8f38\u5165\u8a72\u5b89\u5168\u6027\u4ee3\u78bc\u3002
-Display_RecoverPassword=\u8acb\u56de\u7b54\u4e0b\u5217\u554f\u984c\u3002\u5982\u679c\u60a8\u53ef\u4ee5\u6b63\u78ba\u56de\u7b54\u9019\u4e9b\u554f\u984c\uff0c\u5c31\u53ef\u4ee5\u91cd\u8a2d\u5bc6\u78bc\u3002
-Display_RecoverPasswordChoices=\u7531\u65bc\u4e0d\u6b63\u78ba\u7684\u767b\u5165\u5617\u8a66\u6b21\u6578\u592a\u591a\uff0c\u56e0\u6b64\u5df2\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u60a8\u5fc5\u9808\u5148\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u6216\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u624d\u80fd\u7e7c\u7e8c\u3002
-Display_RecoverRandomResponses=\u60a8\u5fc5\u9808\u5148\u56de\u7b54\u4e0b\u5217\u554f\u984c\u624d\u80fd\u7e7c\u7e8c\u3002
-Display_RecoverRequiredResponses=\u7ba1\u7406\u54e1\u8981\u6c42\u60a8\u56de\u7b54\u9019\u4e9b\u554f\u984c\u3002
-Display_RecoverOTP=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u8f38\u5165\u7522\u751f\u7684\u4e00\u6b21\u6027\u5bc6\u78bc\u3002
-Display_RecoverOTPIdentified=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u8f38\u5165\u7522\u751f\u7684\u4e00\u6b21\u6027\u5bc6\u78bc (\u7531 %1% \u8b58\u5225)\u3002
-Display_ResponsesPrompt=\u8acb\u8f38\u5165\u60a8\u7684\u5b89\u5168\u6027\u56de\u61c9
-Display_SelectionIndicator=\u8acb\u9078\u53d6\u6e05\u55ae\u4e2d\u7684\u9805\u76ee
-Display_SearchCompleted=\u5df2\u5b8c\u6210\u641c\u5c0b\u3002
-Display_SearchResultsExceeded=\u641c\u5c0b\u7d50\u679c\u8d85\u904e\u641c\u5c0b\u5927\u5c0f\u4e0a\u9650\u3002
-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_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>
-Display_SetupRandomResponses=
-Display_SetupRequiredResponses=
-Display_SetupResponses=<p>\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u53ef\u4ee5\u56de\u7b54\u53ea\u6709\u60a8\u624d\u77e5\u9053\u7684\u554f\u984c\u4ee5\u5fa9\u539f\u5bc6\u78bc\u3002</p><p>\u8acb\u9078\u64c7\u5728\u60a8\u5fd8\u8a18\u5bc6\u78bc\u6642\uff0c\u7cfb\u7d71\u53ef\u7528\u65bc\u9a57\u8b49\u60a8\u8eab\u5206\u7684\u554f\u984c\u548c\u7b54\u6848\u3002\u7531\u65bc\u9019\u4e9b\u554f\u984c\u7684\u7b54\u6848\u53ef\u7528\u65bc\u5b58\u53d6\u60a8\u7684\u5e33\u6236\uff0c\u8acb\u52d9\u5fc5\u63d0\u4f9b\u5176\u4ed6\u4eba\u96e3\u4ee5\u731c\u6e2c\u6216\u767c\u73fe\u7684\u7b54\u6848\u3002</p>
-Display_SetupOtpSecret=<p><b>\u8a2d\u5b9a\u4e00\u6b21\u6027\u5bc6\u78bc\u8edf\u6027\u8a18\u865f</b></p><p>\u6383\u63cf QR \u4ee3\u78bc\u4ee5\u8a2d\u5b9a\u60a8\u7684\u8edf\u6027\u8a18\u865f\u61c9\u7528\u7a0b\u5f0f\u6216\u624b\u52d5\u8f38\u5165\u6a5f\u5bc6\u548c\u9078\u9805\u3002</p>
-Display_WarnExistingOtpSecret=OTP \u6a5f\u5bc6\u5df2\u5b58\u5728\u3002\u6309\u4e00\u4e0b\u300c\u7e7c\u7e8c\u300d\u5373\u53ef\u6e05\u9664\u73fe\u6709\u7684\u6a5f\u5bc6\u4e26\u8a2d\u5b9a\u65b0\u6a5f\u5bc6\u3002
-Display_PleaseVerifyOtp=\u8acb\u8f38\u5165\u7522\u751f\u7684\u4e00\u6b21\u6027\u5bc6\u78bc\u4ee5\u9a57\u8b49\u8a2d\u5b9a\u3002
-Display_Shortcuts=\u9078\u53d6\u4e0b\u5217\u5176\u4e2d\u4e00\u500b\u9023\u7d50\u4ee5\u7e7c\u7e8c\u3002
-Display_ShowPasswordGuide=\u5bc6\u78bc\u6307\u5357
-Display_StrengthMeter=\u5bc6\u78bc\u6548\u529b
-Display_UpdateProfile=\u8acb\u66f4\u65b0\u4e0b\u5217\u8cc7\u8a0a\uff1a
-Display_UpdateProfileConfirm=\u8acb\u6aa2\u95b1\u4e26\u78ba\u8a8d\u4e0b\u5217\u60a8\u5df2\u8f38\u5165\u7684\u8cc7\u8a0a\u3002
-Display_UserEventHistory=\u6b64\u9801\u9762\u6703\u986f\u793a\u60a8\u7684\u5bc6\u78bc\u4e8b\u4ef6\u6b77\u7a0b\u3002\u53ea\u6709\u900f\u904e\u6b64\u61c9\u7528\u7a0b\u5f0f\u57f7\u884c\u7684\u52d5\u4f5c\u624d\u6703\u986f\u793a\u5728\u9019\u88e1\u3002\u6240\u6709\u5217\u51fa\u7684\u6642\u9593\u90fd\u4f4d\u65bc %1% \u6642\u5340\u3002
-Display_TypingWait=\u6b63\u5728\u7b49\u5019\u8f38\u5165\u5b8c\u6210...
-Field_AccountEnabled=\u5df2\u555f\u7528\u5e33\u6236
-Field_Code=\u4ee3\u78bc
-Field_OneTimePassword=\u4e00\u6b21\u6027\u5bc6\u78bc
-Field_Confirm_Prefix=\u78ba\u8a8d
-Field_ConfirmPassword=\u78ba\u8a8d\u5bc6\u78bc
-Field_CurrentPassword=\u76ee\u524d\u5bc6\u78bc
-Field_LastLoginTime=\u4e0a\u6b21\u767b\u5165\u6642\u9593
-Field_LastLoginTimeDelta=\u4e0a\u6b21\u767b\u5165\u6642\u9593\u5dee
-Field_LdapProfile=LDAP \u8a2d\u5b9a\u6a94
-Field_Location=\u4f4d\u7f6e
-Field_NewPassword=\u65b0\u5bc6\u78bc
-Field_Option_Select=\u9078\u53d6\u554f\u984c
-Field_Password=\u76ee\u524d\u5bc6\u78bc
-Field_PasswordExpirationTime=\u5bc6\u78bc\u904e\u671f\u6642\u9593
-Field_PasswordExpired=\u5bc6\u78bc\u5df2\u904e\u671f
-Field_PasswordLocked=\u5df2\u9396\u5b9a\u5bc6\u78bc (\u5165\u4fb5\u8005\u5075\u6e2c)
-Field_PasswordPreExpired=\u5bc6\u78bc\u5df2\u9810\u8a2d\u904e\u671f
-Field_PasswordSetTime=\u5bc6\u78bc\u8a2d\u5b9a\u6642\u9593
-Field_PasswordSetTimeDelta=\u5bc6\u78bc\u8a2d\u5b9a\u6642\u9593\u5dee
-Field_PasswordViolatesPolicy=\u9055\u53cd\u5bc6\u78bc\u898f\u5247
-Field_PasswordWithinWarningPeriod=\u5728\u8b66\u544a\u671f\u9593\u5167
-Field_ResponsesNeeded=\u9700\u8981\u56de\u61c9\u66f4\u65b0
-Field_ResponsesStored=\u5df2\u5132\u5b58\u56de\u61c9
-Field_ResponsesTimestamp=\u5df2\u5132\u5b58\u56de\u61c9\u6642\u9593\u6233\u8a18
-Field_User_Supplied_Question=\u554f\u984c
-Field_UserDN=\u4f7f\u7528\u8005 DN
-Field_UserGUID=\u4f7f\u7528\u8005 GUID
-Field_Username=\u4f7f\u7528\u8005\u540d\u7a31
-Field_OTP_Identifier=\u8b58\u5225\u78bc
-Field_OTP_Secret=\u6a5f\u5bc6
-Field_OTP_Type=\u985e\u578b
-Field_OTP_RecoveryCodes=\u5fa9\u539f\u4ee3\u78bc
-Long_Title_ActivateUser=\u555f\u52d5\u9810\u5148\u8a2d\u5b9a\u7684\u5e33\u6236\u4e26\u5efa\u7acb\u65b0\u5bc6\u78bc\u3002
-Long_Title_Admin=\u7ba1\u7406\u529f\u80fd
-Long_Title_ChangePassword=\u8b8a\u66f4\u60a8\u76ee\u524d\u7684\u5bc6\u78bc\u3002
-Long_Title_ForgottenPassword=\u5982\u679c\u60a8\u5df2\u5fd8\u8a18\u5bc6\u78bc\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u5e33\u6236\u5b58\u53d6\u6b0a\u3002
-Long_Title_ForgottenUsername=\u5c0b\u627e\u60a8\u5fd8\u8a18\u7684\u4f7f\u7528\u8005\u540d\u7a31\u3002
-Long_Title_GuestRegistration=\u8a3b\u518a\u65b0\u7684\u8a2a\u5ba2\u4f7f\u7528\u8005\u5e33\u6236\u3002
-Long_Title_GuestUpdate=\u66f4\u65b0\u65b0\u7684\u8a2a\u5ba2\u4f7f\u7528\u8005\u5e33\u6236\u3002
-Long_Title_Helpdesk=\u670d\u52d9\u53f0\u5de5\u5177
-Long_Title_Logout=\u767b\u51fa\u5bc6\u78bc\u81ea\u52a9\u670d\u52d9\u61c9\u7528\u7a0b\u5f0f\u3002
-Long_Title_Main_Menu=\u5bc6\u78bc\u81ea\u52a9\u670d\u52d9\u4e3b\u529f\u80fd\u8868\u3002\u60a8\u53ef\u4ee5\u5728\u9019\u88e1\u8b8a\u66f4\u76ee\u524d\u5bc6\u78bc\u3001\u91cd\u8a2d\u5fd8\u8a18\u5bc6\u78bc\u6216\u57f7\u884c\u5176\u4ed6\u76f8\u95dc\u5bc6\u78bc\u6d3b\u52d5\u3002
-Long_Title_NewUser=\u5efa\u7acb\u65b0\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002
-Long_Title_PeopleSearch=\u67e5\u95b1\u540c\u4e8b\u7684\u806f\u7d61\u8cc7\u8a0a\u3002
-Long_Title_SetupResponses=\u8a2d\u5b9a\u5fd8\u8a18\u5bc6\u78bc\u56de\u61c9\u3002\u5982\u679c\u60a8\u5fd8\u8a18\u5bc6\u78bc\uff0c\u9019\u4e9b\u6a5f\u5bc6\u554f\u984c\u53ef\u8b93\u60a8\u5fa9\u539f\u5bc6\u78bc\u3002
-Long_Title_SetupOtpSecret=\u8a2d\u5b9a\u4e00\u6b21\u6027\u5bc6\u78bc\u8edf\u6027\u8a18\u865f
-Long_Title_Shortcuts=\u500b\u4eba\u5316\u6377\u5f91\u3002
-Long_Title_UpdateProfile=\u66f4\u65b0\u60a8\u7684\u4f7f\u7528\u8005\u8a2d\u5b9a\u6a94\u8cc7\u6599\u3002
-Long_Title_UserEventHistory=\u5bc6\u78bc\u4e8b\u4ef6\u6b77\u7a0b\u3002\u67e5\u770b\u60a8\u4e4b\u524d\u8b8a\u66f4\u5bc6\u78bc\u7684\u6642\u9593\u3002
-Long_Title_UserInformation=\u5bc6\u78bc\u548c\u5bc6\u78bc\u898f\u5247\u76f8\u95dc\u8cc7\u8a0a\u3002
-Title_ActivateUser=\u555f\u52d5\u5e33\u6236
-Title_Admin=\u7ba1\u7406
-Title_Captcha=\u9a57\u8b49
-Title_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
-Title_ConfirmResponses=\u78ba\u8a8d\u5bc6\u78bc\u56de\u61c9
-Title_Error=\u932f\u8aa4
-Title_ForgottenPassword=\u5fd8\u8a18\u5bc6\u78bc
-Title_ForgottenUsername=\u5fd8\u8a18\u4f7f\u7528\u8005\u540d\u7a31
-Title_GuestRegistration=\u8a3b\u518a\u4f86\u8a2a\u4f7f\u7528\u8005
-Title_GuestUpdate=\u66f4\u65b0\u4f86\u8a2a\u4f7f\u7528\u8005
-Title_Helpdesk=\u670d\u52d9\u53f0
-Title_LocaleSelect=\u5730\u5340\u9078\u9805
-Title_Login=\u8acb\u767b\u5165
-Title_Logout=\u767b\u51fa
-Title_MainPage=\u4e3b\u529f\u80fd\u8868
-Title_NewUser=\u65b0\u4f7f\u7528\u8005\u8a3b\u518a
-Title_PasswordGuide=\u5bc6\u78bc\u6307\u5357
-Title_PasswordPolicy=\u5bc6\u78bc\u898f\u5247
-Title_PasswordStrength=\u5bc6\u78bc\u6548\u529b
-Title_PasswordWarning=\u5bc6\u78bc\u8b66\u544a
-Title_PeopleSearch=\u4eba\u54e1\u641c\u5c0b
-Title_PleaseWait=\u8acb\u7a0d\u5019
-Title_RandomPasswords=\u96a8\u6a5f\u5bc6\u78bc
-Title_RecoverPassword=\u5fd8\u8a18\u5bc6\u78bc
-Title_RecoverRandomResponses=\u96a8\u6a5f\u554f\u984c
-Title_RecoverRequiredResponses=\u5fc5\u8981\u554f\u984c
-Title_SecurityResponses=\u5b89\u5168\u6027\u56de\u61c9
-Title_SetupRandomResponses=\u96a8\u6a5f\u554f\u984c
-Title_SetupRequiredResponses=\u5fc5\u8981\u554f\u984c
-Title_SetupResponses=\u8a2d\u5b9a\u5bc6\u78bc\u56de\u61c9
-Title_SetupOtpSecret=\u8a2d\u5b9a OTP \u6a5f\u5bc6
-Title_Shortcuts=\u6377\u5f91
-Title_Success=\u6210\u529f
-Title_TitleBar=@User:ID@ \u5bc6\u78bc\u81ea\u52a9\u670d\u52d9
-Title_UpdateProfile=\u66f4\u65b0\u8a2d\u5b9a\u6a94
-Title_UpdateProfileConfirm=\u78ba\u8a8d\u8a2d\u5b9a\u6a94\u8cc7\u6599
-Title_UserEventHistory=\u5bc6\u78bc\u6b77\u7a0b
-Title_UserInformation=\u5e33\u6236\u8cc7\u8a0a
-Tooltip_PasswordStrength=\u5bc6\u78bc\u6548\u529b\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>
-Value_False=\u5047
-Value_True=\u771f
-Value_NotApplicable=\u4e0d\u53ef\u7528
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Button_Activate=\u555f\u52d5
+Button_Agree=\u6211\u540c\u610f
+Button_Cancel=\u53d6\u6d88
+Button_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
+Button_ChangeResponses=\u8fd4\u56de
+Button_CheckCode=\u6aa2\u67e5\u9a57\u8b49\u78bc
+Button_ClearOtpReEnroll=\u91cd\u65b0\u8a3b\u518a\u884c\u52d5\u88dd\u7f6e
+Button_HelpdeskClearOtpSecret=\u6e05\u9664 OTP \u6a5f\u5bc6
+Button_ClearResponses=\u6e05\u9664\u7b54\u6848
+Button_CloseWindow=\u95dc\u9589\u8996\u7a97
+Button_Confirm=\u78ba\u8a8d
+Button_ConfirmResponses=\u78ba\u8a8d\u5b89\u5168\u6027\u7b54\u6848
+Button_Continue=\u7e7c\u7e8c
+Button_Create=\u5efa\u7acb
+Button_Delete=\u522a\u9664
+Button_Email=\u96fb\u5b50\u90f5\u4ef6
+Button_GoBack=\u8fd4\u56de
+Button_Hide=\u96b1\u85cf
+Button_Hide_Responses=\u96b1\u85cf\u56de\u61c9
+Button_Home=\u9996\u9801
+Button_Login=\u767b\u5165
+Button_Logout=\u767b\u51fa
+Button_More=\u66f4\u591a
+Button_OrgChart=\u7d44\u7e54\u5716\u8868
+Button_RecoverPassword=\u6aa2\u67e5\u7b54\u6848
+Button_Reset=\u6e05\u9664
+Button_Search=\u641c\u5c0b
+Button_SetResponses=\u5132\u5b58\u7b54\u6848
+Button_Show=\u986f\u793a
+Button_Show_Responses=\u986f\u793a\u56de\u61c9
+Button_Skip=\u8df3\u904e
+Button_SMS=\u7c21\u8a0a
+Button_Unlock=\u89e3\u9664\u9396\u5b9a
+Button_UnlockPassword=\u89e3\u9664\u9396\u5b9a\u5bc6\u78bc
+Button_Update=\u66f4\u65b0
+Button_Verify=\u78ba\u8a8d
+Button_OK=\u78ba\u5b9a
+Display_ActivateUser=\u82e5\u8981\u78ba\u8a8d\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002\u7cfb\u7d71\u5c07\u4f7f\u7528\u60a8\u7684\u8cc7\u8a0a\u627e\u51fa\u4e26\u555f\u52d5\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002<p/>\u8acb\u52d9\u5fc5\u5b8c\u6210\u7a0b\u5e8f\uff0c\u5426\u5247\u5c07\u7121\u6cd5\u6b63\u78ba\u555f\u52d5\u60a8\u7684\u5e33\u6236\u3002
+Display_AutoGeneratedPassword=\u81ea\u52d5\u7522\u751f\u65b0\u5bc6\u78bc
+Display_CapsLockIsOn=CAPS LOCK \u958b\u555f
+Display_Captcha=\u8acb\u5b8c\u6210\u9a57\u8b49\u7a0b\u5e8f\u3002\u6b64\u7a0b\u5e8f\u6709\u52a9\u65bc\u4fdd\u8b77\u60a8\u7684\u5e33\u6236\u514d\u53d7\u4ed6\u4eba\u6feb\u7528\u3002
+Display_CaptchaInputWords=\u8f38\u5165\u4e0a\u65b9\u986f\u793a\u7684\u6587\u5b57
+Display_CaptchaInputNumbers=\u8f38\u5165\u60a8\u807d\u5230\u7684\u6578\u5b57
+Display_CaptchaGetAudio=\u53d6\u5f97\u97f3\u8a0a CAPTCHA
+Display_CaptchaGetImage=\u53d6\u5f97\u5f71\u50cf CAPTCHA
+Display_CaptchaHelp=\u8aaa\u660e
+Display_CaptchaRefresh=\u91cd\u65b0\u6574\u7406
+Display_ChangePassword=\u8acb\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002\u8acb\u4fdd\u6301\u65b0\u5bc6\u78bc\u7684\u5b89\u5168\u6027\u3002\u8f38\u5165\u60a8\u7684\u65b0\u5bc6\u78bc\u5f8c\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u8b8a\u66f4\u5bc6\u78bc\u300d\u6309\u9215\u3002\u5982\u679c\u60a8\u5fc5\u9808\u5beb\u4e0b\u65b0\u5bc6\u78bc\uff0c\u8acb\u52d9\u5fc5\u653e\u5728\u5b89\u5168\u7684\u4f4d\u7f6e\u3002\u60a8\u7684\u65b0\u5bc6\u78bc\u5fc5\u9808\u7b26\u5408\u4e0b\u5217\u8981\u6c42\uff1a
+Display_ChangePasswordForm=\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u6599\u3002\u7cfb\u7d71\u5fc5\u9808\u5148\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u60a8\u624d\u80fd\u8b8a\u66f4\u5bc6\u78bc\u3002
+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_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
+Display_Days=\u5929
+Display_ErrorBody=\u767c\u751f\u932f\u8aa4\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u4e26\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Display_ExpirationDate=\u5e33\u6236\u904e\u671f\u65e5 (\u6700\u591a %1% \u5929)
+Display_FooterInfoText=
+Display_ForgottenPassword=\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u8acb\u4f9d\u7167\u63d0\u793a\u91cd\u8a2d\u5bc6\u78bc\u3002
+Display_ForgottenUsername=\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002\u7cfb\u7d71\u5c07\u4f7f\u7528\u6b64\u8cc7\u8a0a\u67e5\u95b1\u60a8\u5fd8\u8a18\u7684\u4f7f\u7528\u8005\u540d\u7a31\u3002
+Display_GuestRegistration=\u82e5\u8981\u8a3b\u518a\u65b0\u7684\u8a2a\u5ba2\u5e33\u6236\uff0c\u8acb\u8f38\u5165\u4e0b\u5217\u8cc7\u8a0a\u3002
+Display_GuestUpdate=\u82e5\u8981\u66f4\u65b0\u8a2a\u5ba2\u5e33\u6236\uff0c\u8acb\u6aa2\u67e5\u4e26\u4fee\u6539\u4e0b\u5217\u8cc7\u8a0a\u3002
+Display_Helpdesk=\u8acb\u8f38\u5165\u4f7f\u7528\u8005\u7684\u641c\u5c0b\u8cc7\u6599\u3002
+Display_Hour=\u5c0f\u6642
+Display_Hours=\u5c0f\u6642
+Display_IdleTimeout=\u9592\u7f6e\u903e\u6642\uff1a
+Display_IdleWarningMessage=\u60a8\u7684\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u5373\u5c07\u903e\u6642\u3002\u8acb\u6309\u4e00\u4e0b\u6b64\u9801\u9762\u4e0a\u7684\u4efb\u4f55\u4f4d\u7f6e\u4ee5\u7e7c\u7e8c\u3002
+Display_IdleWarningTitle=\u9592\u7f6e\u903e\u6642
+Display_JavascriptRequired=\u9700\u8981 Javascript \u624d\u53ef\u6aa2\u8996\u6b64\u9801\u9762\u3002
+Display_LeaveDirtyPasswordPage=\u5982\u679c\u60a8\u96e2\u958b\u6b64\u9801\u9762\uff0c\u7cfb\u7d71\u5c07\u4e0d\u6703\u8b8a\u66f4\u5bc6\u78bc\u3002
+Display_Login=
+Display_LoginPasswordOnly=\u8acb\u5728\u4e0b\u65b9\u8f38\u5165\u60a8\u7684\u5bc6\u78bc\u3002\u9700\u8981\u60a8\u76ee\u524d\u7684\u5bc6\u78bc\u624d\u80fd\u5b58\u53d6\u6b64\u61c9\u7528\u7a0b\u5f0f\u3002
+Display_Logout=<b>\u60a8\u73fe\u5728\u5df2\u767b\u51fa\u3002</b><p/>\u8acb\u5148\u95dc\u9589\u6240\u6709\u7db2\u969b\u7db2\u8def\u700f\u89bd\u5668\u8996\u7a97\uff0c\u518d\u5617\u8a66\u767b\u5165\u3002
+Display_Minute=\u5206\u9418
+Display_Minutes=\u5206\u9418
+Display_NAAF_PASSWORD=\u8acb\u63d0\u4f9b NAAF \u9a57\u8b49\u5bc6\u78bc\u3002
+Display_NAAF_LDAP_PASSWORD=\u8acb\u63d0\u4f9b LDAP \u9a57\u8b49\u5bc6\u78bc\u3002
+Display_NAAF_SECURITY_QUESTIONS=\u8acb\u56de\u7b54\u5b89\u5168\u6027\u554f\u984c\u3002
+Display_NAAF_EMAIL_OTP=\u5df2\u50b3\u9001\u5305\u542b\u4e00\u6b21\u6027\u5bc6\u78bc\u7684\u96fb\u5b50\u90f5\u4ef6\u3002
+Display_NAAF_SMS_OTP=\u5df2\u50b3\u9001\u5305\u542b\u4e00\u6b21\u6027\u5bc6\u78bc\u7684\u7c21\u8a0a\u3002
+Display_NAAF_SMARTPHONE=\u667a\u6167\u578b\u624b\u6a5f\u9a57\u8b49\u7a0b\u5e8f\u5df2\u958b\u59cb\u3002\u8acb\u5728\u5b8c\u6210\u5f8c\u7e7c\u7e8c\u3002
+Display_NAAF_RADIUS=\u8acb\u63d0\u4f9b RADIUS \u9a57\u8b49\u5bc6\u78bc\u3002
+Display_NAAF_TOTP=\u8acb\u8f38\u5165 TOTP \u503c\u3002
+Display_NAAF_HOTP=\u8acb\u8f38\u5165 HOTP \u503c\u3002
+Display_NAAF_VOICE=\u8a9e\u97f3\u9a57\u8b49\u7a0b\u5e8f\u5df2\u958b\u59cb\u3002\u8acb\u5728\u5b8c\u6210\u5f8c\u7e7c\u7e8c\u3002
+Display_NewUser=\u82e5\u8981\u8a3b\u518a\u65b0\u5e33\u6236\uff0c\u8acb\u5b8c\u6210\u4e0b\u5217\u8868\u55ae\u3002
+Display_NewUserProfile=\u82e5\u8981\u8a3b\u518a\u65b0\u5e33\u6236\uff0c\u8acb\u9078\u53d6\u8a2d\u5b9a\u6a94\u3002
+Display_PasswordExpired=\u60a8\u7684\u5bc6\u78bc\u5df2\u904e\u671f\u3002\u60a8\u5fc5\u9808\u7acb\u5373\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u3002
+Display_PasswordGeneration=\u5df2\u70ba\u60a8\u96a8\u6a5f\u7522\u751f\u4e0b\u5217\u5bc6\u78bc\u3002\u70ba\u65b9\u4fbf\u60a8\u8a18\u61b6\uff0c\u7cfb\u7d71\u4ee5\u5be6\u969b\u7684\u6587\u5b57\u70ba\u57fa\u790e\u7522\u751f\u9019\u4e9b\u5bc6\u78bc\uff0c\u4e26\u7a0d\u52a0\u4fee\u6539\u63d0\u9ad8\u731c\u6e2c\u96e3\u5ea6\u3002
+Display_PasswordNoExpire=\u60a8\u7684\u5bc6\u78bc\u4e0d\u6703\u904e\u671f\u3002
+Display_PasswordPrompt=\u8acb\u8f38\u5165\u60a8\u7684\u65b0\u5bc6\u78bc
+Display_PasswordStrengthHigh=\u6548\u529b\uff1a<b>\u5f37</b>
+Display_PasswordStrengthLow=\u6548\u529b\uff1a<b>\u5f31</b>
+Display_PasswordStrengthMedium=\u6548\u529b\uff1a<b>\u4f73</b>
+Display_PasswordReplicationStatus=\u5bc6\u78bc\u8907\u88fd (\u9032\u5ea6 %1%)
+Display_PasswordWarn=<b>\u60a8\u7684\u5bc6\u78bc\u5373\u5c07\u904e\u671f</b>\u3002\u8acb\u7acb\u5373\u8b8a\u66f4\u5bc6\u78bc\uff0c\u4ee5\u907f\u514d\u5728\u5b58\u53d6\u6b64\u670d\u52d9\u6642\u767c\u751f\u554f\u984c\u3002<br/><br/>\u60a8\u7684\u5bc6\u78bc\u5c07\u65bc %1% \u904e\u671f\u3002
+Display_PeopleSearch=\u8acb\u5728\u4e0b\u65b9\u8f38\u5165\u60a8\u7684\u641c\u5c0b\u67e5\u8a62\u3002\u60a8\u53ef\u4ee5\u6839\u64da\u540d\u7a31\u3001\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\u6216\u96fb\u8a71\u865f\u78bc\u641c\u5c0b\u4eba\u54e1\u3002
+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\u5f0f\u4e4b\u4e00\u4ee5\u9a57\u8b49\u60a8\u7684\u8eab\u5206\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\u5e36\u78bc\u81f3\u60a8\u7684\u624b\u6a5f\u3002
+Display_RecoverChoiceReset=\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u3002\u5982\u679c\u60a8\u5df2\u5fd8\u8a18\u5bc6\u78bc\u4e14\u60f3\u8981\u8a2d\u5b9a\u65b0\u5bc6\u78bc\uff0c\u8acb\u6309\u4e00\u4e0b\u9019\u88e1\u3002\u8a2d\u5b9a\u65b0\u5bc6\u78bc\u6642\uff0c\u7cfb\u7d71\u4e5f\u6703\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002
+Display_RecoverChoiceUnlock=\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u5982\u679c\u60a8\u8a18\u5f97\u5bc6\u78bc\uff0c\u5247\u53ef\u4ee5\u9078\u53d6\u6b64\u9078\u9805\u4ee5\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u7cfb\u7d71\u4e0d\u6703\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002
+Display_RecoverEnterCode=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u7cfb\u7d71\u5df2\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u50b3\u9001\u7d66\u60a8\u3002\u8acb\u6309\u4e00\u4e0b\u96fb\u5b50\u90f5\u4ef6\u4e2d\u7684\u9023\u7d50\uff0c\u6216\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u8907\u88fd\u4e26\u8cbc\u81f3\u9019\u88e1\u3002
+Display_RecoverEnterCodeSMS=\u70ba\u4e86\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u7cfb\u7d71\u5df2\u900f\u904e\u7c21\u8a0a\u5c07\u5b89\u5168\u6027\u4ee3\u78bc\u50b3\u9001\u7d66\u60a8\u3002\u8acb\u5728\u9019\u88e1\u8f38\u5165\u8a72\u5b89\u5168\u6027\u4ee3\u78bc\u3002
+Display_RecoverPassword=\u8acb\u56de\u7b54\u4e0b\u5217\u554f\u984c\u3002\u5982\u679c\u60a8\u53ef\u4ee5\u6b63\u78ba\u56de\u7b54\u9019\u4e9b\u554f\u984c\uff0c\u5c31\u53ef\u4ee5\u91cd\u8a2d\u5bc6\u78bc\u3002
+Display_RecoverPasswordChoices=\u7531\u65bc\u4e0d\u6b63\u78ba\u7684\u767b\u5165\u5617\u8a66\u6b21\u6578\u592a\u591a\uff0c\u56e0\u6b64\u5df2\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002\u60a8\u5fc5\u9808\u5148\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u6216\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u624d\u80fd\u7e7c\u7e8c\u3002
+Display_RecoverRandomResponses=\u60a8\u5fc5\u9808\u5148\u56de\u7b54\u4e0b\u5217\u554f\u984c\u624d\u80fd\u7e7c\u7e8c\u3002
+Display_RecoverRequiredResponses=\u7ba1\u7406\u54e1\u8981\u6c42\u60a8\u56de\u7b54\u9019\u4e9b\u554f\u984c\u3002
+Display_RecoverOTP=\u82e5\u8981\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u4f7f\u7528\u60a8\u7684\u884c\u52d5\u88dd\u7f6e\u7522\u751f\u5b89\u5168\u6027\u4ee3\u78bc\u3002
+Display_RecoverOTPIdentified=\u82e5\u8981\u9a57\u8b49\u60a8\u7684\u8eab\u5206\uff0c\u8acb\u4f7f\u7528\u60a8\u7684\u884c\u52d5\u88dd\u7f6e\u7522\u751f\u5b89\u5168\u6027\u4ee3\u78bc\u3002\u60a8\u7684\u884c\u52d5\u88dd\u7f6e\u8a3b\u518a ID \u662f <b>%1%</b>\u3002
+Display_ResponsesPrompt=\u8acb\u8f38\u5165\u60a8\u7684\u5b89\u5168\u6027\u7b54\u6848
+Display_SelectionIndicator=\u8acb\u9078\u53d6\u6e05\u55ae\u4e2d\u7684\u554f\u984c\u9805\u76ee
+Display_SearchCompleted=\u5df2\u5b8c\u6210\u641c\u5c0b\u3002
+Display_SearchResultsExceeded=\u641c\u5c0b\u7d50\u679c\u8d85\u904e\u641c\u5c0b\u5927\u5c0f\u4e0a\u9650\u3002
+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_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>
+Display_SetupRandomResponses=
+Display_SetupRequiredResponses=
+Display_SetupResponses=<p>\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u5fc5\u9808\u56de\u7b54\u5b89\u5168\u6027\u554f\u984c\u624d\u80fd\u5b58\u53d6\u5e33\u6236\u3002</p><p>\u8acb\u9078\u64c7\u5728\u60a8\u5fd8\u8a18\u5bc6\u78bc\u6642\uff0c\u7cfb\u7d71\u53ef\u7528\u65bc\u9a57\u8b49\u60a8\u8eab\u5206\u7684\u554f\u984c\u548c\u7b54\u6848\u3002\u7531\u65bc\u9019\u4e9b\u554f\u984c\u7684\u7b54\u6848\u53ef\u7528\u65bc\u5b58\u53d6\u60a8\u7684\u5e33\u6236\uff0c\u8acb\u52d9\u5fc5\u63d0\u4f9b\u5176\u4ed6\u4eba\u96e3\u4ee5\u731c\u6e2c\u6216\u767c\u73fe\u7684\u7b54\u6848\u3002</p>
+Display_SetupOtpSecret=\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u60a8\u7684\u884c\u52d5\u88dd\u7f6e\u5b58\u53d6\u5e33\u6236\u3002\u8acb\u6839\u64da\u60a8\u7684\u88dd\u7f6e\u985e\u578b\uff0c\u4f9d\u7167\u4ee5\u4e0b\u6307\u793a\u9032\u884c\u3002
+Display_SetupOtp_Android_Title=Android
+Display_SetupOtp_Android_Steps=<b>\u5b89\u88dd\u9069\u7528\u65bc Android \u7684 Google Authenticator \u61c9\u7528\u7a0b\u5f0f\u3002</b><ol><li>\u5728\u60a8\u7684\u624b\u6a5f\u4e0a\uff0c\u79fb\u81f3 Google Play Store\u3002</li><li>\u641c\u5c0b <b>Google Authenticator</b>\u3002<br/>(<a target="playstore" href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2">\u5f9e Google Play Store \u4e0b\u8f09</a>)</li><li>\u4e0b\u8f09\u4e26\u5b89\u88dd\u61c9\u7528\u7a0b\u5f0f\u3002</li></ol><b>\u7136\u5f8c\u958b\u555f\u4e26\u8a2d\u5b9a Google Authenticator\u3002</b><ol><li>\u5728 Google Authenticator \u4e2d\uff0c\u89f8\u63a7\u300c\u529f\u80fd\u8868\u300d\uff0c\u4e26\u9078\u53d6\u300c\u8a2d\u5b9a\u5e33\u6236\u300d\u3002</li><li>\u9078\u53d6\u300c\u6383\u63cf\u689d\u78bc\u300d\u3002</li><li>\u4f7f\u7528\u624b\u6a5f\u7684\u76f8\u6a5f\u6383\u63cf\u6b64\u689d\u78bc\u3002</li><li>\u6383\u63cf\u689d\u78bc\u5f8c\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u7e7c\u7e8c\u300d\u6309\u9215\u3002</li></ol>
+Display_SetupOtp_iPhone_Title=iPhone
+Display_SetupOtp_iPhone_Steps=<b>\u5728\u60a8\u7684 iPhone \u4e0a\uff0c\u9ede\u9078\u300cApp Store\u300d\u5716\u793a\u3002</b><ol><li>\u5728\u60a8\u7684\u624b\u6a5f\u4e0a\uff0c\u79fb\u81f3 App Store\u3002</li><li>\u641c\u5c0b <b>Google Authenticator</b>\u3002<br/>(<a target="itunesstore" href="https://itunes.apple.com/us/app/google-authenticator/id388497605?mt=8">\u5f9e App Store \u4e0b\u8f09</a>)</li><li>\u9ede\u9078\u61c9\u7528\u7a0b\u5f0f\uff0c\u7136\u5f8c\u9ede\u9078\u300c\u514d\u8cbb\u300d\u4ee5\u4e0b\u8f09\u4e26\u5b89\u88dd\u8a72\u61c9\u7528\u7a0b\u5f0f\u3002</li></ol><b>\u7136\u5f8c\u958b\u555f\u4e26\u8a2d\u5b9a Google Authenticator\u3002</b><ol><li>\u5728 Google Authenticator \u4e2d\uff0c\u9ede\u9078\u300c+\u300d\uff0c\u7136\u5f8c\u9ede\u9078\u300c\u6383\u63cf\u689d\u78bc\u300d\u3002</li><li>\u4f7f\u7528\u624b\u6a5f\u7684\u76f8\u6a5f\u6383\u63cf\u6b64\u689d\u78bc\u3002</li><li>\u6383\u63cf\u689d\u78bc\u5f8c\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u7e7c\u7e8c\u300d\u6309\u9215\u3002</li></ol>
+Display_SetupOtp_Other_Title=\u5176\u4ed6
+Display_SetupOtp_Other_Steps=<b>\u5c0b\u627e\u76f8\u5bb9\u7684\u96d9\u56e0\u7d20\u61c9\u7528\u7a0b\u5f0f\u3002</b><ul><li>\u5617\u8a66\u5728\u88dd\u7f6e\u7684\u61c9\u7528\u7a0b\u5f0f\u5546\u5e97\u4e2d\u641c\u5c0b <b>Google Authenticator</b>\u3002<br/>\u8a31\u591a\u88dd\u7f6e\u90fd\u5177\u6709\u76f8\u5bb9\u7684\u61c9\u7528\u7a0b\u5f0f\u3002</li><li>\u5617\u8a66\u5c0b\u627e\u652f\u63f4<b>\u300cTOTP \u5b89\u5168\u6027\u8a18\u865f\u300d</b>\u6216\u300cRFC6238\u300d\u7684\u61c9\u7528\u7a0b\u5f0f</li><li>\u4e0b\u8f09\u4e26\u5b89\u88dd\u61c9\u7528\u7a0b\u5f0f\u3002</li></ul><b>\u7136\u5f8c\u958b\u555f\u4e26\u8a2d\u5b9a\u61c9\u7528\u7a0b\u5f0f\u3002</b><ol><li>\u6839\u64da\u61c9\u7528\u7a0b\u5f0f\u6307\u793a\uff0c\u5728\u4e0b\u65b9\u8f38\u5165\u8cc7\u6599\u6216\u6383\u63cf\u4ee3\u78bc\u3002</li><li>\u8a2d\u5b9a\u61c9\u7528\u7a0b\u5f0f\u5f8c\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u7e7c\u7e8c\u300d\u6309\u9215\u3002</li></ol>
+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_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\u6311\u6230/\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\u6311\u6230/\u56de\u61c9\u7b54\u6848\u3002\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u5247\u53ef\u4ee5\u91cd\u65b0\u56de\u7b54\u554f\u984c\u3002
+Display_PleaseVerifyOtp=\u8acb\u70ba\u60a8\u7684\u88dd\u7f6e\u8f38\u5165 6 \u4f4d\u6578\u9a57\u8b49\u78bc\u3002\u5982\u679c\u672a\u5c07\u88dd\u7f6e\u8a2d\u70ba\u70ba\u60a8\u63d0\u4f9b\u9a57\u8b49\u78bc\uff0c\u8acb\u8fd4\u56de\u4e0a\u4e00\u9801\u4e26\u8a2d\u5b9a\u60a8\u7684\u88dd\u7f6e\u3002
+Display_OtpRecoveryInfo=\u6bcf\u500b\u56de\u8986\u4ee3\u78bc\u50c5\u80fd\u5728\u60a8\u7121\u6cd5\u5b58\u53d6\u624b\u6a5f\u6642\u4f7f\u7528\u4e00\u6b21\u3002\u8acb\u52d9\u5fc5<a class="pwm-link-print">\u5217\u5370\u6b64\u9801\u9762</a>\u6216\u8a18\u4e0b\u9019\u4e9b\u4ee3\u78bc\u4e26\u5b58\u653e\u65bc\u5b89\u5168\u4f4d\u7f6e\u3002
+Display_OtpClearWarning=\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u7cfb\u7d71\u4fbf\u6703\u6e05\u9664\u73fe\u6709\u8a3b\u518a\uff0c\u4e14\u60a8\u5fc5\u9808\u91cd\u65b0\u8a2d\u5b9a\u88dd\u7f6e\u3002
+Display_ResponsesClearWarning=\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f\u5982\u679c\u60a8\u7e7c\u7e8c\u9032\u884c\uff0c\u7cfb\u7d71\u4fbf\u6703\u6e05\u9664\u73fe\u6709\u7b54\u6848\uff0c\u4e14\u60a8\u5fc5\u9808\u91cd\u65b0\u56de\u7b54\u5b89\u5168\u6027\u554f\u984c\u3002
+Display_Shortcuts=\u9078\u53d6\u4e0b\u5217\u5176\u4e2d\u4e00\u500b\u9023\u7d50\u4ee5\u7e7c\u7e8c\u3002
+Display_ShowPasswordGuide=\u5bc6\u78bc\u6307\u5357
+Display_StrengthMeter=\u5bc6\u78bc\u6548\u529b
+Display_UpdateProfile=\u8acb\u66f4\u65b0\u4e0b\u5217\u8cc7\u8a0a\uff1a
+Display_UpdateProfileConfirm=\u8acb\u6aa2\u95b1\u4e26\u78ba\u8a8d\u4e0b\u5217\u60a8\u5df2\u8f38\u5165\u7684\u8cc7\u8a0a\u3002
+Display_UserEventHistory=\u6b64\u9801\u9762\u6703\u986f\u793a\u60a8\u7684\u5bc6\u78bc\u4e8b\u4ef6\u6b77\u7a0b\u3002\u53ea\u6709\u900f\u904e\u6b64\u61c9\u7528\u7a0b\u5f0f\u57f7\u884c\u7684\u52d5\u4f5c\u624d\u6703\u986f\u793a\u5728\u9019\u88e1\u3002\u6240\u6709\u5217\u51fa\u7684\u6642\u9593\u90fd\u4f4d\u65bc %1% \u6642\u5340\u3002
+Display_TypingWait=\u6b63\u5728\u7b49\u5019\u8f38\u5165\u5b8c\u6210...
+Field_AccountEnabled=\u5df2\u555f\u7528\u5e33\u6236
+Field_AccountExpired=\u5e33\u6236\u5df2\u904e\u671f
+Field_AccountExpirationTime=\u5e33\u6236\u904e\u671f\u6642\u9593
+Field_Code=\u4ee3\u78bc
+Field_OneTimePassword=\u4e00\u6b21\u6027\u5bc6\u78bc
+Field_Confirm_Prefix=\u78ba\u8a8d
+Field_ConfirmPassword=\u78ba\u8a8d\u5bc6\u78bc
+Field_CurrentPassword=\u76ee\u524d\u5bc6\u78bc
+Field_Display=\u986f\u793a
+Field_ForwardURL=\u8f49\u905e URL
+Field_LastLoginTime=\u4e0a\u6b21\u767b\u5165\u6642\u9593
+Field_LastLoginTimeDelta=\u4e0a\u6b21\u767b\u5165\u6642\u9593\u5dee
+Field_LdapProfile=LDAP \u8a2d\u5b9a\u6a94
+Field_Location=\u4f4d\u7f6e
+Field_LogoutURL=\u767b\u51fa URL
+Field_NetworkAddress=\u7db2\u8def\u4f4d\u5740
+Field_NetworkHost=\u7db2\u8def\u4e3b\u6a5f
+Field_NewPassword=\u65b0\u5bc6\u78bc
+Field_Option_Select=\u9078\u53d6\u554f\u984c
+Field_Password=\u76ee\u524d\u5bc6\u78bc
+Field_PasswordExpirationTime=\u5bc6\u78bc\u904e\u671f\u6642\u9593
+Field_PasswordExpired=\u5bc6\u78bc\u5df2\u904e\u671f
+Field_PasswordLocked=\u5df2\u9396\u5b9a\u5bc6\u78bc (\u5165\u4fb5\u8005\u5075\u6e2c)
+Field_PasswordPreExpired=\u5bc6\u78bc\u5df2\u9810\u8a2d\u904e\u671f
+Field_PasswordSetTime=\u5bc6\u78bc\u8a2d\u5b9a\u6642\u9593
+Field_PasswordSetTimeDelta=\u5bc6\u78bc\u8a2d\u5b9a\u6642\u9593\u5dee
+Field_PasswordViolatesPolicy=\u9055\u53cd\u5bc6\u78bc\u898f\u5247
+Field_PasswordWithinWarningPeriod=\u5728\u8b66\u544a\u671f\u9593\u5167
+Field_Policy=\u898f\u5247
+Field_Profile=\u8a2d\u5b9a\u6a94
+Field_ResponsesNeeded=\u9700\u8981\u56de\u61c9\u66f4\u65b0
+Field_ResponsesStored=\u5df2\u5132\u5b58\u56de\u61c9
+Field_ResponsesTimestamp=\u5df2\u5132\u5b58\u56de\u61c9\u6642\u9593\u6233\u8a18
+Field_User_Supplied_Question=\u554f\u984c
+Field_UserDN=\u4f7f\u7528\u8005 DN
+Field_UserGUID=\u4f7f\u7528\u8005 GUID
+Field_Username=\u4f7f\u7528\u8005\u540d\u7a31
+Field_UserEmail=\u96fb\u5b50\u90f5\u4ef6
+Field_UserSMS=\u7c21\u8a0a
+Field_OTP_Identifier=\u8b58\u5225\u78bc
+Field_OTP_Secret=\u6a5f\u5bc6
+Field_OTP_Type=\u985e\u578b
+Field_OTP_RecoveryCodes=\u5fa9\u539f\u4ee3\u78bc
+Field_OTP_Stored=\u5df2\u5132\u5b58 OTP
+Field_OTP_Timestamp=\u5df2\u5132\u5b58 OTP \u6642\u9593
+Field_VerificationMethodPreviousAuth=\u5148\u524d\u9a57\u8b49
+Field_VerificationMethodToken=\u7c21\u8a0a/\u96fb\u5b50\u90f5\u4ef6\u9a57\u8b49
+Field_VerificationMethodOTP=\u884c\u52d5\u88dd\u7f6e\u9a57\u8b49
+Field_VerificationMethodChallengeResponses=\u6a5f\u5bc6\u554f\u984c\u548c\u7b54\u6848
+Field_VerificationMethodAttributes=\u500b\u4eba\u8cc7\u6599
+Field_VerificationMethodRemoteResponses=\u5916\u90e8\u56de\u61c9
+Field_VerificationMethodNAAF=\u9032\u968e\u9a57\u8b49
+Long_Title_ActivateUser=\u555f\u52d5\u9810\u5148\u8a2d\u5b9a\u7684\u5e33\u6236\u4e26\u5efa\u7acb\u65b0\u5bc6\u78bc\u3002
+Long_Title_Admin=\u7ba1\u7406\u529f\u80fd
+Long_Title_ChangePassword=\u8b8a\u66f4\u60a8\u76ee\u524d\u7684\u5bc6\u78bc\u3002
+Long_Title_ForgottenPassword=\u5982\u679c\u60a8\u5df2\u5fd8\u8a18\u5bc6\u78bc\uff0c\u8acb\u91cd\u65b0\u53d6\u5f97\u5e33\u6236\u5b58\u53d6\u6b0a\u3002
+Long_Title_ForgottenUsername=\u5c0b\u627e\u60a8\u5fd8\u8a18\u7684\u4f7f\u7528\u8005\u540d\u7a31\u3002
+Long_Title_GuestRegistration=\u8a3b\u518a\u65b0\u7684\u8a2a\u5ba2\u4f7f\u7528\u8005\u5e33\u6236\u3002
+Long_Title_GuestUpdate=\u66f4\u65b0\u65b0\u7684\u8a2a\u5ba2\u4f7f\u7528\u8005\u5e33\u6236\u3002
+Long_Title_Helpdesk=\u670d\u52d9\u53f0\u5de5\u5177
+Long_Title_Logout=\u767b\u51fa\u5bc6\u78bc\u81ea\u52a9\u670d\u52d9\u61c9\u7528\u7a0b\u5f0f\u3002
+Long_Title_Main_Menu=\u5bc6\u78bc\u81ea\u52a9\u670d\u52d9\u4e3b\u529f\u80fd\u8868\u3002\u60a8\u53ef\u4ee5\u5728\u9019\u88e1\u8b8a\u66f4\u76ee\u524d\u5bc6\u78bc\u3001\u91cd\u8a2d\u5fd8\u8a18\u5bc6\u78bc\u6216\u57f7\u884c\u5176\u4ed6\u76f8\u95dc\u5bc6\u78bc\u6d3b\u52d5\u3002
+Long_Title_NewUser=\u5efa\u7acb\u65b0\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002
+Long_Title_PeopleSearch=\u67e5\u95b1\u540c\u4e8b\u7684\u806f\u7d61\u8cc7\u8a0a\u3002
+Long_Title_SetupResponses=\u8a2d\u5b9a\u5fd8\u8a18\u5bc6\u78bc\u5b89\u5168\u6027\u554f\u984c\u548c\u7b54\u6848\u3002\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u9019\u4e9b\u6a5f\u5bc6\u7b54\u6848\u53ef\u8b93\u60a8\u5fa9\u539f\u5bc6\u78bc\u3002
+Long_Title_SetupOtpSecret=\u8a2d\u5b9a\u60a8\u7684\u884c\u52d5\u61c9\u7528\u7a0b\u5f0f\u88dd\u7f6e\u3002\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u60a8\u7684\u884c\u52d5\u88dd\u7f6e\u9a57\u8b49\u6b64\u7db2\u7ad9\u3002
+Long_Title_Shortcuts=\u500b\u4eba\u5316\u6377\u5f91\u3002
+Long_Title_UpdateProfile=\u66f4\u65b0\u60a8\u7684\u4f7f\u7528\u8005\u8a2d\u5b9a\u6a94\u8cc7\u6599\u3002
+Long_Title_UserEventHistory=\u5bc6\u78bc\u4e8b\u4ef6\u6b77\u7a0b\u3002\u67e5\u770b\u60a8\u4e4b\u524d\u8b8a\u66f4\u5bc6\u78bc\u7684\u6642\u9593\u3002
+Long_Title_UserInformation=\u5bc6\u78bc\u548c\u5bc6\u78bc\u898f\u5247\u76f8\u95dc\u8cc7\u8a0a\u3002
+Title_AnsweredQuestions=\u5df2\u56de\u7b54\u554f\u984c
+Title_ActivateUser=\u555f\u52d5\u5e33\u6236
+Title_Admin=\u7ba1\u7406
+Title_Application=NetIQ Self Service Password Reset
+Title_Captcha=\u9a57\u8b49
+Title_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
+Title_ConfirmResponses=\u78ba\u8a8d\u5b89\u5168\u6027\u554f\u984c
+Title_Error=\u932f\u8aa4
+Title_ForgottenPassword=\u5fd8\u8a18\u5bc6\u78bc
+Title_ForgottenUsername=\u5fd8\u8a18\u4f7f\u7528\u8005\u540d\u7a31
+Title_GuestRegistration=\u8a2a\u5ba2\u8a3b\u518a
+Title_GuestUpdate=\u66f4\u65b0\u4f86\u8a2a\u4f7f\u7528\u8005
+Title_Helpdesk=\u670d\u52d9\u53f0
+Title_LocaleSelect=\u5730\u5340\u9078\u9805
+Title_Login=\u8acb\u767b\u5165
+Title_Logout=\u767b\u51fa
+Title_MainPage=\u4e3b\u529f\u80fd\u8868
+Title_NewUser=\u65b0\u4f7f\u7528\u8005\u8a3b\u518a
+Title_OrgChart=\u7d44\u7e54\u5716\u8868
+Title_PasswordGuide=\u5bc6\u78bc\u6307\u5357
+Title_PasswordPolicy=\u5bc6\u78bc\u898f\u5247
+Title_PasswordStrength=\u5bc6\u78bc\u6548\u529b
+Title_PasswordWarning=\u5bc6\u78bc\u8b66\u544a
+Title_PeopleSearch=\u4eba\u54e1\u641c\u5c0b
+Title_PleaseWait=\u8acb\u7a0d\u5019
+Title_RandomPasswords=\u96a8\u6a5f\u5bc6\u78bc
+Title_RecoverPassword=\u5fd8\u8a18\u5bc6\u78bc
+Title_RecoverRandomResponses=\u96a8\u6a5f\u554f\u984c
+Title_RecoverRequiredResponses=\u5fc5\u8981\u554f\u984c
+Title_SecurityResponses=\u5b89\u5168\u6027\u56de\u61c9
+Title_SetupRandomResponses=\u96a8\u6a5f\u554f\u984c
+Title_SetupRequiredResponses=\u5fc5\u8981\u554f\u984c
+Title_SetupResponses=\u8a2d\u5b9a\u5b89\u5168\u6027\u554f\u984c
+Title_SetupOtpSecret=\u8a2d\u5b9a\u884c\u52d5\u61c9\u7528\u7a0b\u5f0f\u9a57\u8b49
+Title_Shortcuts=\u6377\u5f91
+Title_Status=\u72c0\u614b
+Title_Success=\u6210\u529f
+Title_TitleBar=@User:ID@ \u5bc6\u78bc\u81ea\u52a9\u670d\u52d9
+Title_UpdateProfile=\u66f4\u65b0\u8a2d\u5b9a\u6a94
+Title_UpdateProfileConfirm=\u78ba\u8a8d\u8a2d\u5b9a\u6a94\u8cc7\u6599
+Title_UserEventHistory=\u5bc6\u78bc\u6b77\u7a0b
+Title_UserInformation=\u6211\u7684\u5e33\u6236
+Tooltip_PasswordStrength=\u5bc6\u78bc\u6548\u529b\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>
+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
+Value_True=\u771f
+Value_NotApplicable=\u4e0d\u53ef\u7528
+Value_Default=\u9810\u8a2d

+ 20 - 6
pwm/servlet/src/password/pwm/i18n/Error_de.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -62,10 +62,12 @@ Password_NewPasswordRequired=Zum Fortfahren ist ein neues Passwort erforderlich.
 Password_Expired=Das Passwort ist abgelaufen.
 Password_CustomError=Das neue Passwort erf\u00fcllt nicht die Regelanforderungen.
 Password_BadOldPassword=Das alte Passwort ist falsch.
+Password_NotEnoughGroups=Das neue Passwort enth\u00e4lt zu wenige verschiedene Zeichenarten
+Password_TooManyConsecutive=Das neue Passwort enth\u00e4lt zu viele aufeinander folgende Zeichen (wie 123456... oder abcdef...)
 
 Error_WrongResponse=Mindestens eine der Antworten ist falsch. Versuchen Sie es erneut.
 Error_WrongPassword=Der Benutzername oder das Passwort ist nicht g\u00fcltig. Versuchen Sie es erneut.
-Error_Response_NoResponse=Der Benutzername ist nicht g\u00fcltig oder verf\u00fcgt \u00fcber keine konfigurierte Antwort.
+Error_Response_NoResponse=Der Benutzername ist nicht g\u00fcltig oder nicht zur Verwendung dieser Funktion zugelassen
 Error_Response_TooShort=Die Antwort auf die Frage "%1%" ist zu kurz.
 Error_Response_Wordlist=Die Antwort auf die Frage "%1%" ist eine zu h\u00e4ufig verwendete Antwort.
 Error_Response_TooLong=Die Antwort auf die Frage "%1%" ist zu lang.
@@ -94,7 +96,7 @@ Error_MissingRandomResponse=F\u00fcgen Sie eine weitere Zufallsantwort hinzu.
 Error_BadCaptchaResponse=Falscher \u00dcberpr\u00fcfungscode. Versuchen Sie es erneut.
 Error_CaptchaAPIError=Beim \u00dcberpr\u00fcfen der Captcha-Antwort ist ein Fehler aufgetreten. Schlie\u00dfen Sie den Browser und versuchen Sie es erneut. Wenn dieser Fehler wiederholt auftritt, wenden Sie sich an den Helpdesk.
 Error_InvalidConfig=Die Konfiguration ist ung\u00fcltig oder besch\u00e4digt. Beheben Sie den Fehler oder entfernen Sie die Konfigurationsdatei.
-Error_InvalidFormID=Browsersitzung ist ung\u00fcltig oder abgelaufen. Schlie\u00dfen Sie den Browser und versuchen Sie es erneut.
+Error_InvalidFormID=Die Browsersitzung ist ung\u00fcltig oder abgelaufen. Versuchen Sie es erneut.
 Error_TokenMissingContact=F\u00fcr Ihr Konto sind keine Kontaktinformationen verf\u00fcgbar. Wenden Sie sich an den Administrator.
 Error_TokenIncorrect=Falscher Code. Versuchen Sie es erneut.
 Error_BadCurrentPassword=Das aktuelle Passwort ist falsch. Versuchen Sie es erneut.
@@ -112,15 +114,15 @@ Error_Activation=Das Konto kann mit den angegebenen Informationen nicht aktivier
 Error_DB_Unavailable=Datenbank nicht verf\u00fcgbar. Wenn dieser Fehler wiederholt auftritt, wenden Sie sich an den Helpdesk.
 Error_LocalDB_Unavailable=LocalDB nicht verf\u00fcgbar. Wenden Sie sich an den Administrator.
 Error_App_Unavailable=Die Anwendung ist nicht verf\u00fcgbar oder wird neu gestartet. Wenn dieser Fehler wiederholt auftritt, wenden Sie sich an den Helpdesk.
-Error_IncorrectRequestSequence=Eine Anforderung f\u00fcr eine St\u00f6rungsanzeigeseite wurde empfangen. Versuchen Sie es erneut.
-Error_UnreachableCloudService=Cloud-Service war nicht erreichbar.
+Error_IncorrectRequestSequence=Eine Anforderung f\u00fcr eine St\u00f6rungsanzeigeseite wurde empfangen. Verwenden Sie nicht die Zur\u00fcck-Schaltfl\u00e4che des Browsers. Versuchen Sie es erneut.
+Error_UnreachableCloudService=Ein Remoteservice war nicht erreichbar.
 Error_InvalidSecurityKey=Der Sicherheitsschl\u00fcssel fehlt oder ist ung\u00fcltig.
 Error_Clearing_Responses=Beim L\u00f6schen der Antwortfragen ist ein Fehler aufgetreten. Wenden Sie sich an den Administrator.
 Error_ServiceUnreachable=Ein erforderlicher Service ist nicht verf\u00fcgbar. Versuchen Sie es sp\u00e4ter erneut.
 Error_ChallengeInResponse=Die Antwort auf die Frage "%1%" darf nicht einen Teil des Fragetexts enthalten.
 Error_Multi_Username=Mehrere Benutzer stimmen mit dem gegebenen Benutzernamen "%1%" \u00fcberein. Verfeinern Sie die Suche.
 Error_CertificateError=Ein Zertifikatsfehler ist aufgetreten: %1%.
-Error_SyslogWriteError=Beim Schreiben zum Syslog-Server '%1%' ist ein Problem aufgetreten. Fehler: %2%
+Error_SyslogWriteError=Beim Schreiben zum Syslog-Server ist ein Problem aufgetreten. Fehler: %1%
 Error_TooManyThreads=H\u00f6chstgrenze f\u00fcr Anzahl der Threads \u00fcberschritten. Versuchen Sie es sp\u00e4ter erneut.
 Error_SecurityViolation=Eine Sicherheitsverletzung ist aufgetreten. Versuchen Sie es sp\u00e4ter erneut.
 Error_NoOtpConfiguration=Es wurde kein Einmalpasswort konfiguriert.
@@ -143,6 +145,18 @@ Error_FieldBadConfirm=%1% Felder stimmen nicht \u00fcberein.
 Error_FieldRegexNoMatch=%1% ist nicht das richtige Format.
 Error_Orig_Admin_Only=Nur der urspr\u00fcngliche Administrator kann diese Eigenschaft ausf\u00fchren.
 Error_PasswordRequired=Zum Ausf\u00fchren dieses Vorgangs ist ein Passwort erforderlich.
+Error_ReportingError=Bei der Berichtgenerierung ist ein Fehler aufgetreten
+Error_TokenDestIntruder=Die maximal zul\u00e4ssige Anzahl an Versuchen wurde \u00fcberschritten. Versuchen Sie es sp\u00e4ter erneut.
+Error_OtpRecoveryUsed=Die Wiederherstellung wurde m\u00f6glicherweise bereits verwendet und kann nicht erneut verwendet werden.
+Error_RedirectIllegal=Die angeforderte URL-Umadressierung ist nicht zul\u00e4ssig.
+Error_CryptError=Ein unerwarteter Kryptografiefehler ist aufgetreten.
+Error_SmsSendError=SMS-Nachricht konnte nicht gesendet werden: %1%
+Error_LdapDataError=Ein LDAP-Datenfehler ist aufgetreten.
+Error_MacroParseError=Fehler beim Analysieren des Makros: %1%
+Error_NoProfileAssigned=Dieser Operation ist kein Profil zugewiesen.
+Error_StartupError=Beim Starten der Anwendung ist ein Fehler aufgetreten. Weitere Informationen finden Sie in den Protokolldateien.
+
+Error_RemoteErrorValue=Remotefehler: %1%
 
 Error_ConfigUploadSuccess=Datei erfolgreich heraufgeladen
 Error_ConfigUploadFailure=Datei konnte nicht heraufgeladen werden.

+ 21 - 7
pwm/servlet/src/password/pwm/i18n/Error_es.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -62,10 +62,12 @@ Password_NewPasswordRequired=Se requiere una nueva contrase\u00f1a para poder co
 Password_Expired=La contrase\u00f1a ha caducado.
 Password_CustomError=La nueva contrase\u00f1a no cumple los requisitos de la regla
 Password_BadOldPassword=La contrase\u00f1a antigua no es correcta
+Password_NotEnoughGroups=La nueva contrase\u00f1a no tiene suficientes tipos de caracteres diferentes
+Password_TooManyConsecutive=La nueva contrase\u00f1a tiene demasiados caracteres consecutivos (por ejemplo 123456... o abcdef...)
 
 Error_WrongResponse=Una o varias respuestas no son correctas. Int\u00e9ntelo de nuevo.
 Error_WrongPassword=El nombre de usuario o la contrase\u00f1a no es v\u00e1lido. Int\u00e9ntelo de nuevo.
-Error_Response_NoResponse=El nombre de usuario no es v\u00e1lido o no tiene configurada una respuesta
+Error_Response_NoResponse=El nombre de usuario no es v\u00e1lido o no puede utilizar esta funci\u00f3n
 Error_Response_TooShort=La respuesta a la pregunta "%1%" es demasiado corta
 Error_Response_Wordlist=La respuesta a la pregunta "%1%" se utiliza con demasiada frecuencia
 Error_Response_TooLong=La respuest a la pregunta "%1%" es demasiado larga
@@ -94,7 +96,7 @@ Error_MissingRandomResponse=A\u00f1ada una respuesta aleatoria adicional.
 Error_BadCaptchaResponse=C\u00f3digo de verificaci\u00f3n incorrecto. Int\u00e9ntelo de nuevo.
 Error_CaptchaAPIError=Se ha producido un error al validar la respuesta al c\u00f3digo captcha. Cierre el navegador e int\u00e9ntelo de nuevo. Si este error se produce de forma reiterada, p\u00f3ngase en contacto con el servicio de ayuda t\u00e9cnica.
 Error_InvalidConfig=La configuraci\u00f3n no es v\u00e1lida o est\u00e1 da\u00f1ada. Corrija el error o elimine el archivo de configuraci\u00f3n.
-Error_InvalidFormID=La sesi\u00f3n del navegador no es v\u00e1lida o ha caducado. Cierre el navegador e int\u00e9ntelo de nuevo.
+Error_InvalidFormID=La sesi\u00f3n del navegador no es v\u00e1lida o ha caducado. Int\u00e9ntelo de nuevo.
 Error_TokenMissingContact=No hay informaci\u00f3n de contacto disponible para su cuenta. P\u00f3ngase en contacto con el administrador.
 Error_TokenIncorrect=C\u00f3digo incorrecto. Int\u00e9ntelo de nuevo.
 Error_BadCurrentPassword=La contrase\u00f1a actual es incorrecta; int\u00e9ntelo de nuevo.
@@ -112,15 +114,15 @@ Error_Activation=No es posible activar su cuenta con la informaci\u00f3n que ha
 Error_DB_Unavailable=Base de datos no disponible. Si este error se produce de forma reiterada, p\u00f3ngase en contacto con el servicio de ayuda t\u00e9cnica.
 Error_LocalDB_Unavailable=BD local no disponible. P\u00f3ngase en contacto con su administrador.
 Error_App_Unavailable=La aplicaci\u00f3n no est\u00e1 disponible o se esta reiniciando. Si este error se produce de forma reiterada, p\u00f3ngase en contacto con el servicio de ayuda t\u00e9cnica.
-Error_IncorrectRequestSequence=Se ha recibido una petici\u00f3n de p\u00e1gina fuera de servicio. Int\u00e9ntelo de nuevo.
-Error_UnreachableCloudService=El servicio de nube no estaba accesible.
+Error_IncorrectRequestSequence=Se ha recibido una petici\u00f3n de p\u00e1gina fuera de servicio. No utilice el bot\u00f3n Atr\u00e1s del navegador. Int\u00e9ntelo de nuevo.
+Error_UnreachableCloudService=El servicio remoto no estaba accesible.
 Error_InvalidSecurityKey=Falta la clave de seguridad o no es v\u00e1lida.
 Error_Clearing_Responses=Se ha producido un error al borrar las preguntas de respuesta. P\u00f3ngase en contacto con el administrador.
 Error_ServiceUnreachable=Un servicio necesario no est\u00e1 disponible. Int\u00e9ntelo m\u00e1s tarde.
 Error_ChallengeInResponse=La respuesta a la pregunta "%1%" no puede incluir parte del texto de la pregunta.
 Error_Multi_Username=Hay varios usuarios que coinciden con el nombre de usuario "%1%" indicado. Delimite su b\u00fasqueda.
 Error_CertificateError=Se ha encontrado un error de certificado: %1%.
-Error_SyslogWriteError=Ha ocurrido un problema al escribir en el servidor syslog '%1%', error: %2%
+Error_SyslogWriteError=Ha ocurrido un problema al escribir en el servidor syslog, error: %1%
 Error_TooManyThreads=Se ha superado el l\u00edmite m\u00e1ximo de hilos; int\u00e9ntelo m\u00e1s tarde.
 Error_SecurityViolation=Se ha producido una infracci\u00f3n de seguridad. Int\u00e9ntelo m\u00e1s tarde.
 Error_NoOtpConfiguration=No se ha configurado una contrase\u00f1a para una vez.
@@ -143,11 +145,23 @@ Error_FieldBadConfirm=%1% campos no coinciden
 Error_FieldRegexNoMatch=%1% no tiene el formato correcto
 Error_Orig_Admin_Only=Solo el administrador original puede llevar a cabo esta propiedad
 Error_PasswordRequired=Se requiere una contrase\u00f1a para realizar esta operaci\u00f3n
+Error_ReportingError=Se ha producido un error al generar el informe
+Error_TokenDestIntruder=Se ha superado el n\u00famero m\u00e1ximo de intentos. Int\u00e9ntelo m\u00e1s tarde.
+Error_OtpRecoveryUsed=Es posible que se haya utilizado anteriormente la recuperaci\u00f3n y no se pueda volver a utilizar.
+Error_RedirectIllegal=La url de redireccionamiento solicitada no est\u00e1 permitida.
+Error_CryptError=Se ha producido un error de cifrado inesperado.
+Error_SmsSendError=No es posible enviar mensaje sms: %1%
+Error_LdapDataError=Se ha producido un error de datos de LDAP.
+Error_MacroParseError=Error de macro an\u00e1lisis: %1%
+Error_NoProfileAssigned=No se ha asignado un perfil para esta operaci\u00f3n.
+Error_StartupError=Se ha producido un error al iniciar la aplicaci\u00f3n. Consulte los archivos de registro para ver m\u00e1s informaci\u00f3n.
+
+Error_RemoteErrorValue=Error remoto: %1%
 
 Error_ConfigUploadSuccess=Archivo cargado correctamente
 Error_ConfigUploadFailure=Error al cargar el archivo.
 Error_ConfigSaveSuccess=La configuraci\u00f3n se guard\u00f3 correctamente. Se ha solicitado el reinicio de la aplicaci\u00f3n. Es posible que la aplicaci\u00f3n no est\u00e9 disponible mientras se reinicia. Si la petici\u00f3n de reinicio falla, puede que sea necesario reiniciar manualmente el servidor de aplicaciones.
-Error_ConfigFormatError=Error de formato de configuraci\u00f3n: %1%
+Error_ConfigFormatError=Error de formato de configuraci\u00f3n:  %1%
 Error_ConfigLdapFailure=No es posible la conexi\u00f3n con el servidor de directorio LDAP.
 Error_ConfigLdapSuccess=Se ha establecido correctamente la conexi\u00f3n al servidor de directorio LDAP
 

+ 21 - 7
pwm/servlet/src/password/pwm/i18n/Error_fr.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -62,10 +62,12 @@ Password_NewPasswordRequired=Vous devez indiquer un nouveau mot de passe pour po
 Password_Expired=Le mot de passe est arriv\u00e9 \u00e0 expiration.
 Password_CustomError=Le nouveau mot de passe ne r\u00e9pond pas aux exigences de la r\u00e8gle
 Password_BadOldPassword=L'ancien mot de passe n'est pas correct
+Password_NotEnoughGroups=Le nouveau mot de passe ne comporte pas suffisamment de types de caract\u00e8res.
+Password_TooManyConsecutive=Le nouveau mot de passe comporte trop de caract\u00e8res cons\u00e9cutifs (tels que 123456... ou abcdef...)
 
 Error_WrongResponse=Une ou plusieurs r\u00e9ponses sont incorrectes. Veuillez r\u00e9essayer.
 Error_WrongPassword=Le nom d'utilisateur ou le mot de passe n'est pas correct. Veuillez r\u00e9essayer.
-Error_Response_NoResponse=Le nom d'utilisateur n'est pas correct ou n'a pas de r\u00e9ponse configur\u00e9e
+Error_Response_NoResponse=Le nom d'utilisateur n'est pas valide ou ne peut pas utiliser cette fonctionnalit\u00e9.
 Error_Response_TooShort=La r\u00e9ponse \u00e0 la question "%1%" est trop courte
 Error_Response_Wordlist=La r\u00e9ponse \u00e0 la question "%1%" est trop commun\u00e9ment utilis\u00e9e
 Error_Response_TooLong=La r\u00e9ponse \u00e0 la question "%1%" est trop longue
@@ -94,7 +96,7 @@ Error_MissingRandomResponse=Ajoutez une autre r\u00e9ponse al\u00e9atoire.
 Error_BadCaptchaResponse=Code de v\u00e9rification incorrect ; veuillez r\u00e9essayer.
 Error_CaptchaAPIError=Une erreur s'est produite lors de la validation de la r\u00e9ponse CAPTCHA. Fermez le navigateur et r\u00e9essayez. Si elle se reproduit, contactez le service d'assistance.
 Error_InvalidConfig=La configuration est incorrecte ou alt\u00e9r\u00e9e. Corrigez l'erreur ou supprimez le fichier de configuration.
-Error_InvalidFormID=Votre session de navigateur est incorrecte ou est arriv\u00e9e \u00e0 expiration. Fermez le navigateur et r\u00e9essayez.
+Error_InvalidFormID=La session de votre navigateur n'est pas valide ou a expir\u00e9. Veuillez r\u00e9essayer.
 Error_TokenMissingContact=Aucune information de contact disponible pour votre compte. Contactez l'administrateur.
 Error_TokenIncorrect=Code incorrect ; veuillez r\u00e9essayer.
 Error_BadCurrentPassword=Le mot de passe actuel est incorrect ; veuillez r\u00e9essayer.
@@ -112,15 +114,15 @@ Error_Activation=Impossible d'activer votre compte \u00e0 l'aide des information
 Error_DB_Unavailable=Base de donn\u00e9es indisponible. Si cette erreur se reproduit, contactez le service d'assistance.
 Error_LocalDB_Unavailable=Base de donn\u00e9es locale indisponible. Contactez l'administrateur.
 Error_App_Unavailable=L'application est indisponible ou est en cours de red\u00e9marrage. Si cette erreur se reproduit, contactez le service d'assistance.
-Error_IncorrectRequestSequence=R\u00e9ception d'une demande de page dont les paquets de donn\u00e9es ne sont pas dans l'ordre. Veuillez r\u00e9essayer.
-Error_UnreachableCloudService=Le service de Cloud \u00e9tait inaccessible.
+Error_IncorrectRequestSequence=Une demande pour une page hors service a \u00e9t\u00e9 re\u00e7ue. N'utilisez pas le bouton Retour de votre navigateur. Veuillez r\u00e9essayer.
+Error_UnreachableCloudService=Un service distant \u00e9tait inaccessible.
 Error_InvalidSecurityKey=Cl\u00e9 de s\u00e9curit\u00e9 manquante ou non valide.
 Error_Clearing_Responses=Une erreur s'est produite lors de l'effacement des questions-r\u00e9ponses. Contactez l'administrateur.
 Error_ServiceUnreachable=Un service obligatoire est indisponible. R\u00e9essayez ult\u00e9rieurement.
 Error_ChallengeInResponse=La r\u00e9ponse \u00e0 la question "%1%" ne peut pas contenir une partie du texte de la question.
 Error_Multi_Username=Plusieurs utilisateurs correspondent au nom d'utilisateur "%1%" indiqu\u00e9. Pr\u00e9cisez votre recherche.
 Error_CertificateError=Une erreur de certificat s'est produite : %1%.
-Error_SyslogWriteError=Un probl\u00e8me d'\u00e9criture sur le serveur syslog '%1%' s'est produit. Erreur : %2%
+Error_SyslogWriteError=Un probl\u00e8me d'\u00e9criture sur le serveur Syslog s'est produit. Erreur : %1%
 Error_TooManyThreads=Le nombre maximum de threads est atteint. Veuillez r\u00e9essayer ult\u00e9rieurement
 Error_SecurityViolation=Une violation de s\u00e9curit\u00e9 s'est produite. Veuillez r\u00e9essayer ult\u00e9rieurement.
 Error_NoOtpConfiguration=Aucun mot de passe \u00e0 usage unique n'est configur\u00e9.
@@ -143,11 +145,23 @@ Error_FieldBadConfirm=%1% champs ne concordent pas
 Error_FieldRegexNoMatch=%1% n'est pas le format correct
 Error_Orig_Admin_Only=Seul l'administrateur d'origine peut utiliser cette propri\u00e9t\u00e9
 Error_PasswordRequired=Vous devez indiquer un mot de passe pour effectuer cette op\u00e9ration
+Error_ReportingError=Une erreur s'est produite pendant la g\u00e9n\u00e9ration du rapport.
+Error_TokenDestIntruder=Le nombre maximum de tentatives a \u00e9t\u00e9 d\u00e9pass\u00e9. Veuillez r\u00e9essayer ult\u00e9rieurement.
+Error_OtpRecoveryUsed=La r\u00e9cup\u00e9ration a peut-\u00eatre d\u00e9j\u00e0 \u00e9t\u00e9 utilis\u00e9e et ne peut pas \u00eatre r\u00e9utilis\u00e9e.
+Error_RedirectIllegal=L'URL de redirection demand\u00e9e n'est pas autoris\u00e9e.
+Error_CryptError=Une erreur de cryptographie inattendue s'est produite.
+Error_SmsSendError=Le SMS n'a pas pu \u00eatre envoy\u00e9 : %1%
+Error_LdapDataError=Une erreur de donn\u00e9es LDAP s'est produite.
+Error_MacroParseError=Erreur d'analyse macro : %1%
+Error_NoProfileAssigned=Aucun profil n'est assign\u00e9 \u00e0 cette op\u00e9ration.
+Error_StartupError=Une erreur s'est produite au d\u00e9marrage de l'application. Consultez les fichiers journaux pour plus d'informations.
+
+Error_RemoteErrorValue=Erreur \u00e0 distance : %1%
 
 Error_ConfigUploadSuccess=Fichier t\u00e9l\u00e9charg\u00e9
 Error_ConfigUploadFailure=\u00c9chec de t\u00e9l\u00e9chargement du fichier.
 Error_ConfigSaveSuccess=Configuration enregistr\u00e9e. Le red\u00e9marrage de l'application est demand\u00e9. L'application risque d'\u00eatre indisponible pendant le red\u00e9marrage. Si la demande de red\u00e9marrage \u00e9choue, vous devrez peut-\u00eatre red\u00e9marrer le serveur d'applications manuellement.
-Error_ConfigFormatError=Erreur de format de configuration : %1%
+Error_ConfigFormatError=Erreur du format de configuration :  %1%
 Error_ConfigLdapFailure=Impossible d'\u00e9tablir la connexion au serveur d'annuaire LDAP.
 Error_ConfigLdapSuccess=Connexion au serveur d'annuaires LDAP \u00e9tablie.
 

+ 21 - 7
pwm/servlet/src/password/pwm/i18n/Error_ja.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -62,10 +62,12 @@ Password_NewPasswordRequired=\u7d9a\u884c\u3059\u308b\u305f\u3081\u306b\u306f\u6
 Password_Expired=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002
 Password_CustomError=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u30eb\u30fc\u30eb\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u307e\u305b\u3093
 Password_BadOldPassword=\u53e4\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059
+Password_NotEnoughGroups=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u3001\u6587\u5b57\u306e\u7a2e\u985e\u304c\u8db3\u308a\u307e\u305b\u3093
+Password_TooManyConsecutive=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u9023\u7d9a\u6587\u5b57\u304c\u305f\u304f\u3055\u3093\u542b\u307e\u308c\u307e\u3059(123456...\u307e\u305f\u306fabcdef...\u306a\u3069)
 
 Error_WrongResponse=1\u3064\u4ee5\u4e0a\u306e\u56de\u7b54\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_WrongPassword=\u30e6\u30fc\u30b6\u540d\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u7121\u52b9\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Error_Response_NoResponse=\u30e6\u30fc\u30b6\u540d\u304c\u7121\u52b9\u304b\u3001\u8a2d\u5b9a\u3055\u308c\u305f\u56de\u7b54\u304c\u3042\u308a\u307e\u305b\u3093
+Error_Response_NoResponse=\u30e6\u30fc\u30b6\u540d\u304c\u7121\u52b9\u304b\u3001\u3053\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3059\u308b\u8cc7\u683c\u304c\u3042\u308a\u307e\u305b\u3093
 Error_Response_TooShort=\u8cea\u554f\u300c%1%\u300d\u306b\u5bfe\u3059\u308b\u56de\u7b54\u304c\u77ed\u3059\u304e\u307e\u3059
 Error_Response_Wordlist=\u8cea\u554f\u300c%1%\u300d\u306b\u5bfe\u3059\u308b\u56de\u7b54\u304c\u4e00\u822c\u7684\u3059\u304e\u307e\u3059
 Error_Response_TooLong=\u8cea\u554f\u300c%1%\u300d\u306b\u5bfe\u3059\u308b\u56de\u7b54\u304c\u9577\u3059\u304e\u307e\u3059
@@ -94,7 +96,7 @@ Error_MissingRandomResponse=\u5225\u306e\u30e9\u30f3\u30c0\u30e0\u56de\u7b54\u30
 Error_BadCaptchaResponse=\u4e0d\u6b63\u306a\u691c\u8a3c\u30b3\u30fc\u30c9\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_CaptchaAPIError=captcha\u56de\u7b54\u306e\u691c\u8a3c\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u30a8\u30e9\u30fc\u304c\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u5834\u5408\u306f\u3001\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
 Error_InvalidConfig=\u74b0\u5883\u8a2d\u5b9a\u304c\u7121\u52b9\u3067\u3042\u308b\u304b\u7834\u640d\u3057\u3066\u3044\u307e\u3059\u3002\u30a8\u30e9\u30fc\u3092\u4fee\u6b63\u3059\u308b\u304b\u3001\u74b0\u5883\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Error_InvalidFormID=\u30d6\u30e9\u30a6\u30b6\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3067\u3042\u308b\u304b\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002\u30d6\u30e9\u30a6\u30b6\u3092\u9589\u3058\u3066\u304b\u3089\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Error_InvalidFormID=\u30d6\u30e9\u30a6\u30b6\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u7121\u52b9\u3067\u3042\u308b\u304b\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_TokenMissingContact=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u9023\u7d61\u5148\u60c5\u5831\u3092\u5165\u624b\u3067\u304d\u307e\u305b\u3093\u3002\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
 Error_TokenIncorrect=\u4e0d\u6b63\u306a\u30b3\u30fc\u30c9\u3067\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_BadCurrentPassword=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
@@ -112,15 +114,15 @@ Error_Activation=\u6307\u5b9a\u3055\u308c\u305f\u60c5\u5831\u3092\u4f7f\u7528\u3
 Error_DB_Unavailable=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u3053\u306e\u30a8\u30e9\u30fc\u304c\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u5834\u5408\u306f\u3001\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
 Error_LocalDB_Unavailable=LocalDB\u3092\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
 Error_App_Unavailable=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u4f7f\u7528\u3067\u304d\u306a\u3044\u304b\u3001\u518d\u8d77\u52d5\u4e2d\u3067\u3059\u3002\u3053\u306e\u30a8\u30e9\u30fc\u304c\u7e70\u308a\u8fd4\u3057\u767a\u751f\u3059\u308b\u5834\u5408\u306f\u3001\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
-Error_IncorrectRequestSequence=\u7570\u5e38\u306a\u30da\u30fc\u30b8\u8981\u6c42\u3092\u53d7\u4fe1\u3057\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Error_UnreachableCloudService=\u30af\u30e9\u30a6\u30c9\u30b5\u30fc\u30d3\u30b9\u306b\u5230\u9054\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
+Error_IncorrectRequestSequence=\u7570\u5e38\u306a\u30da\u30fc\u30b8\u8981\u6c42\u3092\u53d7\u4fe1\u3057\u307e\u3057\u305f\u3002\u30d6\u30e9\u30a6\u30b6\u306e\uff3b\u623b\u308b\uff3d\u30dc\u30bf\u30f3\u3092\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Error_UnreachableCloudService=\u30ea\u30e2\u30fc\u30c8\u30b5\u30fc\u30d3\u30b9\u306b\u5230\u9054\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002
 Error_InvalidSecurityKey=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u30ad\u30fc\u304c\u6b20\u843d\u3057\u3066\u3044\u308b\u304b\u7121\u52b9\u3067\u3059\u3002
 Error_Clearing_Responses=\u56de\u7b54\u3068\u8cea\u554f\u306e\u6d88\u53bb\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u7ba1\u7406\u8005\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002
 Error_ServiceUnreachable=\u5fc5\u8981\u306a\u30b5\u30fc\u30d3\u30b9\u3092\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002\u5f8c\u3067\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_ChallengeInResponse=\u8cea\u554f\u300c%1%\u300d\u306b\u5bfe\u3059\u308b\u56de\u7b54\u306b\u8cea\u554f\u6587\u306e\u4e00\u90e8\u3092\u542b\u3081\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
 Error_Multi_Username=\u6307\u5b9a\u3055\u308c\u305f\u30e6\u30fc\u30b6\u540d\u300c%1%\u300d\u306b\u8907\u6570\u306e\u30e6\u30fc\u30b6\u304c\u4e00\u81f4\u3057\u307e\u3059\u3002\u691c\u7d22\u3092\u7d5e\u308a\u8fbc\u3093\u3067\u304f\u3060\u3055\u3044\u3002
 Error_CertificateError=\u8a3c\u660e\u66f8\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f(%1%)\u3002
-Error_SyslogWriteError=Syslog\u30b5\u30fc\u30d0\u300c%1%\u300d\u3078\u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u30a8\u30e9\u30fc(%2%)\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+Error_SyslogWriteError=Syslog\u30b5\u30fc\u30d0\u3078\u306e\u66f8\u304d\u8fbc\u307f\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30a8\u30e9\u30fc: %1%
 Error_TooManyThreads=\u6700\u5927\u30b9\u30ec\u30c3\u30c9\u30ab\u30a6\u30f3\u30c8\u306e\u4e0a\u9650\u3092\u8d85\u3048\u307e\u3057\u305f\u3002\u5f8c\u3067\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_SecurityViolation=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u9055\u53cd\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5f8c\u3067\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
 Error_NoOtpConfiguration=\u30ef\u30f3\u30bf\u30a4\u30e0\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
@@ -143,11 +145,23 @@ Error_FieldBadConfirm=%1% \u500b\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u4e00
 Error_FieldRegexNoMatch=%1% \u306f\u6b63\u3057\u3044\u5f62\u5f0f\u3067\u306f\u3042\u308a\u307e\u305b\u3093
 Error_Orig_Admin_Only=\u3053\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u5b9f\u884c\u3067\u304d\u308b\u306e\u306f\u5143\u306e\u7ba1\u7406\u8005\u3060\u3051\u3067\u3059
 Error_PasswordRequired=\u3053\u306e\u64cd\u4f5c\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u5fc5\u8981\u3067\u3059
+Error_ReportingError=\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f
+Error_TokenDestIntruder=\u6700\u5927\u8a66\u884c\u56de\u6570\u3092\u8d85\u3048\u307e\u3057\u305f\u3002\u5f8c\u3067\u3001\u3082\u3046\u4e00\u5ea6\u3084\u308a\u76f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Error_OtpRecoveryUsed=\u56de\u5fa9\u306f\u4ee5\u524d\u306b\u4f7f\u7528\u3055\u308c\u305f\u53ef\u80fd\u6027\u304c\u3042\u308b\u305f\u3081\u3001\u518d\u5ea6\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093\u3002
+Error_RedirectIllegal=\u8981\u6c42\u3055\u308c\u305f\u30ea\u30c0\u30a4\u30ec\u30af\u30c8URL\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Error_CryptError=\u4e88\u671f\u3057\u306a\u3044\u6697\u53f7\u5316\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+Error_SmsSendError=SMS\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093: %1%
+Error_LdapDataError=LDAP\u30c7\u30fc\u30bf\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002
+Error_MacroParseError=\u30de\u30af\u30ed\u306e\u89e3\u6790\u30a8\u30e9\u30fc: %1%
+Error_NoProfileAssigned=\u3053\u306e\u64cd\u4f5c\u306e\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u305b\u3093\u3002
+Error_StartupError=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u59cb\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u8a73\u3057\u304f\u306f\u3001\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u3092\u3054\u78ba\u8a8d\u304f\u3060\u3055\u3044\u3002
+
+Error_RemoteErrorValue=\u30ea\u30e2\u30fc\u30c8\u30a8\u30e9\u30fc: %1%
 
 Error_ConfigUploadSuccess=\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f
 Error_ConfigUploadFailure=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002
 Error_ConfigSaveSuccess=\u8a2d\u5b9a\u304c\u6b63\u5e38\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u518d\u8d77\u52d5\u304c\u8981\u6c42\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u518d\u8d77\u52d5\u4e2d\u306f\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3067\u304d\u306a\u3044\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002\u518d\u8d77\u52d5\u8981\u6c42\u304c\u5931\u6557\u3057\u305f\u5834\u5408\u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b5\u30fc\u30d0\u3092\u624b\u52d5\u3067\u518d\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Error_ConfigFormatError=\u8a2d\u5b9a\u5f62\u5f0f\u30a8\u30e9\u30fc: %1%
+Error_ConfigFormatError=\u8a2d\u5b9a\u5f62\u5f0f\u30a8\u30e9\u30fc:  %1%
 Error_ConfigLdapFailure=LDAP\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u306b\u63a5\u7d9a\u3067\u304d\u307e\u305b\u3093\u3002
 Error_ConfigLdapSuccess=LDAP\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u30b5\u30fc\u30d0\u3078\u306e\u63a5\u7d9a\u306b\u6210\u529f\u3057\u307e\u3057\u305f
 

+ 168 - 154
pwm/servlet/src/password/pwm/i18n/Error_pt_BR.properties

@@ -1,154 +1,168 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Password_MissingConfirm=A senha cumpre os requisitos, digite a senha de confirma\u00e7\u00e3o
-Password_DoesNotMatch=As senhas n\u00e3o correspondem
-Password_Missing=Senha ausente
-Password_PreviouslyUsed=A nova senha foi usada anteriormente
-Password_BadPassword=A nova senha n\u00e3o cumpre os requisitos da regra
-Password_TooLong=A nova senha \u00e9 longa demais
-Password_TooShort=A nova senha \u00e9 curta demais
-Password_NotEnoughNum=A nova senha n\u00e3o tem n\u00fameros suficientes
-Password_NotEnoughAlpha=A nova senha n\u00e3o tem letras suficientes
-Password_NotEnoughUpper=A nova senha n\u00e3o tem letras mai\u00fasculas suficientes
-Password_NotEnoughLower=A nova senha n\u00e3o tem letras min\u00fasculas suficientes
-Password_NotEnoughSpecial=A nova senha n\u00e3o tem caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9ricos) suficientes
-Password_NotEnoughUnique=A nova senha n\u00e3o tem caracteres exclusivos suficientes
-Password_TooManyRepeat=A nova senha tem caracteres repetidos demais
-Password_TooManySpecial=A nova senha tem caracteres especiais (n\u00e3o alfanum\u00e9rico) demais
-Password_TooManyAlpha=A nova senha tem letras demais
-Password_TooManyNumeric=A nova senha tem n\u00fameros demais
-Password_TooManyLower=A nova senha tem letras min\u00fasculas demais
-Password_TooManyUpper=A nova senha tem letras mai\u00fasculas demais
-Password_TooManyOldChars=A nova senha cont\u00e9m caracteres demais da sua senha anterior
-Password_TooManyNonAlphaSpecial=A nova senha tem caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9ricos) demais
-Password_InvalidChar=A nova senha tem um caractere inv\u00e1lido
-Password_RequiredMissing=A senha n\u00e3o tem um caractere obrigat\u00f3rio
-Password_InWordlist=A nova senha \u00e9 comum demais
-Password_SameAsOld=A nova senha \u00e9 igual \u00e0 senha atual
-Password_SameAsAttr=A nova senha \u00e9 \u00f3bvia demais
-Password_FirstIsNumeric=O primeiro caractere n\u00e3o pode ser num\u00e9rico
-Password_LastIsNumeric=O \u00faltimo caractere n\u00e3o pode ser num\u00e9rico
-Password_FirstIsSpecial=O primeiro caractere n\u00e3o pode ser um caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico)
-Password_LastIsSpecial=O \u00faltimo caractere n\u00e3o pode ser um caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico)
-Password_HistoryFull=O hist\u00f3rico da nova senha est\u00e1 cheio
-Password_MeetsRules=Nova senha aceita, clique para mudar a senha
-Password_TooSoon=N\u00e3o se passou tempo suficiente desde a \u00faltima mudan\u00e7a de senha
-Password_UsingDisallowedValue=A nova senha usa um valor proibido
-Password_TooWeak=A senha \u00e9 fraca demais. Tente adicionar mais n\u00fameros, s\u00edmbolos ou letras mai\u00fasculas e min\u00fasculas mistas.
-Password_TooManyNonAlpha=A nova senha tem caracteres n\u00e3o de letras demais
-Password_NotEnoughNonAlpha=A nova senha n\u00e3o tem caracteres n\u00e3o de letra suficientes
-Password_UnknownValidation=A nova senha n\u00e3o atende os requisitos. Tente usar uma senha diferente.
-Password_NewPasswordRequired=Uma nova senha \u00e9 requerida antes de poder continuar.
-Password_Expired=A senha expirou.
-Password_CustomError=A nova senha n\u00e3o cumpre os requisitos da regra
-Password_BadOldPassword=A senha antiga est\u00e1 incorreta
-
-Error_WrongResponse=Uma ou mais respostas est\u00e3o incorretas. Tente novamente.
-Error_WrongPassword=O nome de usu\u00e1rio ou a senha \u00e9 inv\u00e1lido. Tente novamente.
-Error_Response_NoResponse=O nome de usu\u00e1rio \u00e9 inv\u00e1lido ou n\u00e3o tem uma resposta configurada
-Error_Response_TooShort=A resposta para a pergunta "%1%" \u00e9 curta demais
-Error_Response_Wordlist=A resposta para a pergunta "%1%" \u00e9 muito comum
-Error_Response_TooLong=A resposta para a pergunta "%1%" \u00e9 longa demais
-Error_Response_Duplicate=A resposta para a pergunta "%1%" n\u00e3o pode ser a mesma que a de outra pergunta
-Error_Challenge_Duplicate=Cada pergunta deve ser \u00fanica.
-Error_Missing_Challenge_Text=Texto ausente para uma pergunta fornecida pelo usu\u00e1rio
-Error_UserAuthenticated=Voc\u00ea j\u00e1 est\u00e1 autenticado.
-Error_MissingParameter=Um par\u00e2metro requerido est\u00e1 ausente.
-Error_DirectoryUnavailable=Diret\u00f3rio n\u00e3o dispon\u00edvel. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Error_Unknown=Ocorreu um erro. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Error_ActivationValidationFailed=Um ou mais valores est\u00e3o incorretos.
-Error_CantMatchUser=N\u00e3o \u00e9 poss\u00edvel localizar o nome de usu\u00e1rio. Tente novamente.
-Error_ServiceNotAvailable=O servi\u00e7o n\u00e3o est\u00e1 habilitado.
-Error_UserMisMatch=Erro de autentica\u00e7\u00e3o, feche o browser.
-Error_ActivateUserNoQueryMatch=Sua conta do usu\u00e1rio n\u00e3o \u00e9 eleg\u00edvel para ativa\u00e7\u00e3o.
-Error_AuthenticationRequired=Autentica\u00e7\u00e3o obrigat\u00f3ria.
-Error_NoChallenges=Nenhuma verifica\u00e7\u00e3o configurada.
-Error_UserIntruder=O n\u00famero m\u00e1ximo de tentativas de login para o userID foi excedido. Tente novamente mais tarde.
-Error_AddressIntruder=O n\u00famero m\u00e1ximo de tentativas de login foi excedido. Tente novamente mais tarde.
-Error_SessionIntruder=O n\u00famero m\u00e1ximo de tentativas de login para esta sess\u00e3o foi excedido. Tente novamente mais tarde.
-Error_BadSessionPassword=N\u00e3o \u00e9 poss\u00edvel estabelecer a senha da sess\u00e3o.
-Error_Unauthorized=Voc\u00ea n\u00e3o tem permiss\u00e3o para realizar a a\u00e7\u00e3o solicitada.
-Error_BadSession=N\u00e3o \u00e9 poss\u00edvel estabelecer uma sess\u00e3o com o browser. Feche o browser e tente novamente.
-Error_MissingRequiredResponse=Digite todas as respostas requeridas.
-Error_MissingRandomResponse=Adicione uma resposta aleat\u00f3ria extra.
-Error_BadCaptchaResponse=C\u00f3digo de verifica\u00e7\u00e3o incorreto, tente novamente.
-Error_CaptchaAPIError=Ocorreu um erro ao validar a resposta captcha. Feche o browser e tente novamente mais tarde. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Error_InvalidConfig=A configura\u00e7\u00e3o \u00e9 inv\u00e1lida ou est\u00e1 corrompida. Corrija o erro ou remova o arquivo de configura\u00e7\u00e3o.
-Error_InvalidFormID=A sess\u00e3o do browser \u00e9 inv\u00e1lida ou expirou. Feche o browser e tente novamente.
-Error_TokenMissingContact=N\u00e3o h\u00e1 informa\u00e7\u00f5es de contato dispon\u00edveis para a sua conta. Contate o administrador.
-Error_TokenIncorrect=C\u00f3digo incorreto, tente novamente.
-Error_BadCurrentPassword=A senha atual est\u00e1 incorreta, tente novamente.
-Error_Closing=A opera\u00e7\u00e3o n\u00e3o pode ser conclu\u00edda porque o aplicativo est\u00e1 encerrando.
-Error_Missing_GUID=N\u00e3o \u00e9 poss\u00edvel localizar um GUID para o usu\u00e1rio. Contate o administrador.
-Error_TokenExpired=O token informado est\u00e1 expirado e n\u00e3o \u00e9 mais v\u00e1lido. Tente novamente.
-Error_SecureRequestRequired=Conex\u00f5es n\u00e3o seguras (HTTP) n\u00e3o s\u00e3o permitidas para este sistema. Tente novamente usando uma conex\u00e3o protegida (HTTPS).
-Error_Writing_Responses=Ocorreu um erro ao salvar as perguntas da resposta. Contate o administrador.
-Error_Writing_Otp_Secret=Ocorreu um erro ao salvar o segredo OTP. Contate o administrador.
-Error_Unlock_Failure=Ocorreu um erro ao desbloquear a conta. Contate o administrador.
-Error_Update_Attrs_Failure=Ocorreu um erro ao salvar as informa\u00e7\u00f5es do perfil. Contate o administrador.
-Error_Activation_Failure=Ocorreu um erro ao ativar a conta. Contate o administrador.
-Error_NewUser_Failure=Ocorreu um erro ao criar a nova conta do usu\u00e1rio. Contate o administrador.
-Error_Activation=N\u00e3o \u00e9 poss\u00edvel ativar a conta usando as informa\u00e7\u00f5es fornecidas. Tente novamente.
-Error_DB_Unavailable=Banco de dados n\u00e3o dispon\u00edvel. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Error_LocalDB_Unavailable=LocalDB n\u00e3o dispon\u00edvel. Contate o administrador.
-Error_App_Unavailable=O aplicativo n\u00e3o est\u00e1 dispon\u00edvel ou est\u00e1 reiniciando. Se esse erro se repetir, contate o suporte t\u00e9cnico.
-Error_IncorrectRequestSequence=Uma solicita\u00e7\u00e3o de p\u00e1gina fora da ordem foi recebida. Tente novamente mais tarde.
-Error_UnreachableCloudService=O Servi\u00e7o em Nuvem estava inacess\u00edvel.
-Error_InvalidSecurityKey=A Chave de Seguran\u00e7a est\u00e1 ausente ou \u00e9 inv\u00e1lida.
-Error_Clearing_Responses=Ocorreu um erro ao limpar as perguntas da resposta. Contate o administrador.
-Error_ServiceUnreachable=Um servi\u00e7o obrigat\u00f3rio n\u00e3o est\u00e1 dispon\u00edvel. Tente novamente mais tarde.
-Error_ChallengeInResponse=A resposta para a pergunta "%1%" n\u00e3o pode conter parte do texto da pergunta.
-Error_Multi_Username=V\u00e1rios usu\u00e1rios combinam com o nome de usu\u00e1rio "%1%" fornecido. Refina sua pesquisa.
-Error_CertificateError=Foi encontrado um erro de certificado: %1%.
-Error_SyslogWriteError=Foi encontrado um problema ao gravar no servidor syslog '%1%', erro: %2%
-Error_TooManyThreads=O limite m\u00e1ximo de contagem de thread foi excedido, tente novamente mais tarde
-Error_SecurityViolation=Ocorreu uma viola\u00e7\u00e3o de seguran\u00e7a. Tente novamente mais tarde.
-Error_NoOtpConfiguration=Nenhuma  senha para um \u00fanico uso configurada.
-Error_TrialViolation=Os limites da avalia\u00e7\u00e3o foram excedidos.
-Error_AccountDisabled=A conta est\u00e1 desativada.
-Error_AccountExpired=A conta est\u00e1 expirada.
-Error_WrongOtpToken=Senha para um \u00fanico uso incorreta.
-Error_AttrIntruder=O n\u00famero m\u00e1ximo de tentativas de pesquisa foi excedido. Tente novamente mais tarde.
-Error_AuditWrite=N\u00e3o \u00e9 poss\u00edvel gravar registro de auditoria.
-Error_LdapIntruder=O n\u00famero m\u00e1ximo de tentativas de login para o userID foi excedido. Tente novamente mais tarde.
-Error_NoLdapConnection=N\u00e3o h\u00e1 uma conex\u00e3o dispon\u00edvel com o diret\u00f3rio requerido.
-Error_OAuthError=Ocorreu um erro ao usar o protocolo de autentica\u00e7\u00e3o OAuth. Tente novamente mais tarde.
-Error_FieldRequired=%1% \u00e9 obrigat\u00f3rio
-Error_FieldNotANumber=%1% deve ser um n\u00famero
-Error_FieldInvalidEmail=%1% n\u00e3o \u00e9 um endere\u00e7o de e-mail v\u00e1lido
-Error_FieldTooShort=%1% \u00e9 curto demais
-Error_FieldTooLong=%1% \u00e9 longo demais
-Error_FieldDuplicate=%1% j\u00e1 est\u00e1 sendo usado, use um valor diferente
-Error_FieldBadConfirm=%1% campos n\u00e3o combinam
-Error_FieldRegexNoMatch=%1% n\u00e3o est\u00e1 no formato correto
-Error_Orig_Admin_Only=Somente o administrador original pode executar esta propriedade
-Error_PasswordRequired=\u00c9 necess\u00e1rio uma senha para realizar esta opera\u00e7\u00e3o
-
-Error_ConfigUploadSuccess=\u00caxito no upload do arquivo
-Error_ConfigUploadFailure=Falha no upload do arquivo.
-Error_ConfigSaveSuccess=Configura\u00e7\u00e3o salva com sucesso. A reinicializa\u00e7\u00e3o do aplicativo foi solicitada. O aplicativo pode n\u00e3o estar dispon\u00edvel durante a reinicializa\u00e7\u00e3o. Se a solicita\u00e7\u00e3o de reinicializa\u00e7\u00e3o falhar, poder\u00e1 ser necess\u00e1rio reiniciar o servidor de aplicativos manualmente.
-Error_ConfigFormatError=Erro de formato da configura\u00e7\u00e3o: %1%
-Error_ConfigLdapFailure=N\u00e3o \u00e9 poss\u00edvel se conectar ao servidor do diret\u00f3rio LDAP.
-Error_ConfigLdapSuccess=Conectado com sucesso ao servidor do diret\u00f3rio LDAP
-
-Error_HTTP_404=N\u00e3o foi poss\u00edvel localizar a p\u00e1gina solicitada.
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Password_MissingConfirm=A senha cumpre os requisitos, digite a senha de confirma\u00e7\u00e3o
+Password_DoesNotMatch=As senhas n\u00e3o correspondem
+Password_Missing=Senha ausente
+Password_PreviouslyUsed=A nova senha foi usada anteriormente
+Password_BadPassword=A nova senha n\u00e3o cumpre os requisitos da regra
+Password_TooLong=A nova senha \u00e9 longa demais
+Password_TooShort=A nova senha \u00e9 curta demais
+Password_NotEnoughNum=A nova senha n\u00e3o tem n\u00fameros suficientes
+Password_NotEnoughAlpha=A nova senha n\u00e3o tem letras suficientes
+Password_NotEnoughUpper=A nova senha n\u00e3o tem letras mai\u00fasculas suficientes
+Password_NotEnoughLower=A nova senha n\u00e3o tem letras min\u00fasculas suficientes
+Password_NotEnoughSpecial=A nova senha n\u00e3o tem caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9ricos) suficientes
+Password_NotEnoughUnique=A nova senha n\u00e3o tem caracteres exclusivos suficientes
+Password_TooManyRepeat=A nova senha tem caracteres repetidos demais
+Password_TooManySpecial=A nova senha tem caracteres especiais (n\u00e3o alfanum\u00e9rico) demais
+Password_TooManyAlpha=A nova senha tem letras demais
+Password_TooManyNumeric=A nova senha tem n\u00fameros demais
+Password_TooManyLower=A nova senha tem letras min\u00fasculas demais
+Password_TooManyUpper=A nova senha tem letras mai\u00fasculas demais
+Password_TooManyOldChars=A nova senha cont\u00e9m caracteres demais da sua senha anterior
+Password_TooManyNonAlphaSpecial=A nova senha tem caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9ricos) demais
+Password_InvalidChar=A nova senha tem um caractere inv\u00e1lido
+Password_RequiredMissing=A senha n\u00e3o tem um caractere obrigat\u00f3rio
+Password_InWordlist=A nova senha \u00e9 comum demais
+Password_SameAsOld=A nova senha \u00e9 igual \u00e0 senha atual
+Password_SameAsAttr=A nova senha \u00e9 \u00f3bvia demais
+Password_FirstIsNumeric=O primeiro caractere n\u00e3o pode ser num\u00e9rico
+Password_LastIsNumeric=O \u00faltimo caractere n\u00e3o pode ser num\u00e9rico
+Password_FirstIsSpecial=O primeiro caractere n\u00e3o pode ser um caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico)
+Password_LastIsSpecial=O \u00faltimo caractere n\u00e3o pode ser um caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico)
+Password_HistoryFull=O hist\u00f3rico da nova senha est\u00e1 cheio
+Password_MeetsRules=Nova senha aceita, clique para mudar a senha
+Password_TooSoon=N\u00e3o se passou tempo suficiente desde a \u00faltima mudan\u00e7a de senha
+Password_UsingDisallowedValue=A nova senha usa um valor proibido
+Password_TooWeak=A senha \u00e9 fraca demais. Tente adicionar mais n\u00fameros, s\u00edmbolos ou letras mai\u00fasculas e min\u00fasculas mistas.
+Password_TooManyNonAlpha=A nova senha tem caracteres n\u00e3o de letras demais
+Password_NotEnoughNonAlpha=A nova senha n\u00e3o tem caracteres n\u00e3o de letra suficientes
+Password_UnknownValidation=A nova senha n\u00e3o atende os requisitos. Tente usar uma senha diferente.
+Password_NewPasswordRequired=Uma nova senha \u00e9 requerida antes de poder continuar.
+Password_Expired=A senha expirou.
+Password_CustomError=A nova senha n\u00e3o cumpre os requisitos da regra
+Password_BadOldPassword=A senha antiga est\u00e1 incorreta
+Password_NotEnoughGroups=A nova senha n\u00e3o cont\u00e9m tipos diferentes de caracteres suficientes
+Password_TooManyConsecutive=A nova senha tem caracteres consecutivos demais (como 123456... ou abcdef...)
+
+Error_WrongResponse=Uma ou mais respostas est\u00e3o incorretas. Tente novamente.
+Error_WrongPassword=O nome de usu\u00e1rio ou a senha \u00e9 inv\u00e1lido. Tente novamente.
+Error_Response_NoResponse=O nome de usu\u00e1rio \u00e9 inv\u00e1lido ou n\u00e3o pode ser usado para esse recurso
+Error_Response_TooShort=A resposta para a pergunta "%1%" \u00e9 curta demais
+Error_Response_Wordlist=A resposta para a pergunta "%1%" \u00e9 muito comum
+Error_Response_TooLong=A resposta para a pergunta "%1%" \u00e9 longa demais
+Error_Response_Duplicate=A resposta para a pergunta "%1%" n\u00e3o pode ser a mesma que a de outra pergunta
+Error_Challenge_Duplicate=Cada pergunta deve ser \u00fanica.
+Error_Missing_Challenge_Text=Texto ausente para uma pergunta fornecida pelo usu\u00e1rio
+Error_UserAuthenticated=Voc\u00ea j\u00e1 est\u00e1 autenticado.
+Error_MissingParameter=Um par\u00e2metro requerido est\u00e1 ausente.
+Error_DirectoryUnavailable=Diret\u00f3rio n\u00e3o dispon\u00edvel. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Error_Unknown=Ocorreu um erro. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Error_ActivationValidationFailed=Um ou mais valores est\u00e3o incorretos.
+Error_CantMatchUser=N\u00e3o \u00e9 poss\u00edvel localizar o nome de usu\u00e1rio. Tente novamente.
+Error_ServiceNotAvailable=O servi\u00e7o n\u00e3o est\u00e1 habilitado.
+Error_UserMisMatch=Erro de autentica\u00e7\u00e3o, feche o browser.
+Error_ActivateUserNoQueryMatch=Sua conta do usu\u00e1rio n\u00e3o \u00e9 eleg\u00edvel para ativa\u00e7\u00e3o.
+Error_AuthenticationRequired=Autentica\u00e7\u00e3o obrigat\u00f3ria.
+Error_NoChallenges=Nenhuma verifica\u00e7\u00e3o configurada.
+Error_UserIntruder=O n\u00famero m\u00e1ximo de tentativas de login para o userID foi excedido. Tente novamente mais tarde.
+Error_AddressIntruder=O n\u00famero m\u00e1ximo de tentativas de login foi excedido. Tente novamente mais tarde.
+Error_SessionIntruder=O n\u00famero m\u00e1ximo de tentativas de login para esta sess\u00e3o foi excedido. Tente novamente mais tarde.
+Error_BadSessionPassword=N\u00e3o \u00e9 poss\u00edvel estabelecer a senha da sess\u00e3o.
+Error_Unauthorized=Voc\u00ea n\u00e3o tem permiss\u00e3o para realizar a a\u00e7\u00e3o solicitada.
+Error_BadSession=N\u00e3o \u00e9 poss\u00edvel estabelecer uma sess\u00e3o com o browser. Feche o browser e tente novamente.
+Error_MissingRequiredResponse=Digite todas as respostas requeridas.
+Error_MissingRandomResponse=Adicione uma resposta aleat\u00f3ria extra.
+Error_BadCaptchaResponse=C\u00f3digo de verifica\u00e7\u00e3o incorreto, tente novamente.
+Error_CaptchaAPIError=Ocorreu um erro ao validar a resposta captcha. Feche o browser e tente novamente mais tarde. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Error_InvalidConfig=A configura\u00e7\u00e3o \u00e9 inv\u00e1lida ou est\u00e1 corrompida. Corrija o erro ou remova o arquivo de configura\u00e7\u00e3o.
+Error_InvalidFormID=A sess\u00e3o do browser \u00e9 inv\u00e1lida ou expirou. Tente novamente.
+Error_TokenMissingContact=N\u00e3o h\u00e1 informa\u00e7\u00f5es de contato dispon\u00edveis para a sua conta. Contate o administrador.
+Error_TokenIncorrect=C\u00f3digo incorreto, tente novamente.
+Error_BadCurrentPassword=A senha atual est\u00e1 incorreta, tente novamente.
+Error_Closing=A opera\u00e7\u00e3o n\u00e3o pode ser conclu\u00edda porque o aplicativo est\u00e1 encerrando.
+Error_Missing_GUID=N\u00e3o \u00e9 poss\u00edvel localizar um GUID para o usu\u00e1rio. Contate o administrador.
+Error_TokenExpired=O token informado est\u00e1 expirado e n\u00e3o \u00e9 mais v\u00e1lido. Tente novamente.
+Error_SecureRequestRequired=Conex\u00f5es n\u00e3o seguras (HTTP) n\u00e3o s\u00e3o permitidas para este sistema. Tente novamente usando uma conex\u00e3o protegida (HTTPS).
+Error_Writing_Responses=Ocorreu um erro ao salvar as perguntas da resposta. Contate o administrador.
+Error_Writing_Otp_Secret=Ocorreu um erro ao salvar o segredo OTP. Contate o administrador.
+Error_Unlock_Failure=Ocorreu um erro ao desbloquear a conta. Contate o administrador.
+Error_Update_Attrs_Failure=Ocorreu um erro ao salvar as informa\u00e7\u00f5es do perfil. Contate o administrador.
+Error_Activation_Failure=Ocorreu um erro ao ativar a conta. Contate o administrador.
+Error_NewUser_Failure=Ocorreu um erro ao criar a nova conta do usu\u00e1rio. Contate o administrador.
+Error_Activation=N\u00e3o \u00e9 poss\u00edvel ativar a conta usando as informa\u00e7\u00f5es fornecidas. Tente novamente.
+Error_DB_Unavailable=Banco de dados n\u00e3o dispon\u00edvel. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Error_LocalDB_Unavailable=LocalDB n\u00e3o dispon\u00edvel. Contate o administrador.
+Error_App_Unavailable=O aplicativo n\u00e3o est\u00e1 dispon\u00edvel ou est\u00e1 reiniciando. Se esse erro se repetir, contate o suporte t\u00e9cnico.
+Error_IncorrectRequestSequence=Foi recebida uma solicita\u00e7\u00e3o de p\u00e1gina fora da ordem. N\u00e3o use o bot\u00e3o Voltar do browser. Tente novamente.
+Error_UnreachableCloudService=Um servi\u00e7o remoto estava inacess\u00edvel.
+Error_InvalidSecurityKey=A Chave de Seguran\u00e7a est\u00e1 ausente ou \u00e9 inv\u00e1lida.
+Error_Clearing_Responses=Ocorreu um erro ao limpar as perguntas da resposta. Contate o administrador.
+Error_ServiceUnreachable=Um servi\u00e7o obrigat\u00f3rio n\u00e3o est\u00e1 dispon\u00edvel. Tente novamente mais tarde.
+Error_ChallengeInResponse=A resposta para a pergunta "%1%" n\u00e3o pode conter parte do texto da pergunta.
+Error_Multi_Username=V\u00e1rios usu\u00e1rios combinam com o nome de usu\u00e1rio "%1%" fornecido. Refina sua pesquisa.
+Error_CertificateError=Foi encontrado um erro de certificado: %1%.
+Error_SyslogWriteError=Foi encontrado um problema ao gravar no servidor syslog, erro: %1%
+Error_TooManyThreads=O limite m\u00e1ximo de contagem de thread foi excedido, tente novamente mais tarde
+Error_SecurityViolation=Ocorreu uma viola\u00e7\u00e3o de seguran\u00e7a. Tente novamente mais tarde.
+Error_NoOtpConfiguration=Nenhuma  senha para um \u00fanico uso configurada.
+Error_TrialViolation=Os limites da avalia\u00e7\u00e3o foram excedidos.
+Error_AccountDisabled=A conta est\u00e1 desativada.
+Error_AccountExpired=A conta est\u00e1 expirada.
+Error_WrongOtpToken=Senha para um \u00fanico uso incorreta.
+Error_AttrIntruder=O n\u00famero m\u00e1ximo de tentativas de pesquisa foi excedido. Tente novamente mais tarde.
+Error_AuditWrite=N\u00e3o \u00e9 poss\u00edvel gravar registro de auditoria.
+Error_LdapIntruder=O n\u00famero m\u00e1ximo de tentativas de login para o userID foi excedido. Tente novamente mais tarde.
+Error_NoLdapConnection=N\u00e3o h\u00e1 uma conex\u00e3o dispon\u00edvel com o diret\u00f3rio requerido.
+Error_OAuthError=Ocorreu um erro ao usar o protocolo de autentica\u00e7\u00e3o OAuth. Tente novamente mais tarde.
+Error_FieldRequired=%1% \u00e9 obrigat\u00f3rio
+Error_FieldNotANumber=%1% deve ser um n\u00famero
+Error_FieldInvalidEmail=%1% n\u00e3o \u00e9 um endere\u00e7o de e-mail v\u00e1lido
+Error_FieldTooShort=%1% \u00e9 curto demais
+Error_FieldTooLong=%1% \u00e9 longo demais
+Error_FieldDuplicate=%1% j\u00e1 est\u00e1 sendo usado, use um valor diferente
+Error_FieldBadConfirm=%1% campos n\u00e3o combinam
+Error_FieldRegexNoMatch=%1% n\u00e3o est\u00e1 no formato correto
+Error_Orig_Admin_Only=Somente o administrador original pode executar esta propriedade
+Error_PasswordRequired=\u00c9 necess\u00e1rio uma senha para realizar esta opera\u00e7\u00e3o
+Error_ReportingError=Ocorreu um erro na gera\u00e7\u00e3o do relat\u00f3rio
+Error_TokenDestIntruder=O m\u00e1ximo de tentativas foi excedido. Tente novamente mais tarde.
+Error_OtpRecoveryUsed=A recupera\u00e7\u00e3o pode ter sido utilizada anteriormente e n\u00e3o pode ser utilizada outra vez.
+Error_RedirectIllegal=O URL de redirecionamento solicitado n\u00e3o \u00e9 permitido.
+Error_CryptError=Ocorreu um erro de criptografia inesperado.
+Error_SmsSendError=N\u00e3o foi poss\u00edvel enviar a mensagem sms: %1%
+Error_LdapDataError=Ocorreu um erro de dados LDAP.
+Error_MacroParseError=Erro de an\u00e1lise de macro: %1%
+Error_NoProfileAssigned=Nenhum perfil foi atribu\u00eddo a esta opera\u00e7\u00e3o.
+Error_StartupError=Ocorreu um erro ao iniciar o aplicativo. Consulte os registros para obter informa\u00e7\u00f5es.
+
+Error_RemoteErrorValue=Erro Remoto: %1%
+
+Error_ConfigUploadSuccess=\u00caxito no upload do arquivo
+Error_ConfigUploadFailure=Falha no upload do arquivo.
+Error_ConfigSaveSuccess=Configura\u00e7\u00e3o salva com sucesso. A reinicializa\u00e7\u00e3o do aplicativo foi solicitada. O aplicativo pode n\u00e3o estar dispon\u00edvel durante a reinicializa\u00e7\u00e3o. Se a solicita\u00e7\u00e3o de reinicializa\u00e7\u00e3o falhar, poder\u00e1 ser necess\u00e1rio reiniciar o servidor de aplicativos manualmente.
+Error_ConfigFormatError=Erro de formato da configura\u00e7\u00e3o: %1%
+Error_ConfigLdapFailure=N\u00e3o \u00e9 poss\u00edvel se conectar ao servidor do diret\u00f3rio LDAP.
+Error_ConfigLdapSuccess=Conectado com sucesso ao servidor do diret\u00f3rio LDAP
+
+Error_HTTP_404=N\u00e3o foi poss\u00edvel localizar a p\u00e1gina solicitada.

+ 15 - 6
pwm/servlet/src/password/pwm/i18n/Error_sv.properties

@@ -63,10 +63,11 @@ Password_Expired=L\u00f6senordet har g\u00e5tt ut.
 Password_CustomError=Det nya l\u00f6senordet uppfyller inte regelkraven
 Password_BadOldPassword=Det gamla l\u00f6senordet \u00e4r felaktigt
 Password_NotEnoughGroups=Det nya l\u00f6senordet inneh\u00e5ller inte tillr\u00e4ckligt m\u00e5nga olika typer av tecken
+Password_TooManyConsecutive=Det nya l\u00f6senordet har f\u00f6r m\u00e5nga tecken i ordningsf\u00f6ljd (t.ex. 123456... eller abcdef...)
 
 Error_WrongResponse=Ett eller flera svar \u00e4r fel. F\u00f6rs\u00f6k igen.
 Error_WrongPassword=Ogiltigt anv\u00e4ndarnamn eller l\u00f6senord. F\u00f6rs\u00f6k igen.
-Error_Response_NoResponse=Anv\u00e4ndarnamnet \u00e4r ogiltigt eller har inget konfigurerat svar
+Error_Response_NoResponse=Anv\u00e4ndarnamnet \u00e4r ogiltigt eller inte kvalificerat att anv\u00e4nda den h\u00e4r funktionen
 Error_Response_TooShort=Svaret p\u00e5 fr\u00e5gan "%1%" \u00e4r f\u00f6r kort
 Error_Response_Wordlist=Svaret p\u00e5 fr\u00e5gan "%1%" \u00e4r f\u00f6r vanligt
 Error_Response_TooLong=Svaret p\u00e5 fr\u00e5gan "%1%" \u00e4r f\u00f6r l\u00e5ngt
@@ -95,7 +96,7 @@ Error_MissingRandomResponse=L\u00e4gg till ytterligare ett slumpm\u00e4ssigt sva
 Error_BadCaptchaResponse=Felaktig verifieringskod. F\u00f6rs\u00f6k igen.
 Error_CaptchaAPIError=Ett fel intr\u00e4ffade n\u00e4r captcha-svaret validerades. St\u00e4ng webbl\u00e4saren och f\u00f6rs\u00f6k igen senare. Om felet intr\u00e4ffar fler g\u00e5nger kontaktar du supportavdelningen.
 Error_InvalidConfig=Konfigurationen \u00e4r ogiltig eller skadad. Korrigera felet eller ta bort konfigurationsfilen.
-Error_InvalidFormID=Din webbl\u00e4sarsession \u00e4r ogiltig eller har g\u00e5tt ut. St\u00e4ng webbl\u00e4saren och f\u00f6rs\u00f6k igen.
+Error_InvalidFormID=Din webbl\u00e4sarsession \u00e4r ogiltig eller har g\u00e5tt ut. F\u00f6rs\u00f6k igen.
 Error_TokenMissingContact=Ingen kontaktinformation \u00e4r tillg\u00e4nglig f\u00f6r ditt konto. Kontakta administrat\u00f6ren.
 Error_TokenIncorrect=Felaktig kod. F\u00f6rs\u00f6k igen.
 Error_BadCurrentPassword=Det nuvarande l\u00f6senordet \u00e4r felaktigt. F\u00f6rs\u00f6k igen.
@@ -113,15 +114,15 @@ Error_Activation=Det g\u00e5r inte att aktivera ditt konto med den information d
 Error_DB_Unavailable=Databasen \u00e4r inte tillg\u00e4nglig. Om felet intr\u00e4ffar fler g\u00e5nger kontaktar du din supportavdelning.
 Error_LocalDB_Unavailable=LocalDB \u00e4r inte tillg\u00e4nglig. Kontakta administrat\u00f6ren.
 Error_App_Unavailable=Programmet \u00e4r inte tillg\u00e4ngligt eller startas om. Om felet intr\u00e4ffar fler g\u00e5nger kontaktar du din supportavdelning.
-Error_IncorrectRequestSequence=En felaktig sidbeg\u00e4ran har tagits emot. F\u00f6rs\u00f6k igen.
-Error_UnreachableCloudService=Det gick inte att n\u00e5 molntj\u00e4nsten.
+Error_IncorrectRequestSequence=En felaktig sidbeg\u00e4ran har tagits emot. Anv\u00e4nd inte knappen Bak\u00e5t i din webbl\u00e4sare. F\u00f6rs\u00f6k igen.
+Error_UnreachableCloudService=Det gick inte att n\u00e5 en fj\u00e4rrtj\u00e4nst.
 Error_InvalidSecurityKey=S\u00e4kerhetsnyckeln saknas eller \u00e4r ogiltig.
 Error_Clearing_Responses=Ett fel intr\u00e4ffade n\u00e4r svarsfr\u00e5gorna rensades. Kontakta administrat\u00f6ren.
 Error_ServiceUnreachable=En obligatorisk tj\u00e4nst \u00e4r inte tillg\u00e4nglig. F\u00f6rs\u00f6k igen senare.
 Error_ChallengeInResponse=Svaret p\u00e5 fr\u00e5gan "%1%" f\u00e5r inte inneh\u00e5lla en del av fr\u00e5gans text.
 Error_Multi_Username=Flera anv\u00e4ndare matchar angivet anv\u00e4ndarnamn, "%1%". Precisera din s\u00f6kning.
 Error_CertificateError=Ett certifikatfel har p\u00e5tr\u00e4ffats: %1%.
-Error_SyslogWriteError=Ett problem p\u00e5tr\u00e4ffades vid skrivning till syslog-servern '%1%'. Fel: %2%
+Error_SyslogWriteError=Ett problem p\u00e5tr\u00e4ffades vid skrivning till syslog-servern. Fel: %1%
 Error_TooManyThreads=Det maximala antalet tr\u00e5dar har \u00f6verskridits. F\u00f6rs\u00f6k igen senare.
 Error_SecurityViolation=En s\u00e4kerhets\u00f6vertr\u00e4delse har intr\u00e4ffat. F\u00f6rs\u00f6k igen senare.
 Error_NoOtpConfiguration=Inget eng\u00e5ngsl\u00f6senord har konfigurerats.
@@ -148,11 +149,19 @@ Error_ReportingError=Ett fel intr\u00e4ffade n\u00e4r rapporten skapades
 Error_TokenDestIntruder=Det maximala antalet f\u00f6rs\u00f6k har \u00f6verskridits. F\u00f6rs\u00f6k igen senare.
 Error_OtpRecoveryUsed=\u00c5terst\u00e4llningen har anv\u00e4nts tidigare och f\u00e5r inte anv\u00e4ndas igen.
 Error_RedirectIllegal=Beg\u00e4rd URL f\u00f6r omdirigering till\u00e5ts inte.
+Error_CryptError=Ett ov\u00e4ntat kryptografiskt fel har intr\u00e4ffat.
+Error_SmsSendError=Det gick inte att skicka SMS: %1%
+Error_LdapDataError=Ett LDAP-datafel har intr\u00e4ffat.
+Error_MacroParseError=Makroanalysfel: %1%
+Error_NoProfileAssigned=Ingen profil har tilldelats f\u00f6r denna operation.
+Error_StartupError=Ett fel intr\u00e4ffade n\u00e4r programmet startades. Mer information finns i loggfilerna.
+
+Error_RemoteErrorValue=Fj\u00e4rrfel: %1%
 
 Error_ConfigUploadSuccess=Filen har \u00f6verf\u00f6rts
 Error_ConfigUploadFailure=Det gick inte att \u00f6verf\u00f6ra filen.
 Error_ConfigSaveSuccess=Konfigurationen har sparats. Omstart av programmet har beg\u00e4rts. Programmet kanske inte \u00e4r tillg\u00e4ngligt under omstarten. Om beg\u00e4ran om omstart misslyckas kan du bli tvungen att starta om programservern manuellt.
-Error_ConfigFormatError=Fel i konfigurationsformatet.
+Error_ConfigFormatError=Fel i konfigurationsformatet: %1%
 Error_ConfigLdapFailure=Det g\u00e5r inte att ansluta till LDAP-katalogservern.
 Error_ConfigLdapSuccess=Ansluten till LDAP-katalogservern
 

+ 168 - 154
pwm/servlet/src/password/pwm/i18n/Error_zh_TW.properties

@@ -1,154 +1,168 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-Password_MissingConfirm=\u5bc6\u78bc\u7b26\u5408\u8981\u6c42\uff0c\u8acb\u8f38\u5165\u78ba\u8a8d\u5bc6\u78bc
-Password_DoesNotMatch=\u5bc6\u78bc\u4e0d\u76f8\u7b26
-Password_Missing=\u5bc6\u78bc\u907a\u5931
-Password_PreviouslyUsed=\u65b0\u5bc6\u78bc\u4e4b\u524d\u5df2\u4f7f\u7528\u904e
-Password_BadPassword=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u898f\u5247\u8981\u6c42
-Password_TooLong=\u65b0\u5bc6\u78bc\u592a\u9577
-Password_TooShort=\u65b0\u5bc6\u78bc\u592a\u77ed
-Password_NotEnoughNum=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u6578\u5b57
-Password_NotEnoughAlpha=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5b57\u6bcd
-Password_NotEnoughUpper=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5927\u5beb\u5b57\u6bcd
-Password_NotEnoughLower=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5c0f\u5beb\u5b57\u6bcd
-Password_NotEnoughSpecial=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
-Password_NotEnoughUnique=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u552f\u4e00\u5b57\u5143
-Password_TooManyRepeat=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u91cd\u8907\u5b57\u5143
-Password_TooManySpecial=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u7279\u6b8a (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143
-Password_TooManyAlpha=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5b57\u6bcd
-Password_TooManyNumeric=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u6578\u5b57
-Password_TooManyLower=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5c0f\u5beb\u5b57\u6bcd
-Password_TooManyUpper=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5927\u5beb\u5b57\u6bcd
-Password_TooManyOldChars=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u820a\u5bc6\u78bc\u7684\u5b57\u5143
-Password_TooManyNonAlphaSpecial=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
-Password_InvalidChar=\u65b0\u5bc6\u78bc\u5305\u542b\u7121\u6548\u5b57\u5143
-Password_RequiredMissing=\u65b0\u5bc6\u78bc\u7f3a\u5c11\u5fc5\u8981\u5b57\u5143
-Password_InWordlist=\u65b0\u5bc6\u78bc\u592a\u5e38\u898b
-Password_SameAsOld=\u65b0\u5bc6\u78bc\u8207\u76ee\u524d\u5bc6\u78bc\u76f8\u540c
-Password_SameAsAttr=\u65b0\u5bc6\u78bc\u592a\u660e\u986f
-Password_FirstIsNumeric=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57
-Password_LastIsNumeric=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57
-Password_FirstIsSpecial=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
-Password_LastIsSpecial=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
-Password_HistoryFull=\u65b0\u5bc6\u78bc\u6b77\u7a0b\u5df2\u6eff
-Password_MeetsRules=\u5df2\u63a5\u53d7\u65b0\u5bc6\u78bc\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u8b8a\u66f4\u5bc6\u78bc\u300d
-Password_TooSoon=\u5f9e\u4e0a\u6b21\u5bc6\u78bc\u8b8a\u66f4\u4e4b\u5f8c\u7d93\u904e\u7684\u6642\u9593\u4e0d\u8db3
-Password_UsingDisallowedValue=\u65b0\u5bc6\u78bc\u4f7f\u7528\u4e0d\u5141\u8a31\u7684\u503c
-Password_TooWeak=\u5bc6\u78bc\u592a\u5f31\u3002\u8acb\u5617\u8a66\u52a0\u5165\u66f4\u591a\u6578\u5b57\u3001\u7b26\u865f\u6216\u6df7\u5408\u5927\u5c0f\u5beb\u5b57\u6bcd\u3002
-Password_TooManyNonAlpha=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u975e\u5b57\u6bcd\u5b57\u5143
-Password_NotEnoughNonAlpha=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u975e\u5b57\u6bcd\u5b57\u5143
-Password_UnknownValidation=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u8981\u6c42\u3002\u8acb\u5617\u8a66\u4f7f\u7528\u4e0d\u540c\u7684\u5bc6\u78bc\u3002
-Password_NewPasswordRequired=\u60a8\u9700\u8981\u65b0\u5bc6\u78bc\u624d\u80fd\u7e7c\u7e8c\u3002
-Password_Expired=\u5bc6\u78bc\u5df2\u904e\u671f\u3002
-Password_CustomError=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u898f\u5247\u8981\u6c42
-Password_BadOldPassword=\u820a\u5bc6\u78bc\u4e0d\u6b63\u78ba
-
-Error_WrongResponse=\u4e00\u6216\u591a\u500b\u56de\u61c9\u4e0d\u6b63\u78ba\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_WrongPassword=\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_Response_NoResponse=\u4f7f\u7528\u8005\u540d\u7a31\u7121\u6548\u6216\u672a\u8a2d\u5b9a\u56de\u61c9
-Error_Response_TooShort=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u77ed
-Error_Response_Wordlist=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u5e38\u7528
-Error_Response_TooLong=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u9577
-Error_Response_Duplicate=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u4e0d\u53ef\u4ee5\u8207\u5176\u4ed6\u56de\u61c9\u76f8\u540c
-Error_Challenge_Duplicate=\u6bcf\u500b\u554f\u984c\u90fd\u5fc5\u9808\u4e0d\u540c\u3002
-Error_Missing_Challenge_Text=\u4f7f\u7528\u8005\u63d0\u4f9b\u7684\u554f\u984c\u907a\u5931\u6587\u5b57
-Error_UserAuthenticated=\u60a8\u5df2\u901a\u904e\u9a57\u8b49\u3002
-Error_MissingParameter=\u907a\u5931\u5fc5\u8981\u53c3\u6578\u3002
-Error_DirectoryUnavailable=\u7121\u6cd5\u4f7f\u7528\u76ee\u9304\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Error_Unknown=\u767c\u751f\u932f\u8aa4\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Error_ActivationValidationFailed=\u4e00\u6216\u591a\u500b\u503c\u4e0d\u6b63\u78ba\u3002
-Error_CantMatchUser=\u627e\u4e0d\u5230\u4f7f\u7528\u8005\u540d\u7a31\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_ServiceNotAvailable=\u672a\u555f\u7528\u670d\u52d9\u3002
-Error_UserMisMatch=\u9a57\u8b49\u932f\u8aa4\uff0c\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\u3002
-Error_ActivateUserNoQueryMatch=\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u4e0d\u7b26\u5408\u555f\u52d5\u8cc7\u683c\u3002
-Error_AuthenticationRequired=\u9700\u8981\u9a57\u8b49\u3002
-Error_NoChallenges=\u672a\u8a2d\u5b9a\u4efb\u4f55\u8655\u7406\u5b89\u5168\u3002
-Error_UserIntruder=\u60a8\u7684 userID \u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_AddressIntruder=\u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_SessionIntruder=\u6b64\u5de5\u4f5c\u968e\u6bb5\u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_BadSessionPassword=\u7121\u6cd5\u5efa\u7acb\u5de5\u4f5c\u968e\u6bb5\u5bc6\u78bc\u3002
-Error_Unauthorized=\u60a8\u6c92\u6709\u57f7\u884c\u8981\u6c42\u52d5\u4f5c\u7684\u6b0a\u9650\u3002
-Error_BadSession=\u7121\u6cd5\u5efa\u7acb\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u7136\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_MissingRequiredResponse=\u8acb\u8f38\u5165\u6240\u6709\u5fc5\u8981\u7684\u56de\u61c9\u3002
-Error_MissingRandomResponse=\u8acb\u65b0\u589e\u5176\u4ed6\u96a8\u6a5f\u56de\u61c9\u3002
-Error_BadCaptchaResponse=\u9a57\u8b49\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_CaptchaAPIError=\u9a57\u8b49 captcha \u56de\u61c9\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u7136\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Error_InvalidConfig=\u7d44\u614b\u7121\u6548\u6216\u640d\u6bc0\u3002\u8acb\u4fee\u6b63\u932f\u8aa4\u6216\u79fb\u9664\u7d44\u614b\u6a94\u6848\u3002
-Error_InvalidFormID=\u60a8\u7684\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u7121\u6548\u6216\u5df2\u904e\u671f\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u7136\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_TokenMissingContact=\u60a8\u7684\u5e33\u6236\u6c92\u6709\u53ef\u7528\u7684\u806f\u7d61\u8cc7\u8a0a\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_TokenIncorrect=\u9a57\u8b49\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_BadCurrentPassword=\u76ee\u524d\u7684\u5bc6\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_Closing=\u7121\u6cd5\u5b8c\u6210\u64cd\u4f5c\uff0c\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u6b63\u5728\u95dc\u6a5f\u3002
-Error_Missing_GUID=\u627e\u4e0d\u5230\u4f7f\u7528\u8005\u7684 GUID\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_TokenExpired=\u60a8\u8f38\u5165\u7684\u8a18\u865f\u5df2\u904e\u671f\u6216\u7121\u6548\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_SecureRequestRequired=\u6b64\u7cfb\u7d71\u4e0d\u5141\u8a31\u4f7f\u7528\u4e0d\u5b89\u5168 (HTTP) \u9023\u63a5\u3002\u8acb\u4f7f\u7528\u5b89\u5168 (HTTPS) \u9023\u63a5\u518d\u8a66\u4e00\u6b21\u3002
-Error_Writing_Responses=\u5132\u5b58\u60a8\u7684\u56de\u61c9\u554f\u984c\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_Writing_Otp_Secret=\u5132\u5b58\u60a8\u7684 OTP \u6a5f\u5bc6\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_Unlock_Failure=\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_Update_Attrs_Failure=\u5132\u5b58\u60a8\u7684\u8a2d\u5b9a\u6a94\u8cc7\u8a0a\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_Activation_Failure=\u555f\u52d5\u60a8\u7684\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_NewUser_Failure=\u5efa\u7acb\u60a8\u7684\u65b0\u4f7f\u7528\u8005\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_Activation=\u7121\u6cd5\u4f7f\u7528\u63d0\u4f9b\u7684\u8cc7\u8a0a\u555f\u52d5\u60a8\u7684\u5e33\u6236\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_DB_Unavailable=\u7121\u6cd5\u4f7f\u7528\u8cc7\u6599\u5eab\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Error_LocalDB_Unavailable=\u7121\u6cd5\u4f7f\u7528 LocalDB\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_App_Unavailable=\u7121\u6cd5\u4f7f\u7528\u6216\u6b63\u5728\u91cd\u65b0\u555f\u52d5\u61c9\u7528\u7a0b\u5f0f\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
-Error_IncorrectRequestSequence=\u5df2\u6536\u5230\u6545\u969c\u9801\u9762\u8981\u6c42\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
-Error_UnreachableCloudService=\u7121\u6cd5\u9023\u63a5\u96f2\u7aef\u670d\u52d9\u3002
-Error_InvalidSecurityKey=\u5b89\u5168\u6027\u91d1\u9470\u907a\u5931\u6216\u7121\u6548\u3002
-Error_Clearing_Responses=\u6e05\u9664\u56de\u61c9\u554f\u984c\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
-Error_ServiceUnreachable=\u7121\u6cd5\u4f7f\u7528\u5fc5\u8981\u7684\u670d\u52d9\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_ChallengeInResponse=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u4e0d\u53ef\u5305\u542b\u554f\u984c\u6587\u5b57\u7684\u4e00\u90e8\u5206\u3002
-Error_Multi_Username=\u591a\u4f4d\u4f7f\u7528\u8005\u7b26\u5408\u6307\u5b9a\u4f7f\u7528\u8005\u540d\u7a31\u300c%1%\u300d\u3002\u8acb\u7cbe\u7c21\u60a8\u7684\u641c\u5c0b\u3002
-Error_CertificateError=\u767c\u751f\u8b49\u66f8\u932f\u8aa4\uff1a%1%\u3002
-Error_SyslogWriteError=\u5beb\u5165 syslog \u4f3a\u670d\u5668\u300c%1%\u300d\u6642\u767c\u751f\u554f\u984c\uff0c\u932f\u8aa4\uff1a%2%
-Error_TooManyThreads=\u5df2\u8d85\u904e\u7dda\u4e32\u8a08\u6578\u4e0a\u9650\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21
-Error_SecurityViolation=\u767c\u751f\u9055\u53cd\u5b89\u5168\u6027\u7684\u60c5\u6cc1\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_NoOtpConfiguration=\u672a\u8a2d\u5b9a\u4e00\u6b21\u6027\u5bc6\u78bc\u3002
-Error_TrialViolation=\u5df2\u8d85\u904e\u8a66\u7528\u9650\u5236\u3002
-Error_AccountDisabled=\u5df2\u505c\u7528\u5e33\u6236\u3002
-Error_AccountExpired=\u5e33\u6236\u5df2\u904e\u671f\u3002
-Error_WrongOtpToken=\u4e00\u6b21\u6027\u5bc6\u78bc\u4e0d\u6b63\u78ba\u3002
-Error_AttrIntruder=\u5df2\u8d85\u904e\u641c\u5c0b\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_AuditWrite=\u7121\u6cd5\u5beb\u5165\u7a3d\u6838\u8a18\u9304\u3002
-Error_LdapIntruder=\u60a8\u7684 userID \u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_NoLdapConnection=\u7121\u6cd5\u4f7f\u7528\u5fc5\u8981\u76ee\u9304\u7684\u9023\u63a5\u3002
-Error_OAuthError=\u4f7f\u7528 OAuth \u9a57\u8b49\u5354\u5b9a\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
-Error_FieldRequired=\u9700\u8981 %1%
-Error_FieldNotANumber=%1% \u5fc5\u9808\u662f\u6578\u5b57
-Error_FieldInvalidEmail=%1% \u4e0d\u662f\u6709\u6548\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740
-Error_FieldTooShort=%1% \u592a\u77ed
-Error_FieldTooLong=%1% \u592a\u9577
-Error_FieldDuplicate=\u5df2\u4f7f\u7528 %1%\uff0c\u8acb\u4f7f\u7528\u4e0d\u540c\u7684\u503c
-Error_FieldBadConfirm=%1% \u6b04\u4f4d\u4e0d\u76f8\u7b26
-Error_FieldRegexNoMatch=%1% \u4e0d\u662f\u6b63\u78ba\u7684\u683c\u5f0f
-Error_Orig_Admin_Only=\u53ea\u6709\u539f\u59cb\u7ba1\u7406\u54e1\u53ef\u4ee5\u57f7\u884c\u6b64\u5167\u5bb9
-Error_PasswordRequired=\u9700\u8981\u5bc6\u78bc\u624d\u80fd\u57f7\u884c\u6b64\u64cd\u4f5c
-
-Error_ConfigUploadSuccess=\u5df2\u6210\u529f\u4e0a\u8f09\u6a94\u6848
-Error_ConfigUploadFailure=\u7121\u6cd5\u4e0a\u8f09\u6a94\u6848\u3002
-Error_ConfigSaveSuccess=\u5df2\u6210\u529f\u5132\u5b58\u7d44\u614b\u3002\u5df2\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u555f\u52d5\u3002\u91cd\u65b0\u555f\u52d5\u6642\uff0c\u53ef\u80fd\u7121\u6cd5\u4f7f\u7528\u61c9\u7528\u7a0b\u5f0f\u3002\u5982\u679c\u91cd\u65b0\u555f\u52d5\u8981\u6c42\u5931\u6557\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u624b\u52d5\u91cd\u65b0\u555f\u52d5\u61c9\u7528\u7a0b\u5f0f\u4f3a\u670d\u5668\u3002
-Error_ConfigFormatError=\u7d44\u614b\u683c\u5f0f\u932f\u8aa4\uff1a%1%
-Error_ConfigLdapFailure=\u7121\u6cd5\u9023\u63a5\u81f3 LDAP \u76ee\u9304\u4f3a\u670d\u5668\u3002
-Error_ConfigLdapSuccess=\u5df2\u6210\u529f\u9023\u63a5\u81f3 LDAP \u76ee\u9304\u4f3a\u670d\u5668
-
-Error_HTTP_404=\u627e\u4e0d\u5230\u60a8\u8981\u6c42\u7684\u9801\u9762\u3002
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+Password_MissingConfirm=\u5bc6\u78bc\u7b26\u5408\u8981\u6c42\uff0c\u8acb\u8f38\u5165\u78ba\u8a8d\u5bc6\u78bc
+Password_DoesNotMatch=\u5bc6\u78bc\u4e0d\u76f8\u7b26
+Password_Missing=\u5bc6\u78bc\u907a\u5931
+Password_PreviouslyUsed=\u65b0\u5bc6\u78bc\u4e4b\u524d\u5df2\u4f7f\u7528\u904e
+Password_BadPassword=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u898f\u5247\u8981\u6c42
+Password_TooLong=\u65b0\u5bc6\u78bc\u592a\u9577
+Password_TooShort=\u65b0\u5bc6\u78bc\u592a\u77ed
+Password_NotEnoughNum=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u6578\u5b57
+Password_NotEnoughAlpha=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5b57\u6bcd
+Password_NotEnoughUpper=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5927\u5beb\u5b57\u6bcd
+Password_NotEnoughLower=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u5c0f\u5beb\u5b57\u6bcd
+Password_NotEnoughSpecial=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
+Password_NotEnoughUnique=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u552f\u4e00\u5b57\u5143
+Password_TooManyRepeat=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u91cd\u8907\u5b57\u5143
+Password_TooManySpecial=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u7279\u6b8a (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143
+Password_TooManyAlpha=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5b57\u6bcd
+Password_TooManyNumeric=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u6578\u5b57
+Password_TooManyLower=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5c0f\u5beb\u5b57\u6bcd
+Password_TooManyUpper=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u5927\u5beb\u5b57\u6bcd
+Password_TooManyOldChars=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u820a\u5bc6\u78bc\u7684\u5b57\u5143
+Password_TooManyNonAlphaSpecial=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
+Password_InvalidChar=\u65b0\u5bc6\u78bc\u5305\u542b\u7121\u6548\u5b57\u5143
+Password_RequiredMissing=\u65b0\u5bc6\u78bc\u7f3a\u5c11\u5fc5\u8981\u5b57\u5143
+Password_InWordlist=\u65b0\u5bc6\u78bc\u592a\u5e38\u898b
+Password_SameAsOld=\u65b0\u5bc6\u78bc\u8207\u76ee\u524d\u5bc6\u78bc\u76f8\u540c
+Password_SameAsAttr=\u65b0\u5bc6\u78bc\u592a\u660e\u986f
+Password_FirstIsNumeric=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57
+Password_LastIsNumeric=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57
+Password_FirstIsSpecial=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
+Password_LastIsSpecial=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u82f1\u6578\u5b57\u5143) \u5b57\u5143
+Password_HistoryFull=\u65b0\u5bc6\u78bc\u6b77\u7a0b\u5df2\u6eff
+Password_MeetsRules=\u5df2\u63a5\u53d7\u65b0\u5bc6\u78bc\uff0c\u8acb\u6309\u4e00\u4e0b\u300c\u8b8a\u66f4\u5bc6\u78bc\u300d
+Password_TooSoon=\u5f9e\u4e0a\u6b21\u5bc6\u78bc\u8b8a\u66f4\u4e4b\u5f8c\u7d93\u904e\u7684\u6642\u9593\u4e0d\u8db3
+Password_UsingDisallowedValue=\u65b0\u5bc6\u78bc\u4f7f\u7528\u4e0d\u5141\u8a31\u7684\u503c
+Password_TooWeak=\u5bc6\u78bc\u592a\u5f31\u3002\u8acb\u5617\u8a66\u52a0\u5165\u66f4\u591a\u6578\u5b57\u3001\u7b26\u865f\u6216\u6df7\u5408\u5927\u5c0f\u5beb\u5b57\u6bcd\u3002
+Password_TooManyNonAlpha=\u65b0\u5bc6\u78bc\u5305\u542b\u592a\u591a\u975e\u5b57\u6bcd\u5b57\u5143
+Password_NotEnoughNonAlpha=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u975e\u5b57\u6bcd\u5b57\u5143
+Password_UnknownValidation=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u8981\u6c42\u3002\u8acb\u5617\u8a66\u4f7f\u7528\u4e0d\u540c\u7684\u5bc6\u78bc\u3002
+Password_NewPasswordRequired=\u60a8\u9700\u8981\u65b0\u5bc6\u78bc\u624d\u80fd\u7e7c\u7e8c\u3002
+Password_Expired=\u5bc6\u78bc\u5df2\u904e\u671f\u3002
+Password_CustomError=\u65b0\u5bc6\u78bc\u4e0d\u7b26\u5408\u898f\u5247\u8981\u6c42
+Password_BadOldPassword=\u820a\u5bc6\u78bc\u4e0d\u6b63\u78ba
+Password_NotEnoughGroups=\u65b0\u5bc6\u78bc\u6c92\u6709\u8db3\u5920\u7684\u4e0d\u540c\u5b57\u5143\u985e\u578b
+Password_TooManyConsecutive=\u65b0\u5bc6\u78bc\u5305\u62ec\u904e\u591a\u9023\u7e8c\u5b57\u5143 (\u4f8b\u5982 123456... \u6216 abcdef...)
+
+Error_WrongResponse=\u4e00\u6216\u591a\u500b\u56de\u61c9\u4e0d\u6b63\u78ba\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_WrongPassword=\u4f7f\u7528\u8005\u540d\u7a31\u6216\u5bc6\u78bc\u7121\u6548\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_Response_NoResponse=\u4f7f\u7528\u8005\u540d\u7a31\u7121\u6548\uff0c\u6216\u7121\u6cd5\u4f7f\u7528\u6b64\u529f\u80fd
+Error_Response_TooShort=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u77ed
+Error_Response_Wordlist=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u5e38\u7528
+Error_Response_TooLong=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u592a\u9577
+Error_Response_Duplicate=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u4e0d\u53ef\u4ee5\u8207\u5176\u4ed6\u56de\u61c9\u76f8\u540c
+Error_Challenge_Duplicate=\u6bcf\u500b\u554f\u984c\u90fd\u5fc5\u9808\u4e0d\u540c\u3002
+Error_Missing_Challenge_Text=\u4f7f\u7528\u8005\u63d0\u4f9b\u7684\u554f\u984c\u907a\u5931\u6587\u5b57
+Error_UserAuthenticated=\u60a8\u5df2\u901a\u904e\u9a57\u8b49\u3002
+Error_MissingParameter=\u907a\u5931\u5fc5\u8981\u53c3\u6578\u3002
+Error_DirectoryUnavailable=\u7121\u6cd5\u4f7f\u7528\u76ee\u9304\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Error_Unknown=\u767c\u751f\u932f\u8aa4\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Error_ActivationValidationFailed=\u4e00\u6216\u591a\u500b\u503c\u4e0d\u6b63\u78ba\u3002
+Error_CantMatchUser=\u627e\u4e0d\u5230\u4f7f\u7528\u8005\u540d\u7a31\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_ServiceNotAvailable=\u672a\u555f\u7528\u670d\u52d9\u3002
+Error_UserMisMatch=\u9a57\u8b49\u932f\u8aa4\uff0c\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\u3002
+Error_ActivateUserNoQueryMatch=\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u4e0d\u7b26\u5408\u555f\u52d5\u8cc7\u683c\u3002
+Error_AuthenticationRequired=\u9700\u8981\u9a57\u8b49\u3002
+Error_NoChallenges=\u672a\u8a2d\u5b9a\u4efb\u4f55\u8655\u7406\u5b89\u5168\u3002
+Error_UserIntruder=\u60a8\u7684 userID \u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_AddressIntruder=\u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_SessionIntruder=\u6b64\u5de5\u4f5c\u968e\u6bb5\u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_BadSessionPassword=\u7121\u6cd5\u5efa\u7acb\u5de5\u4f5c\u968e\u6bb5\u5bc6\u78bc\u3002
+Error_Unauthorized=\u60a8\u6c92\u6709\u57f7\u884c\u8981\u6c42\u52d5\u4f5c\u7684\u6b0a\u9650\u3002
+Error_BadSession=\u7121\u6cd5\u5efa\u7acb\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u7136\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_MissingRequiredResponse=\u8acb\u8f38\u5165\u6240\u6709\u5fc5\u8981\u7684\u56de\u61c9\u3002
+Error_MissingRandomResponse=\u8acb\u65b0\u589e\u5176\u4ed6\u96a8\u6a5f\u56de\u61c9\u3002
+Error_BadCaptchaResponse=\u9a57\u8b49\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_CaptchaAPIError=\u9a57\u8b49 captcha \u56de\u61c9\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u95dc\u9589\u60a8\u7684\u700f\u89bd\u5668\uff0c\u7136\u5f8c\u518d\u8a66\u4e00\u6b21\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Error_InvalidConfig=\u7d44\u614b\u7121\u6548\u6216\u640d\u6bc0\u3002\u8acb\u4fee\u6b63\u932f\u8aa4\u6216\u79fb\u9664\u7d44\u614b\u6a94\u6848\u3002
+Error_InvalidFormID=\u60a8\u7684\u700f\u89bd\u5668\u5de5\u4f5c\u968e\u6bb5\u7121\u6548\u6216\u5df2\u904e\u671f\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_TokenMissingContact=\u60a8\u7684\u5e33\u6236\u6c92\u6709\u53ef\u7528\u7684\u806f\u7d61\u8cc7\u8a0a\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_TokenIncorrect=\u9a57\u8b49\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_BadCurrentPassword=\u76ee\u524d\u7684\u5bc6\u78bc\u4e0d\u6b63\u78ba\uff0c\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_Closing=\u7121\u6cd5\u5b8c\u6210\u64cd\u4f5c\uff0c\u56e0\u70ba\u61c9\u7528\u7a0b\u5f0f\u6b63\u5728\u95dc\u6a5f\u3002
+Error_Missing_GUID=\u627e\u4e0d\u5230\u4f7f\u7528\u8005\u7684 GUID\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_TokenExpired=\u60a8\u8f38\u5165\u7684\u8a18\u865f\u5df2\u904e\u671f\u6216\u7121\u6548\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_SecureRequestRequired=\u6b64\u7cfb\u7d71\u4e0d\u5141\u8a31\u4f7f\u7528\u4e0d\u5b89\u5168 (HTTP) \u9023\u63a5\u3002\u8acb\u4f7f\u7528\u5b89\u5168 (HTTPS) \u9023\u63a5\u518d\u8a66\u4e00\u6b21\u3002
+Error_Writing_Responses=\u5132\u5b58\u60a8\u7684\u56de\u61c9\u554f\u984c\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_Writing_Otp_Secret=\u5132\u5b58\u60a8\u7684 OTP \u6a5f\u5bc6\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_Unlock_Failure=\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_Update_Attrs_Failure=\u5132\u5b58\u60a8\u7684\u8a2d\u5b9a\u6a94\u8cc7\u8a0a\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_Activation_Failure=\u555f\u52d5\u60a8\u7684\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_NewUser_Failure=\u5efa\u7acb\u60a8\u7684\u65b0\u4f7f\u7528\u8005\u5e33\u6236\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_Activation=\u7121\u6cd5\u4f7f\u7528\u63d0\u4f9b\u7684\u8cc7\u8a0a\u555f\u52d5\u60a8\u7684\u5e33\u6236\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_DB_Unavailable=\u7121\u6cd5\u4f7f\u7528\u8cc7\u6599\u5eab\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Error_LocalDB_Unavailable=\u7121\u6cd5\u4f7f\u7528 LocalDB\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_App_Unavailable=\u7121\u6cd5\u4f7f\u7528\u6216\u6b63\u5728\u91cd\u65b0\u555f\u52d5\u61c9\u7528\u7a0b\u5f0f\u3002\u5982\u679c\u6b64\u932f\u8aa4\u91cd\u8907\u767c\u751f\uff0c\u8acb\u806f\u7d61\u60a8\u7684\u670d\u52d9\u53f0\u3002
+Error_IncorrectRequestSequence=\u5df2\u6536\u5230\u6545\u969c\u9801\u9762\u7533\u8acb\u3002\u8acb\u52ff\u4f7f\u7528\u700f\u89bd\u5668\u7684\u8fd4\u56de\u6309\u9215\u3002\u8acb\u518d\u8a66\u4e00\u6b21\u3002
+Error_UnreachableCloudService=\u7121\u6cd5\u9023\u63a5\u9060\u7aef\u670d\u52d9\u3002
+Error_InvalidSecurityKey=\u5b89\u5168\u6027\u91d1\u9470\u907a\u5931\u6216\u7121\u6548\u3002
+Error_Clearing_Responses=\u6e05\u9664\u56de\u61c9\u554f\u984c\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u806f\u7d61\u60a8\u7684\u7ba1\u7406\u54e1\u3002
+Error_ServiceUnreachable=\u7121\u6cd5\u4f7f\u7528\u5fc5\u8981\u7684\u670d\u52d9\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_ChallengeInResponse=\u554f\u984c\u300c%1%\u300d\u7684\u56de\u61c9\u4e0d\u53ef\u5305\u542b\u554f\u984c\u6587\u5b57\u7684\u4e00\u90e8\u5206\u3002
+Error_Multi_Username=\u591a\u4f4d\u4f7f\u7528\u8005\u7b26\u5408\u6307\u5b9a\u4f7f\u7528\u8005\u540d\u7a31\u300c%1%\u300d\u3002\u8acb\u7cbe\u7c21\u60a8\u7684\u641c\u5c0b\u3002
+Error_CertificateError=\u767c\u751f\u8b49\u66f8\u932f\u8aa4\uff1a%1%\u3002
+Error_SyslogWriteError=\u5beb\u5165 syslog \u4f3a\u670d\u5668\u6642\u767c\u751f\u554f\u984c\uff0c\u932f\u8aa4\uff1a%1%
+Error_TooManyThreads=\u5df2\u8d85\u904e\u7dda\u4e32\u8a08\u6578\u4e0a\u9650\uff0c\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21
+Error_SecurityViolation=\u767c\u751f\u9055\u53cd\u5b89\u5168\u6027\u7684\u60c5\u6cc1\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_NoOtpConfiguration=\u672a\u8a2d\u5b9a\u4e00\u6b21\u6027\u5bc6\u78bc\u3002
+Error_TrialViolation=\u5df2\u8d85\u904e\u8a66\u7528\u9650\u5236\u3002
+Error_AccountDisabled=\u5df2\u505c\u7528\u5e33\u6236\u3002
+Error_AccountExpired=\u5e33\u6236\u5df2\u904e\u671f\u3002
+Error_WrongOtpToken=\u4e00\u6b21\u6027\u5bc6\u78bc\u4e0d\u6b63\u78ba\u3002
+Error_AttrIntruder=\u5df2\u8d85\u904e\u641c\u5c0b\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_AuditWrite=\u7121\u6cd5\u5beb\u5165\u7a3d\u6838\u8a18\u9304\u3002
+Error_LdapIntruder=\u60a8\u7684 userID \u5df2\u8d85\u904e\u767b\u5165\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_NoLdapConnection=\u7121\u6cd5\u4f7f\u7528\u5fc5\u8981\u76ee\u9304\u7684\u9023\u63a5\u3002
+Error_OAuthError=\u4f7f\u7528 OAuth \u9a57\u8b49\u5354\u5b9a\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_FieldRequired=\u9700\u8981 %1%
+Error_FieldNotANumber=%1% \u5fc5\u9808\u662f\u6578\u5b57
+Error_FieldInvalidEmail=%1% \u4e0d\u662f\u6709\u6548\u7684\u96fb\u5b50\u90f5\u4ef6\u5730\u5740
+Error_FieldTooShort=%1% \u592a\u77ed
+Error_FieldTooLong=%1% \u592a\u9577
+Error_FieldDuplicate=\u5df2\u4f7f\u7528 %1%\uff0c\u8acb\u4f7f\u7528\u4e0d\u540c\u7684\u503c
+Error_FieldBadConfirm=%1% \u6b04\u4f4d\u4e0d\u76f8\u7b26
+Error_FieldRegexNoMatch=%1% \u4e0d\u662f\u6b63\u78ba\u7684\u683c\u5f0f
+Error_Orig_Admin_Only=\u53ea\u6709\u539f\u59cb\u7ba1\u7406\u54e1\u53ef\u4ee5\u57f7\u884c\u6b64\u5167\u5bb9
+Error_PasswordRequired=\u9700\u8981\u5bc6\u78bc\u624d\u80fd\u57f7\u884c\u6b64\u64cd\u4f5c
+Error_ReportingError=\u7522\u751f\u5831\u544a\u6642\u767c\u751f\u932f\u8aa4
+Error_TokenDestIntruder=\u5df2\u8d85\u904e\u5617\u8a66\u6b21\u6578\u4e0a\u9650\u3002\u8acb\u7a0d\u5f8c\u518d\u8a66\u4e00\u6b21\u3002
+Error_OtpRecoveryUsed=\u5148\u524d\u5df2\u4f7f\u7528\u5fa9\u539f\uff0c\u7121\u6cd5\u518d\u6b21\u4f7f\u7528\u3002
+Error_RedirectIllegal=\u4e0d\u5141\u8a31\u8981\u6c42\u7684\u91cd\u65b0\u5c0e\u5411 URL\u3002
+Error_CryptError=\u767c\u751f\u610f\u5916\u52a0\u5bc6\u932f\u8aa4\u3002
+Error_SmsSendError=\u7121\u6cd5\u50b3\u9001\u7c21\u8a0a\uff1a%1%
+Error_LdapDataError=\u767c\u751f LDAP \u8cc7\u6599\u932f\u8aa4\u3002
+Error_MacroParseError=\u5de8\u96c6\u89e3\u6790\u932f\u8aa4\uff1a%1%
+Error_NoProfileAssigned=\u6b64\u4f5c\u696d\u672a\u6307\u6d3e\u8a2d\u5b9a\u6a94\u3002
+Error_StartupError=\u555f\u52d5\u61c9\u7528\u7a0b\u5f0f\u6642\u767c\u751f\u932f\u8aa4\u3002\u8acb\u67e5\u770b\u8a18\u9304\u6a94\u4ee5\u53d6\u5f97\u8cc7\u8a0a\u3002
+
+Error_RemoteErrorValue=\u9060\u7aef\u932f\u8aa4\uff1a%1%
+
+Error_ConfigUploadSuccess=\u5df2\u6210\u529f\u4e0a\u8f09\u6a94\u6848
+Error_ConfigUploadFailure=\u7121\u6cd5\u4e0a\u8f09\u6a94\u6848\u3002
+Error_ConfigSaveSuccess=\u5df2\u6210\u529f\u5132\u5b58\u7d44\u614b\u3002\u5df2\u8981\u6c42\u61c9\u7528\u7a0b\u5f0f\u91cd\u65b0\u555f\u52d5\u3002\u91cd\u65b0\u555f\u52d5\u6642\uff0c\u53ef\u80fd\u7121\u6cd5\u4f7f\u7528\u61c9\u7528\u7a0b\u5f0f\u3002\u5982\u679c\u91cd\u65b0\u555f\u52d5\u8981\u6c42\u5931\u6557\uff0c\u60a8\u53ef\u80fd\u9700\u8981\u624b\u52d5\u91cd\u65b0\u555f\u52d5\u61c9\u7528\u7a0b\u5f0f\u4f3a\u670d\u5668\u3002
+Error_ConfigFormatError=\u7d44\u614b\u683c\u5f0f\u932f\u8aa4\uff1a%1%
+Error_ConfigLdapFailure=\u7121\u6cd5\u9023\u63a5\u81f3 LDAP \u76ee\u9304\u4f3a\u670d\u5668\u3002
+Error_ConfigLdapSuccess=\u5df2\u6210\u529f\u9023\u63a5\u81f3 LDAP \u76ee\u9304\u4f3a\u670d\u5668
+
+Error_HTTP_404=\u627e\u4e0d\u5230\u60a8\u8981\u6c42\u7684\u9801\u9762\u3002

+ 62 - 4
pwm/servlet/src/password/pwm/i18n/Message_de.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -24,23 +24,32 @@ EventLog_Startup=Anwendungsstart
 EventLog_Shutdown=Herunterfahren der Anwendung
 EventLog_FatalEvent=Schwerwiegendes Ereignis
 EventLog_ModifyConfiguration=Konfiguration bearbeitet
+EventLog_IntruderAttempt=Versuch eines unbefugten Benutzers
+EventLog_IntruderLockout=Unbefugtensperre
 EventLog_ActivateUser=Konto aktivieren
 EventLog_Authenticate=Authentifizierung
+EventLog_AgreementPassed=Vereinbarung angenommen
 EventLog_ChangePassword=Passwort \u00e4ndern
+EventLog_UnlockPassword=Passwort entsperren
 EventLog_CreateUser=Konto erstellen
 EventLog_HelpdeskAction=Helpdesk-Aktion
 EventLog_HelpdeskClearResponses=Helpdesk, Antworten l\u00f6schen
 EventLog_HelpdeskClearOtpSecret=Helpdesk, OTP-Geheimnis l\u00f6schen
 EventLog_HelpdeskSetPassword=Helpdesk, Passwort festlegen
 EventLog_HelpdeskUnlockPassword=Helpdesk, Passwort entsperren
-EventLog_IntruderLockout=Unbefugtensperre
+EventLog_HelpdeskDeleteUser=Helpdesk - Benutzer l\u00f6schen
+EventLog_HelpdeskViewDetail=Helpdesk - Detail anzeigen
+EventLog_HelpdeskVerifyOtp=Helpdesk - OTP best\u00e4tigen
+EventLog_IntruderUser=Unbefugtensperre
 EventLog_TokenIssued=Token ausgestellt
 EventLog_TokenClaimed=Token beansprucht
+EventLog_ClearResponses=Antworten l\u00f6schen
 EventLog_RecoverPassword=Vergessenes Passwort wiederherstellen
 EventLog_SetupResponses=Passwortantworten einrichten
 Eventlog_SetupOtpSecret=OTP-Geheimnis einrichten
 EventLog_UpdateProfile=Attribute aktualisieren
-Requirement_ADComplexity=Muss mindestens drei der folgenden Zeichenarten enthalten: <ul><li>Gro\u00dfbuchstaben (A-Z)</li><li>Kleinbuchstaben (a-z)</li><li>Zahlen (0-9)</li><li>Symbole (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity=Muss mindestens drei der folgenden Zeichenarten enthalten: <ul><li>Gro\u00dfbuchstaben (A-Z)</li><li>Kleinbuchstaben (a-z)</li><li>Zahlen (0-9)</li><li>Symbole (!, #, $ usw.)</li></ul>
+Requirement_ADComplexity2008=Muss mindestens %1% der folgenden Zeichenarten enthalten: <ul><li>Gro\u00dfbuchstaben (A-Z)</li><li>Kleinbuchstaben (a-z)</li><li>Zahlen (0-9)</li><li>Symbole (!, #, $ usw.)</li><li>Sonstige Sprachzeichen, die nicht oben aufgef\u00fchrt sind</li></ul>
 Requirement_AllowNumeric=Darf kein numerisches Zeichen enthalten.
 Requirement_AllowSpecial=Darf keine Symbolzeichen (nicht alphanumerische Zeichen) enthalten.
 Requirement_CaseSensitive=Die Gro\u00df- und Kleinschreibung des Passworts muss ber\u00fccksichtigt werden.
@@ -87,6 +96,54 @@ Requirement_OldCharPlural=Darf h\u00f6chstens %1% Zeichen vom aktuellen Passwort
 Requirement_RequiredChars=Muss mindestens jeweils eines der folgenden Zeichen enthalten:
 Requirement_UniqueRequired=Das neue Passwort darf nicht zuvor verwendet worden sein.
 Requirement_WordList=Darf kein h\u00e4ufiges Wort und keine h\u00e4ufig verwendete Zeichenfolge enthalten.
+Rule_PolicyEnabled=Richtlinie aktiviert
+Rule_MinimumLength=Mindestl\u00e4nge
+Rule_MaximumLength=Maximale L\u00e4nge
+Rule_MinimumUpperCase=Mindestanzahl Gro\u00dfbuchstaben
+Rule_MaximumUpperCase=H\u00f6chstanzahl Gro\u00dfbuchstaben
+Rule_MinimumLowerCase=Mindestanzahl Kleinbuchstaben
+Rule_MaximumLowerCase=H\u00f6chstanzahl Kleinbuchstaben
+Rule_AllowNumeric=Numerische Zeichen zulassen
+Rule_MinimumNumeric=Mindestanzahl numerische Zeichen
+Rule_MaximumNumeric=H\u00f6chstanzahl numerische Zeichen
+Rule_MinimumUnique=Mindestanzahl eindeutige Zeichen
+Rule_MaximumUnique=H\u00f6chstanzahl eindeutige Zeichen
+Rule_AllowFirstCharNumeric=Numerisches Zeichen als erstes Zeichen zulassen
+Rule_AllowLastCharNumeric=Numerisches Zeichen als letztes Zeichen zulassen
+Rule_AllowSpecial=Sonderzeichen zulassen
+Rule_MinimumSpecial=Mindestanzahl Sonderzeichen
+Rule_MaximumSpecial=H\u00f6chstanzahl Sonderzeichen
+Rule_AllowFirstCharSpecial=Sonderzeichen als erstes Zeichen zulassen
+Rule_AllowLastCharSpecial=Sonderzeichen als letztes Zeichen zulassen
+Rule_MaximumRepeat=H\u00f6chstanzahl wiederholte Zeichen
+Rule_MaximumSequentialRepeat=H\u00f6chstanzahl aufeinanderfolgende Zeichen
+Rule_ChangeMessage=Nachricht \u00e4ndern
+Rule_ExpirationInterval=Intervall f\u00fcr das Ablaufdatum
+Rule_MinimumLifetime=Mindestlebensdauer
+Rule_CaseSensitive=Gro\u00df-/Kleinschreibung beachten
+Rule_EnforceAtLogin=Bei Anmeldung erzwingen
+Rule_ChallengeResponseEnabled=Sicherheitsantwort aktiviert
+Rule_UniqueRequired=Muss eindeutig sein
+Rule_DisallowedValues=Nicht zugelassene Werte
+Rule_DisallowedAttributes=Nicht zugelassene Attribute
+Rule_ADComplexity=AD-Komplexit\u00e4t
+Rule_DisallowCurrent=Aktuelle nicht zulassen
+Rule_MaximumOldChars=H\u00f6chstanzahl alte Zeichen
+Rule_RegExMatch=Regul\u00e4rer Ausdruck - \u00dcbereinstimmung
+Rule_RegExNoMatch=Regul\u00e4rer Ausdruck - keine \u00dcbereinstimmung
+Rule_MinimumAlpha=Mindestanzahl alphanumerische Zeichen
+Rule_MaximumAlpha=H\u00f6chstanzahl alphanumerische Zeichen
+Rule_MinimumNonAlpha=Mindestanzahl nicht-alphanumerische Zeichen
+Rule_MaximumNonAlpha=H\u00f6chstanzahl nicht-alphanumerische Zeichen
+Rule_EnableWordlist=Wortliste aktivieren
+Rule_MinimumStrength=Mindestpasswortst\u00e4rke
+Rule_MaximumConsecutive=Maximal aufeinander folgend
+Rule_CharGroupsValues=Zeichengruppenwerte
+Rule_CharGroupsMinMatch=Mindestens erforderliche Zeichengruppen
+Rule_AllowUserChange=Passwort\u00e4nderung durch Administrator zulassen
+Rule_AllowAdminChange=Passwort\u00e4nderung durch Benutzer zulassen
+Rule_ADComplexityLevel=AD-Komplexit\u00e4tsgrad
+Rule_ADComplexityMaxViolations=H\u00f6chstanzahl der Verletzungen der AD-Komplexit\u00e4t
 Success_ActivateUser=Das Benutzerkonto wurde erfolgreich aktiviert. Schlie\u00dfen Sie diesen Vorgang vollst\u00e4ndig ab, damit Sie auf das Konto zugreifen k\u00f6nnen.
 Success_ConfigFileUpload=Die Konfigurationsdatei wurde erfolgreich heraufgeladen.
 Success_ClearResponse=Die Geheimnisfragen und -antworten wurden erfolgreich entfernt.
@@ -98,10 +155,11 @@ Success_PasswordChange=Ihr Passwort wurde erfolgreich ge\u00e4ndert.
 Success_PasswordReset=Passwort f\u00fcr %1% wurde erfolgreich festgelegt.
 Success_PasswordSend=Das neue Passwort wurde an %1% gesendet. Schlie\u00dfen Sie dieses Fenster und melden Sie sich dann mit dem neuen Passwort an.
 Success_ResponsesMeetRules=Die Antworten erf\u00fcllen die Anforderungen. Klicken Sie auf 'Antworten speichern', wenn Sie bereit sind.
-Success_SetupResponse=Die Geheimnisfragen und -antworten wurden erfolgreich gespeichert. Falls Sie Ihr Passwort vergessen, k\u00f6nnen Sie es anhand der Antworten auf diese Fragen zur\u00fccksetzen.
+Success_SetupResponse=Vielen Dank. Die Geheimnisfragen und -antworten wurden erfolgreich gespeichert. Falls Sie Ihr Passwort vergessen, k\u00f6nnen Sie es anhand der Antworten auf diese Fragen zur\u00fccksetzen.
 Success_Unknown=Der Vorgang wurde erfolgreich abgeschlossen.
 Success_UnlockAccount=Das Konto wurde entsperrt.
 Success_UpdateGuest=Das Gastkonto wurde erfolgreich aktualisiert. Der Gastbenutzer erh\u00e4lt eine Benachrichtigung, wenn eine Email-Adresse eingegeben wurde.
 Success_UpdateProfile=Die Benutzerinformationen wurden erfolgreich aktualisiert.
 Success_UpdateForm=Das Profil ist nun bereit zur Aktualisierung. Fahren Sie fort, wenn Sie bereit sind.
 Success_Action=Die Aktion %1% wurde erfolgreich abgeschlossen.
+Success_OtpSetup=Die Registrierung des Ger\u00e4ts wurde erfolgreich abgeschlossen.

+ 61 - 3
pwm/servlet/src/password/pwm/i18n/Message_es.properties

@@ -3,7 +3,7 @@
 # http://code.google.com/p/pwm/
 #
 # Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
+# Copyright (c) 2009-2015 The PWM Project
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -24,23 +24,32 @@ EventLog_Startup=Inicio de la aplicaci\u00f3n
 EventLog_Shutdown=Cierre de la aplicaci\u00f3n
 EventLog_FatalEvent=Evento irrecuperable
 EventLog_ModifyConfiguration=Configuraci\u00f3n modificada
+EventLog_IntruderAttempt=Intento de intrusi\u00f3n
+EventLog_IntruderLockout=Bloqueo de intruso
 EventLog_ActivateUser=Activar cuenta
 EventLog_Authenticate=Autenticaci\u00f3n
+EventLog_AgreementPassed=Acuerdo aprobado
 EventLog_ChangePassword=Cambiar contrase\u00f1a
+EventLog_UnlockPassword=Desbloquear contrase\u00f1a
 EventLog_CreateUser=Crear cuenta
 EventLog_HelpdeskAction=Acci\u00f3n del Servicio de ayuda t\u00e9cnica
 EventLog_HelpdeskClearResponses=Respuestas borradas por el Servicio de ayuda t\u00e9cnica
 EventLog_HelpdeskClearOtpSecret=Eliminar secreto de contrase\u00f1a para una vez mediante el Servicio de ayuda t\u00e9cnica
 EventLog_HelpdeskSetPassword=Establecer contrase\u00f1a con el Servicio de ayuda t\u00e9cnica
 EventLog_HelpdeskUnlockPassword=Desbloquear contrase\u00f1a con el Servicio de ayuda t\u00e9cnica
-EventLog_IntruderLockout=Bloqueo de intruso
+EventLog_HelpdeskDeleteUser=Suprimir usuario de servicio de ayuda t\u00e9cnica
+EventLog_HelpdeskViewDetail=Detalle de la vista de la l\u00ednea de asistencia
+EventLog_HelpdeskVerifyOtp=Verificar contrase\u00f1a para una vez con el servicio de ayuda t\u00e9cnica
+EventLog_IntruderUser=Bloqueo de usuario intruso
 EventLog_TokenIssued=Se emiti\u00f3 un testigo
 EventLog_TokenClaimed=Se reclam\u00f3 un testigo
+EventLog_ClearResponses=Borrar respuestas
 EventLog_RecoverPassword=Recuperar contrase\u00f1a olvidada
 EventLog_SetupResponses=Configurar respuestas de contrase\u00f1a
 Eventlog_SetupOtpSecret=Configurar secreto de contrase\u00f1a para una vez
 EventLog_UpdateProfile=Actualizar atributos
 Requirement_ADComplexity=Debe tener como m\u00ednimo tres tipos de los siguientes caracteres: <ul><li>May\u00fascula (A-Z)</li><li>Min\u00fascula (a-z)</li><li>N\u00famero (0-9)</li><li>S\u00edmbolo (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity2008=Debe tener como m\u00ednimo %1% tipos de los siguientes caracteres: <ul><li>May\u00fascula (A-Z)</li><li>Min\u00fascula (a-z)</li><li>N\u00famero (0-9)</li><li>S\u00edmbolo (!, #, $, etc.)</li><li>Caracteres de otros idiomas no indicados anteriormente</li></ul>
 Requirement_AllowNumeric=No debe incluir ning\u00fan car\u00e1cter num\u00e9rico.
 Requirement_AllowSpecial=No debe incluir ning\u00fan car\u00e1cter de s\u00edmbolo (que no sea letra ni n\u00famero).
 Requirement_CaseSensitive=La contrase\u00f1a distingue entre may\u00fasculas y min\u00fasculas.
@@ -87,6 +96,54 @@ Requirement_OldCharPlural=No puede tener m\u00e1s de %1% caracteres de la contra
 Requirement_RequiredChars=Debe incluir al menos uno de los siguientes caracteres:
 Requirement_UniqueRequired=La nueva contrase\u00f1a no puede haberse utilizado antes.
 Requirement_WordList=No debe incluir una palabra com\u00fan o una secuencia de caracteres utilizada con frecuencia.
+Rule_PolicyEnabled=Directiva habilitada
+Rule_MinimumLength=Longitud m\u00ednima
+Rule_MaximumLength=Longitud m\u00e1xima
+Rule_MinimumUpperCase=M\u00ednimo may\u00fasculas
+Rule_MaximumUpperCase=M\u00e1ximo may\u00fasculas
+Rule_MinimumLowerCase=M\u00ednimo min\u00fasculas
+Rule_MaximumLowerCase=M\u00e1ximo min\u00fasculas
+Rule_AllowNumeric=Permitir n\u00famericos
+Rule_MinimumNumeric=M\u00ednimo num\u00e9ricos
+Rule_MaximumNumeric=M\u00e1ximo num\u00e9ricos
+Rule_MinimumUnique=M\u00ednimo exclusivos
+Rule_MaximumUnique=M\u00e1ximo exclusivos
+Rule_AllowFirstCharNumeric=Permitir primer car\u00e1cter num\u00e9rico
+Rule_AllowLastCharNumeric=Permitir \u00faltimo car\u00e1cter num\u00e9rico
+Rule_AllowSpecial=Permitir especiales
+Rule_MinimumSpecial=M\u00ednimo especiales
+Rule_MaximumSpecial=M\u00e1ximo especiales
+Rule_AllowFirstCharSpecial=Permitir primer car\u00e1cter especial
+Rule_AllowLastCharSpecial=Permitir \u00faltimo car\u00e1cter especial
+Rule_MaximumRepeat=M\u00e1ximo repetidos
+Rule_MaximumSequentialRepeat=M\u00e1ximo consecutivos repetidos
+Rule_ChangeMessage=Cambiar mensaje
+Rule_ExpirationInterval=Intervalo de caducidad
+Rule_MinimumLifetime=Duraci\u00f3n m\u00ednima
+Rule_CaseSensitive=Distingue may\u00fascula-min\u00fascula
+Rule_EnforceAtLogin=Aplicar en la entrada
+Rule_ChallengeResponseEnabled=Respuesta a pregunta desaf\u00edo habilitada
+Rule_UniqueRequired=Requiere exclusivo
+Rule_DisallowedValues=Valores no permitidos
+Rule_DisallowedAttributes=Atributos no permitidos
+Rule_ADComplexity=Complejidad de AD
+Rule_DisallowCurrent=No permitir actual
+Rule_MaximumOldChars=M\u00e1ximo de caracteres antiguos
+Rule_RegExMatch=Coincidencia de expresi\u00f3n normal
+Rule_RegExNoMatch=No coincidencia de expresi\u00f3n normal
+Rule_MinimumAlpha=M\u00ednimo alfanum\u00e9ricos
+Rule_MaximumAlpha=M\u00e1ximo alfanum\u00e9ricos
+Rule_MinimumNonAlpha=M\u00ednimo no alfanum\u00e9ricos
+Rule_MaximumNonAlpha=M\u00e1ximo no alfanum\u00e9ricos
+Rule_EnableWordlist=Habilitar lista de palabras
+Rule_MinimumStrength=Seguridad m\u00ednima
+Rule_MaximumConsecutive=M\u00e1ximos consecutivos
+Rule_CharGroupsValues=Valores de grupo de caracteres
+Rule_CharGroupsMinMatch=M\u00ednimo de grupos de caracteres necesarios
+Rule_AllowUserChange=Permitir cambio de contrase\u00f1a de administrador
+Rule_AllowAdminChange=Permitir cambio de contrase\u00f1a de usuario
+Rule_ADComplexityLevel=Nivel de complejidad de AD
+Rule_ADComplexityMaxViolations=Infracciones m\u00e1ximas de complejidad de AD
 Success_ActivateUser=Su cuenta de usuario se ha activado correctamente. Aseg\u00farese de finalizar el proceso o no podr\u00e1 acceder a su cuenta.
 Success_ConfigFileUpload=El archivo de configuraci\u00f3n se ha cargado correctamente.
 Success_ClearResponse=Se han eliminado correctamente sus preguntas secretas y respuestas.
@@ -98,10 +155,11 @@ Success_PasswordChange=Se ha cambiado correctamente la contrase\u00f1a.
 Success_PasswordReset=La contrase\u00f1a para %1% se ha establecido correctamente.
 Success_PasswordSend=Se ha enviado su nueva contrase\u00f1a a %1%. Cierre esta ventana y luego entre utilizando la nueva contrase\u00f1a.
 Success_ResponsesMeetRules=Sus respuestas cumplen los requisitos. Haga clic en Guardar respuestas cuando est\u00e9 listo.
-Success_SetupResponse=Las preguntas secretas y sus respuestas se han guardado correctamente. Si alguna vez olvida su contrase\u00f1a, puede usar las respuestas a estas preguntas para restablecerla.
+Success_SetupResponse=Gracias. Las preguntas secretas y sus respuestas se han guardado correctamente. Si alguna vez olvida su contrase\u00f1a, puede usar las respuestas a estas preguntas para restablecerla.
 Success_Unknown=La operaci\u00f3n se ha realizado correctamente.
 Success_UnlockAccount=Se ha desbloqueado su cuenta.
 Success_UpdateGuest=La cuenta de usuario guest se ha actualizado correctamente. El usuario guest recibir\u00e1 una notificaci\u00f3n si se ha facilitado la direcci\u00f3n de correo electr\u00f3nico.
 Success_UpdateProfile=La informaci\u00f3n del usuario se ha actualizado correctamente.
 Success_UpdateForm=Su perfil est\u00e1 listo para ser actualizado. Contin\u00fae cuando est\u00e9 preparado.
 Success_Action=La acci\u00f3n %1% se ha completado correctamente.
+Success_OtpSetup=Se ha realizado correctamente la inscripci\u00f3n de su dispositivo.

+ 165 - 107
pwm/servlet/src/password/pwm/i18n/Message_fr.properties

@@ -1,107 +1,165 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-EventLog_Startup=D\u00e9marrage de l'application
-EventLog_Shutdown=Arr\u00eat de l'application
-EventLog_FatalEvent=\u00c9v\u00e9nement fatal
-EventLog_ModifyConfiguration=Configuration modifi\u00e9e
-EventLog_ActivateUser=Activer le compte
-EventLog_Authenticate=Authentification
-EventLog_ChangePassword=\u00c9diter le mot de passe
-EventLog_CreateUser=Cr\u00e9er un compte
-EventLog_HelpdeskAction=Op\u00e9ration du service d'assistance
-EventLog_HelpdeskClearResponses=Service d'assistance - Effacer les r\u00e9ponses
-EventLog_HelpdeskClearOtpSecret=Service d'assistance - Effacer le secret du mot de passe \u00e0 usage unique
-EventLog_HelpdeskSetPassword=Service d'assistance - D\u00e9finir le mot de passe
-EventLog_HelpdeskUnlockPassword=Service d'assistance - D\u00e9verrouiller le mot de passe
-EventLog_IntruderLockout=Verrouillage en cas d'intrusion
-EventLog_TokenIssued=Jeton \u00e9mis
-EventLog_TokenClaimed=Jeton r\u00e9clam\u00e9
-EventLog_RecoverPassword=R\u00e9cup\u00e9rer le mot de passe oubli\u00e9
-EventLog_SetupResponses=Configurer les r\u00e9ponses concernant le mot de passe
-Eventlog_SetupOtpSecret=Configurer le secret du mot de passe \u00e0 usage unique
-EventLog_UpdateProfile=Mettre \u00e0 jour les attributs
-Requirement_ADComplexity=Doit comporter au moins trois types des caract\u00e8res suivants : <ul><li>Majuscule (A-Z)</li><li>Minuscule (a-z)</li><li>Chiffre (0-9)</li><li>Symbole (!, #, $, etc.)</li></ul>
-Requirement_AllowNumeric=Ne doit comporter aucun caract\u00e8re num\u00e9rique.
-Requirement_AllowSpecial=Ne doit comporter aucun symbole (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_CaseSensitive=Le mot de passe est sensible \u00e0 la casse.
-Requirement_DisAllowedAttributes=Ne doit comporter aucune partie de votre nom ou de votre nom d'utilisateur.
-Requirement_DisAllowedValues=Ne doit comporter aucune des valeurs suivantes : %1%
-Requirement_FirstNumeric=Le premier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
-Requirement_FirstSpecial=Le premier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_LastNumeric=Le dernier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
-Requirement_LastSpecial=Le dernier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_MaxAlpha=Ne peut pas inclure plus de %1% lettre.
-Requirement_MaxAlphaPlural=Ne peut pas inclure plus de %1% lettres.
-Requirement_MaxLength=Ne doit pas comporter plus de %1%\u00a0caract\u00e8re.
-Requirement_MaxLengthPlural=Ne doit pas comporter plus de %1%\u00a0caract\u00e8res.
-Requirement_MaxLower=Ne peut pas inclure plus de %1% lettre minuscule.
-Requirement_MaxLowerPlural=Ne peut pas inclure plus de %1% lettres minuscules.
-Requirement_MaxNumeric=Ne peut pas inclure plus de %1% chiffre.
-Requirement_MaxNumericPlural=Ne peut pas inclure plus de %1% chiffres.
-Requirement_MaxRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
-Requirement_MaxRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
-Requirement_MaxSeqRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re s\u00e9quentiellement plus de %1% fois.
-Requirement_MaxSeqRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re s\u00e9quentiellement plus de %1% fois.
-Requirement_MaxSpecial=Ne peut pas comporter plus de %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_MaxSpecialPlural=Ne peut pas comporter plus de %1% symboles (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_MaxUpper=Ne peut pas inclure plus de %1% lettre majuscule.
-Requirement_MaxUpperPlural=Ne peut pas inclure plus de %1% lettres majuscules.
-Requirement_MinAlpha=Doit comporter au moins %1% lettre.
-Requirement_MinAlphaPlural=Doit comporter au moins %1% lettres.
-Requirement_MinimumFrequency=Ne peut pas \u00eatre \u00e9dit\u00e9 \u00e0 une fr\u00e9quence sup\u00e9rieure \u00e0 une fois tou(te)s les %1%.
-Requirement_MinLength=Doit comporter au moins %1%\u00a0caract\u00e8re.
-Requirement_MinLengthPlural=Doit comporter au moins %1%\u00a0caract\u00e8res.
-Requirement_MinLower=Doit comporter au moins %1% lettre minuscule.
-Requirement_MinLowerPlural=Doit comporter au moins %1% lettres minuscules.
-Requirement_MinNumeric=Doit comporter au moins %1% chiffre.
-Requirement_MinNumericPlural=Doit comporter au moins %1% chiffres.
-Requirement_MinSpecial=Doit comporter au moins %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
-Requirement_MinSpecialPlural=Doit comporter au moins %1% symboles (ni alphab\u00e9tiques ni num\u00e9riques).
-Requirement_MinUnique=Doit comporter au moins %1%\u00a0caract\u00e8re unique.
-Requirement_MinUniquePlural=Doit comporter au moins %1%\u00a0caract\u00e8res uniques.
-Requirement_MinUpper=Doit comporter au moins %1% lettre majuscule.
-Requirement_MinUpperPlural=Doit comporter au moins %1% lettres majuscules.
-Requirement_NotCaseSensitive=Le mot de passe n'est pas sensible \u00e0 la casse.
-Requirement_OldChar=Ne peut pas comporter plus de %1% caract\u00e8re de votre mot de passe actuel.
-Requirement_OldCharPlural=Ne peut pas comporter plus de %1% caract\u00e8res de votre mot de passe actuel.
-Requirement_RequiredChars=Doit comporter au moins un caract\u00e8re de chaque cat\u00e9gorie suivante :
-Requirement_UniqueRequired=Le nouveau mot de passe ne doit pas avoir encore \u00e9t\u00e9 utilis\u00e9.
-Requirement_WordList=Ne doit pas comporter de mot commun ou de s\u00e9quence de caract\u00e8res commun\u00e9ment utilis\u00e9e.
-Success_ActivateUser=Votre compte utilisateur a \u00e9t\u00e9 activ\u00e9. Prenez soin de finaliser le processus afin de pouvoir acc\u00e9der \u00e0 votre compte.
-Success_ConfigFileUpload=Le fichier de configuration a \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9.
-Success_ClearResponse=Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 effac\u00e9es.
-Success_CreateGuest=Le nouveau compte invit\u00e9 a \u00e9t\u00e9 cr\u00e9\u00e9. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 saisie. Le compte invit\u00e9 doit peut-\u00eatre \u00eatre activ\u00e9.
-Success_CreateUser=Votre nouveau compte utilisateur a \u00e9t\u00e9 cr\u00e9\u00e9.
-Success_ForgottenUsername=Votre nom d'utilisateur est %1%. Enregistrez-le pour pouvoir l'utiliser ult\u00e9rieurement.
-Success_NewUserForm=Votre compte est pr\u00eat \u00e0 \u00eatre cr\u00e9\u00e9. Continuez lorsque vous \u00eates pr\u00eat.
-Success_PasswordChange=Votre mot de passe a \u00e9t\u00e9 \u00e9dit\u00e9.
-Success_PasswordReset=Le mot de passe pour %1% a \u00e9t\u00e9 configur\u00e9.
-Success_PasswordSend=Votre nouveau mot de passe a \u00e9t\u00e9 envoy\u00e9 \u00e0 %1%. Fermez cette fen\u00eatre et connectez-vous \u00e0 l'aide de votre nouveau mot de passe.
-Success_ResponsesMeetRules=Vos r\u00e9ponses r\u00e9pondent aux exigences. Cliquez sur Enregistrer les r\u00e9ponses lorsque vous \u00eates pr\u00eat.
-Success_SetupResponse=Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 enregistr\u00e9es. Si vous oubliez votre mot de passe, vous pourrez les utiliser pour r\u00e9initialiser votre mot de passe.
-Success_Unknown=L'op\u00e9ration a \u00e9t\u00e9 ex\u00e9cut\u00e9e.
-Success_UnlockAccount=Votre compte a \u00e9t\u00e9 d\u00e9verrouill\u00e9.
-Success_UpdateGuest=Le compte invit\u00e9 a \u00e9t\u00e9 mis \u00e0 jour. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 saisie.
-Success_UpdateProfile=Vos informations utilisateur ont \u00e9t\u00e9 mises \u00e0 jour.
-Success_UpdateForm=Votre profil est pr\u00eat \u00e0 \u00eatre mis \u00e0 jour. Continuez lorsque vous \u00eates pr\u00eat.
-Success_Action=L'op\u00e9ration %1% a \u00e9t\u00e9 ex\u00e9cut\u00e9e.
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+EventLog_Startup=D\u00e9marrage de l'application
+EventLog_Shutdown=Arr\u00eat de l'application
+EventLog_FatalEvent=\u00c9v\u00e9nement fatal
+EventLog_ModifyConfiguration=Configuration modifi\u00e9e
+EventLog_IntruderAttempt=Tentative d'intrusion
+EventLog_IntruderLockout=Verrouillage en cas d'intrusion
+EventLog_ActivateUser=Activer le compte
+EventLog_Authenticate=Authentification
+EventLog_AgreementPassed=Accord pass\u00e9
+EventLog_ChangePassword=\u00c9diter le mot de passe
+EventLog_UnlockPassword=D\u00e9verrouiller le mot de passe
+EventLog_CreateUser=Cr\u00e9er un compte
+EventLog_HelpdeskAction=Op\u00e9ration du service d'assistance
+EventLog_HelpdeskClearResponses=Service d'assistance - Effacer les r\u00e9ponses
+EventLog_HelpdeskClearOtpSecret=Service d'assistance - Effacer le secret du mot de passe \u00e0 usage unique
+EventLog_HelpdeskSetPassword=Service d'assistance - D\u00e9finir le mot de passe
+EventLog_HelpdeskUnlockPassword=Service d'assistance - D\u00e9verrouiller le mot de passe
+EventLog_HelpdeskDeleteUser=Service d'assistance - Supprimer l'utilisateur
+EventLog_HelpdeskViewDetail=Service d'assistance - Afficher les d\u00e9tails
+EventLog_HelpdeskVerifyOtp=Service d'assistance - V\u00e9rifier le mot de passe \u00e0 usage unique
+EventLog_IntruderUser=Verrouillage de l'utilisateur intrus
+EventLog_TokenIssued=Jeton \u00e9mis
+EventLog_TokenClaimed=Jeton r\u00e9clam\u00e9
+EventLog_ClearResponses=Effacer les r\u00e9ponses
+EventLog_RecoverPassword=R\u00e9cup\u00e9rer le mot de passe oubli\u00e9
+EventLog_SetupResponses=Configurer les r\u00e9ponses concernant le mot de passe
+Eventlog_SetupOtpSecret=Configurer le secret du mot de passe \u00e0 usage unique
+EventLog_UpdateProfile=Mettre \u00e0 jour les attributs
+Requirement_ADComplexity=Doit comporter au moins trois types des caract\u00e8res suivants : <ul><li>Majuscule (A-Z)</li><li>Minuscule (a-z)</li><li>Chiffre (0-9)</li><li>Symbole (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity2008=Doit comporter au moins %1% types des caract\u00e8res suivants : <ul><li>Majuscule (A-Z)</li><li>Minuscule (a-z)</li><li>Chiffre (0-9)</li><li>Symbole (!, #, $, etc.)</li><li>Autres caract\u00e8res linguistiques non r\u00e9pertori\u00e9s ci-dessus</li></ul>
+Requirement_AllowNumeric=Ne doit comporter aucun caract\u00e8re num\u00e9rique.
+Requirement_AllowSpecial=Ne doit comporter aucun symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_CaseSensitive=Le mot de passe est sensible \u00e0 la casse.
+Requirement_DisAllowedAttributes=Ne doit comporter aucune partie de votre nom ou de votre nom d'utilisateur.
+Requirement_DisAllowedValues=Ne doit comporter aucune des valeurs suivantes : %1%
+Requirement_FirstNumeric=Le premier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
+Requirement_FirstSpecial=Le premier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_LastNumeric=Le dernier caract\u00e8re ne peut pas \u00eatre num\u00e9rique.
+Requirement_LastSpecial=Le dernier caract\u00e8re ne peut pas \u00eatre un symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MaxAlpha=Ne peut pas inclure plus de %1% lettre.
+Requirement_MaxAlphaPlural=Ne peut pas inclure plus de %1% lettres.
+Requirement_MaxLength=Ne doit pas comporter plus de %1%\u00a0caract\u00e8re.
+Requirement_MaxLengthPlural=Ne doit pas comporter plus de %1%\u00a0caract\u00e8res.
+Requirement_MaxLower=Ne peut pas inclure plus de %1% lettre minuscule.
+Requirement_MaxLowerPlural=Ne peut pas inclure plus de %1% lettres minuscules.
+Requirement_MaxNumeric=Ne peut pas inclure plus de %1% chiffre.
+Requirement_MaxNumericPlural=Ne peut pas inclure plus de %1% chiffres.
+Requirement_MaxRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
+Requirement_MaxRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re plus de %1% fois.
+Requirement_MaxSeqRepeat=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re s\u00e9quentiellement plus de %1% fois.
+Requirement_MaxSeqRepeatPlural=Ne doit pas r\u00e9p\u00e9ter le m\u00eame caract\u00e8re s\u00e9quentiellement plus de %1% fois.
+Requirement_MaxSpecial=Ne peut pas comporter plus de %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MaxSpecialPlural=Ne peut pas comporter plus de %1% symboles (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MaxUpper=Ne peut pas inclure plus de %1% lettre majuscule.
+Requirement_MaxUpperPlural=Ne peut pas inclure plus de %1% lettres majuscules.
+Requirement_MinAlpha=Doit comporter au moins %1% lettre.
+Requirement_MinAlphaPlural=Doit comporter au moins %1% lettres.
+Requirement_MinimumFrequency=Ne peut pas \u00eatre \u00e9dit\u00e9 \u00e0 une fr\u00e9quence sup\u00e9rieure \u00e0 une fois tou(te)s les %1%.
+Requirement_MinLength=Doit comporter au moins %1%\u00a0caract\u00e8re.
+Requirement_MinLengthPlural=Doit comporter au moins %1%\u00a0caract\u00e8res.
+Requirement_MinLower=Doit comporter au moins %1% lettre minuscule.
+Requirement_MinLowerPlural=Doit comporter au moins %1% lettres minuscules.
+Requirement_MinNumeric=Doit comporter au moins %1% chiffre.
+Requirement_MinNumericPlural=Doit comporter au moins %1% chiffres.
+Requirement_MinSpecial=Doit comporter au moins %1% symbole (ni alphab\u00e9tique ni num\u00e9rique).
+Requirement_MinSpecialPlural=Doit comporter au moins %1% symboles (ni alphab\u00e9tiques ni num\u00e9riques).
+Requirement_MinUnique=Doit comporter au moins %1%\u00a0caract\u00e8re unique.
+Requirement_MinUniquePlural=Doit comporter au moins %1%\u00a0caract\u00e8res uniques.
+Requirement_MinUpper=Doit comporter au moins %1% lettre majuscule.
+Requirement_MinUpperPlural=Doit comporter au moins %1% lettres majuscules.
+Requirement_NotCaseSensitive=Le mot de passe n'est pas sensible \u00e0 la casse.
+Requirement_OldChar=Ne peut pas comporter plus de %1% caract\u00e8re de votre mot de passe actuel.
+Requirement_OldCharPlural=Ne peut pas comporter plus de %1% caract\u00e8res de votre mot de passe actuel.
+Requirement_RequiredChars=Doit comporter au moins un caract\u00e8re de chaque cat\u00e9gorie suivante :
+Requirement_UniqueRequired=Le nouveau mot de passe ne doit pas avoir encore \u00e9t\u00e9 utilis\u00e9.
+Requirement_WordList=Ne doit pas comporter de mot commun ou de s\u00e9quence de caract\u00e8res commun\u00e9ment utilis\u00e9e.
+Rule_PolicyEnabled=Strat\u00e9gie activ\u00e9e
+Rule_MinimumLength=Longueur minimale
+Rule_MaximumLength=Longueur maximale
+Rule_MinimumUpperCase=Nombre minimal de majuscules
+Rule_MaximumUpperCase=Nombre maximal de majuscules
+Rule_MinimumLowerCase=Nombre minimal de minuscules
+Rule_MaximumLowerCase=Nombre maximal de minuscules
+Rule_AllowNumeric=Autoriser les caract\u00e8res num\u00e9riques
+Rule_MinimumNumeric=Nombre minimal de caract\u00e8res num\u00e9riques
+Rule_MaximumNumeric=Nombre maximal de caract\u00e8res num\u00e9riques
+Rule_MinimumUnique=Nombre minimal de caract\u00e8res uniques
+Rule_MaximumUnique=Nombre maximal de caract\u00e8res uniques
+Rule_AllowFirstCharNumeric=Autoriser un caract\u00e8re num\u00e9rique en premi\u00e8re position
+Rule_AllowLastCharNumeric=Autoriser un caract\u00e8re num\u00e9rique en derni\u00e8re position
+Rule_AllowSpecial=Autoriser les caract\u00e8res sp\u00e9ciaux
+Rule_MinimumSpecial=Nombre minimal de caract\u00e8res sp\u00e9ciaux
+Rule_MaximumSpecial=Nombre maximal de caract\u00e8res sp\u00e9ciaux
+Rule_AllowFirstCharSpecial=Autoriser un caract\u00e8re sp\u00e9cial en premi\u00e8re position
+Rule_AllowLastCharSpecial=Autoriser un caract\u00e8re sp\u00e9cial en derni\u00e8re position
+Rule_MaximumRepeat=Nombre maximal de r\u00e9p\u00e9titions
+Rule_MaximumSequentialRepeat=Nombre maximal de r\u00e9p\u00e9titions s\u00e9quentielles
+Rule_ChangeMessage=Message de modification
+Rule_ExpirationInterval=Intervalle d'expiration
+Rule_MinimumLifetime=Dur\u00e9e de vie minimale
+Rule_CaseSensitive=Sensible \u00e0 la cesse
+Rule_EnforceAtLogin=Appliquer lors de la connexion
+Rule_ChallengeResponseEnabled=R\u00e9ponse de v\u00e9rification d'identit\u00e9 activ\u00e9e
+Rule_UniqueRequired=Caract\u00e8res uniques requis
+Rule_DisallowedValues=Valeurs interdites
+Rule_DisallowedAttributes=Attributs interdits
+Rule_ADComplexity=Complexit\u00e9 AD
+Rule_DisallowCurrent=Interdire le mot de passe actuel
+Rule_MaximumOldChars=Nombre maximal d'anciens caract\u00e8res
+Rule_RegExMatch=L'expression r\u00e9guli\u00e8re correspond.
+Rule_RegExNoMatch=L'expression r\u00e9guli\u00e8re ne correspond pas.
+Rule_MinimumAlpha=Nombre minimal de caract\u00e8res alphanum\u00e9riques
+Rule_MaximumAlpha=Nombre maximal de caract\u00e8res alphanum\u00e9riques
+Rule_MinimumNonAlpha=Nombre minimal de caract\u00e8res non alphanum\u00e9riques
+Rule_MaximumNonAlpha=Nombre maximal de caract\u00e8res non alphanum\u00e9riques
+Rule_EnableWordlist=Activer la liste de mots
+Rule_MinimumStrength=Force minimale
+Rule_MaximumConsecutive=Nbre max. de car. cons\u00e9cutifs
+Rule_CharGroupsValues=Valeurs du groupe de caract\u00e8res
+Rule_CharGroupsMinMatch=Groupes minimaux de caract\u00e8res requis
+Rule_AllowUserChange=Autoriser le changement du mot de passe de l'administrateur
+Rule_AllowAdminChange=Autoriser le changement du mot de passe de l'utilisateur
+Rule_ADComplexityLevel=Niveau de complexit\u00e9 AD
+Rule_ADComplexityMaxViolations=Nombre maximal de violations de la complexit\u00e9 AD
+Success_ActivateUser=Votre compte utilisateur a \u00e9t\u00e9 activ\u00e9. Prenez soin de finaliser le processus afin de pouvoir acc\u00e9der \u00e0 votre compte.
+Success_ConfigFileUpload=Le fichier de configuration a \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9.
+Success_ClearResponse=Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 effac\u00e9es.
+Success_CreateGuest=Le nouveau compte invit\u00e9 a \u00e9t\u00e9 cr\u00e9\u00e9. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 saisie. Le compte invit\u00e9 doit peut-\u00eatre \u00eatre activ\u00e9.
+Success_CreateUser=Votre nouveau compte utilisateur a \u00e9t\u00e9 cr\u00e9\u00e9.
+Success_ForgottenUsername=Votre nom d'utilisateur est %1%. Enregistrez-le pour pouvoir l'utiliser ult\u00e9rieurement.
+Success_NewUserForm=Votre compte est pr\u00eat \u00e0 \u00eatre cr\u00e9\u00e9. Continuez lorsque vous \u00eates pr\u00eat.
+Success_PasswordChange=Votre mot de passe a \u00e9t\u00e9 \u00e9dit\u00e9.
+Success_PasswordReset=Le mot de passe pour %1% a \u00e9t\u00e9 configur\u00e9.
+Success_PasswordSend=Votre nouveau mot de passe a \u00e9t\u00e9 envoy\u00e9 \u00e0 %1%. Fermez cette fen\u00eatre et connectez-vous \u00e0 l'aide de votre nouveau mot de passe.
+Success_ResponsesMeetRules=Vos r\u00e9ponses r\u00e9pondent aux exigences. Cliquez sur Enregistrer les r\u00e9ponses lorsque vous \u00eates pr\u00eat.
+Success_SetupResponse=Merci. Vos questions et r\u00e9ponses secr\u00e8tes ont \u00e9t\u00e9 enregistr\u00e9es. Si vous oubliez votre mot de passe, vous pourrez les utiliser pour r\u00e9initialiser votre mot de passe.
+Success_Unknown=L'op\u00e9ration a \u00e9t\u00e9 ex\u00e9cut\u00e9e.
+Success_UnlockAccount=Votre compte a \u00e9t\u00e9 d\u00e9verrouill\u00e9.
+Success_UpdateGuest=Le compte invit\u00e9 a \u00e9t\u00e9 mis \u00e0 jour. L'utilisateur invit\u00e9 va recevoir une notification si l'adresse \u00e9lectronique a \u00e9t\u00e9 saisie.
+Success_UpdateProfile=Vos informations utilisateur ont \u00e9t\u00e9 mises \u00e0 jour.
+Success_UpdateForm=Votre profil est pr\u00eat \u00e0 \u00eatre mis \u00e0 jour. Continuez lorsque vous \u00eates pr\u00eat.
+Success_Action=L'op\u00e9ration %1% a \u00e9t\u00e9 ex\u00e9cut\u00e9e.
+Success_OtpSetup=L'inscription de vote p\u00e9riph\u00e9rique est termin\u00e9e.

+ 165 - 107
pwm/servlet/src/password/pwm/i18n/Message_ja.properties

@@ -1,107 +1,165 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-EventLog_Startup=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
-EventLog_Shutdown=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3
-EventLog_FatalEvent=\u81f4\u547d\u7684\u30a4\u30d9\u30f3\u30c8
-EventLog_ModifyConfiguration=\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
-EventLog_ActivateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u5316
-EventLog_Authenticate=\u8a8d\u8a3c
-EventLog_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
-EventLog_CreateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210
-EventLog_HelpdeskAction=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u30a2\u30af\u30b7\u30e7\u30f3
-EventLog_HelpdeskClearResponses=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u56de\u7b54\u3092\u6d88\u53bb\u3057\u307e\u3059
-EventLog_HelpdeskClearOtpSecret=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304cOTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u6d88\u53bb\u3057\u307e\u3059
-EventLog_HelpdeskSetPassword=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059
-EventLog_HelpdeskUnlockPassword=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3057\u307e\u3059
-EventLog_IntruderLockout=\u4e0d\u6b63\u4fb5\u5165\u8005\u30ed\u30c3\u30af\u30a2\u30a6\u30c8
-EventLog_TokenIssued=\u30c8\u30fc\u30af\u30f3\u304c\u767a\u884c\u3055\u308c\u307e\u3057\u305f
-EventLog_TokenClaimed=\u30c8\u30fc\u30af\u30f3\u304c\u5f15\u304d\u53d7\u3051\u3089\u308c\u307e\u3057\u305f
-EventLog_RecoverPassword=\u5fd8\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u56de\u5fa9
-EventLog_SetupResponses=\u30d1\u30b9\u30ef\u30fc\u30c9\u56de\u7b54\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
-Eventlog_SetupOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
-EventLog_UpdateProfile=\u5c5e\u6027\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
-Requirement_ADComplexity=\u6b21\u306e\u6587\u5b57\u306e\u3046\u3061\u5c11\u306a\u304f\u3068\u30823\u7a2e\u985e\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: <ul><li>\u5927\u6587\u5b57(A\uff5eZ)</li><li>\u5c0f\u6587\u5b57(a\uff5ez)</li><li>\u6570\u5b57(0\uff5e9)</li><li>\u8a18\u53f7(!\u3001 #, $, etc.)</li></ul>
-Requirement_AllowNumeric=\u6570\u5b57\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
-Requirement_AllowSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
-Requirement_CaseSensitive=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u304c\u533a\u5225\u3055\u308c\u307e\u3059\u3002
-Requirement_DisAllowedAttributes=\u6c0f\u540d\u3084\u30e6\u30fc\u30b6\u540d\u306e\u4e00\u90e8\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
-Requirement_DisAllowedValues=\u6b21\u306e\u5024\u306e\u3044\u305a\u308c\u304b\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044: %1%
-Requirement_FirstNumeric=\u6700\u521d\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
-Requirement_FirstSpecial=\u6700\u521d\u306e\u6587\u5b57\u3092\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
-Requirement_LastNumeric=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
-Requirement_LastSpecial=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
-Requirement_MaxAlpha=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxAlphaPlural=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxLength=\u6587\u5b57\u6570\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxLengthPlural=\u6587\u5b57\u6570\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxLower=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxLowerPlural=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxNumeric=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxNumericPlural=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxRepeat=\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxRepeatPlural=\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxSeqRepeat=\u9023\u7d9a\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxSeqRepeatPlural=\u9023\u7d9a\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxSpecialPlural=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxUpper=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MaxUpperPlural=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinAlpha=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinAlphaPlural=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinimumFrequency=\u5909\u66f4\u3067\u304d\u308b\u306e\u306f %1% \u3054\u3068\u306b1\u56de\u307e\u3067\u3067\u3059\u3002
-Requirement_MinLength=%1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinLengthPlural=%1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinLower=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinLowerPlural=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinNumeric=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinNumericPlural=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinSpecialPlural=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinUnique=\u56fa\u6709\u306e\u6587\u5b57\u3092 %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinUniquePlural=\u56fa\u6709\u306e\u6587\u5b57\u3092 %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinUpper=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_MinUpperPlural=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_NotCaseSensitive=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u304c\u533a\u5225\u3055\u308c\u307e\u305b\u3093\u3002
-Requirement_OldChar=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304b\u3089\u6d41\u7528\u3059\u308b\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_OldCharPlural=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304b\u3089\u6d41\u7528\u3059\u308b\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_RequiredChars=\u6b21\u306e\u6587\u5b57\u3092\u305d\u308c\u305e\u308c1\u6587\u5b57\u4ee5\u4e0a\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
-Requirement_UniqueRequired=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u4ee5\u524d\u306b\u4f7f\u7528\u3055\u308c\u305f\u3053\u3068\u304c\u306a\u3044\u3082\u306e\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Requirement_WordList=\u4e00\u822c\u7684\u306a\u7528\u8a9e\u3084\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u6587\u5b57\u5217\u306f\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
-Success_ActivateUser=\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u6709\u52b9\u5316\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002
-Success_ConfigFileUpload=\u74b0\u5883\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f\u3002
-Success_ClearResponse=\u79d8\u5bc6\u306e\u8cea\u554f\u3068\u56de\u7b54\u304c\u6b63\u5e38\u306b\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002
-Success_CreateGuest=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u306f\u3001\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u304c\u9001\u3089\u308c\u307e\u3059\u3002\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u6709\u52b9\u5316\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002
-Success_CreateUser=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
-Success_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u306f %1% \u3067\u3059\u3002\u5c06\u6765\u306e\u4f7f\u7528\u306b\u5099\u3048\u3066\u30e6\u30fc\u30b6\u540d\u3092\u8a18\u9332\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002
-Success_NewUserForm=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3044\u3064\u3067\u3082\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Success_PasswordChange=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u5e38\u306b\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
-Success_PasswordReset=%1% \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u5e38\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002
-Success_PasswordSend=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u304c %1% \u306b\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u3066\u304b\u3089\u3001\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Success_ResponsesMeetRules=\u56de\u7b54\u304c\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u307e\u3059\u3002\u3044\u3064\u3067\u3082\uff3b\u56de\u7b54\u306e\u4fdd\u5b58\uff3d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Success_SetupResponse=\u79d8\u5bc6\u306e\u8cea\u554f\u3068\u56de\u7b54\u304c\u6b63\u5e38\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u56de\u7b54\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u307e\u3059\u3002
-Success_Unknown=\u64cd\u4f5c\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
-Success_UnlockAccount=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u89e3\u9664\u3055\u308c\u307e\u3057\u305f\u3002
-Success_UpdateGuest=\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u306f\u3001\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u304c\u9001\u3089\u308c\u307e\u3059\u3002
-Success_UpdateProfile=\u30e6\u30fc\u30b6\u60c5\u5831\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f\u3002
-Success_UpdateForm=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3044\u3064\u3067\u3082\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
-Success_Action=\u30a2\u30af\u30b7\u30e7\u30f3 %1% \u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+EventLog_Startup=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8d77\u52d5
+EventLog_Shutdown=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b7\u30e3\u30c3\u30c8\u30c0\u30a6\u30f3
+EventLog_FatalEvent=\u81f4\u547d\u7684\u30a4\u30d9\u30f3\u30c8
+EventLog_ModifyConfiguration=\u8a2d\u5b9a\u304c\u5909\u66f4\u3055\u308c\u307e\u3057\u305f
+EventLog_IntruderAttempt=\u4e0d\u6b63\u4fb5\u5165\u8005\u306b\u3088\u308b\u8a66\u884c
+EventLog_IntruderLockout=\u4e0d\u6b63\u4fb5\u5165\u8005\u30ed\u30c3\u30af\u30a2\u30a6\u30c8
+EventLog_ActivateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u6709\u52b9\u5316
+EventLog_Authenticate=\u8a8d\u8a3c
+EventLog_AgreementPassed=\u5951\u7d04\u627f\u8a8d\u6e08\u307f
+EventLog_ChangePassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4
+EventLog_UnlockPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u30ed\u30c3\u30af\u89e3\u9664
+EventLog_CreateUser=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210
+EventLog_HelpdeskAction=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u30a2\u30af\u30b7\u30e7\u30f3
+EventLog_HelpdeskClearResponses=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u56de\u7b54\u3092\u6d88\u53bb\u3057\u307e\u3059
+EventLog_HelpdeskClearOtpSecret=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304cOTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u3092\u6d88\u53bb\u3057\u307e\u3059
+EventLog_HelpdeskSetPassword=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u8a2d\u5b9a\u3057\u307e\u3059
+EventLog_HelpdeskUnlockPassword=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ed\u30c3\u30af\u89e3\u9664\u3057\u307e\u3059
+EventLog_HelpdeskDeleteUser=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u304c\u30e6\u30fc\u30b6\u3092\u524a\u9664\u3057\u307e\u3059
+EventLog_HelpdeskViewDetail=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306e\u8a73\u7d30\u8868\u793a
+EventLog_HelpdeskVerifyOtp=\u30d8\u30eb\u30d7\u30c7\u30b9\u30af\u306eOTP\u691c\u8a3c
+EventLog_IntruderUser=\u4e0d\u6b63\u4fb5\u5165\u8005\u30e6\u30fc\u30b6\u30ed\u30c3\u30af\u30a2\u30a6\u30c8
+EventLog_TokenIssued=\u30c8\u30fc\u30af\u30f3\u304c\u767a\u884c\u3055\u308c\u307e\u3057\u305f
+EventLog_TokenClaimed=\u30c8\u30fc\u30af\u30f3\u304c\u5f15\u304d\u53d7\u3051\u3089\u308c\u307e\u3057\u305f
+EventLog_ClearResponses=\u56de\u7b54\u306e\u6d88\u53bb
+EventLog_RecoverPassword=\u5fd8\u308c\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u56de\u5fa9
+EventLog_SetupResponses=\u30d1\u30b9\u30ef\u30fc\u30c9\u56de\u7b54\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
+Eventlog_SetupOtpSecret=OTP\u30b7\u30fc\u30af\u30ec\u30c3\u30c8\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7
+EventLog_UpdateProfile=\u5c5e\u6027\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8
+Requirement_ADComplexity=\u6b21\u306e\u6587\u5b57\u306e\u3046\u3061\u5c11\u306a\u304f\u3068\u30823\u7a2e\u985e\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: <ul><li>\u5927\u6587\u5b57(A\uff5eZ)</li><li>\u5c0f\u6587\u5b57(a\uff5ez)</li><li>\u6570\u5b57(0\uff5e9)</li><li>\u8a18\u53f7(!\u3001 #\u3001$\u306a\u3069)</li></ul>
+Requirement_ADComplexity2008=\u6b21\u306e\u6587\u5b57\u306e\u3046\u3061\u5c11\u306a\u304f\u3068\u3082 %1% \u7a2e\u985e\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059: <ul><li>\u5927\u6587\u5b57(A\uff5eZ)</li><li>\u5c0f\u6587\u5b57(a\uff5ez)</li><li>\u6570\u5b57(0\uff5e9)</li><li>\u8a18\u53f7(!\u3001 #\u3001$\u306a\u3069)</li><li>\u4e0a\u8a18\u4ee5\u5916\u306e\u8a00\u8a9e\u6587\u5b57</li></ul>
+Requirement_AllowNumeric=\u6570\u5b57\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
+Requirement_AllowSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
+Requirement_CaseSensitive=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u304c\u533a\u5225\u3055\u308c\u307e\u3059\u3002
+Requirement_DisAllowedAttributes=\u6c0f\u540d\u3084\u30e6\u30fc\u30b6\u540d\u306e\u4e00\u90e8\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
+Requirement_DisAllowedValues=\u6b21\u306e\u5024\u306e\u3044\u305a\u308c\u304b\u3092\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044: %1%
+Requirement_FirstNumeric=\u6700\u521d\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
+Requirement_FirstSpecial=\u6700\u521d\u306e\u6587\u5b57\u3092\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
+Requirement_LastNumeric=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
+Requirement_LastSpecial=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306b\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002
+Requirement_MaxAlpha=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxAlphaPlural=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxLength=\u6587\u5b57\u6570\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxLengthPlural=\u6587\u5b57\u6570\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxLower=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxLowerPlural=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxNumeric=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxNumericPlural=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxRepeat=\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxRepeatPlural=\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxSeqRepeat=\u9023\u7d9a\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxSeqRepeatPlural=\u9023\u7d9a\u6587\u5b57\u306e\u7e70\u308a\u8fd4\u3057\u306f %1% \u56de\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxSpecialPlural=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxUpper=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MaxUpperPlural=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinAlpha=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinAlphaPlural=\u82f1\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinimumFrequency=\u5909\u66f4\u3067\u304d\u308b\u306e\u306f %1% \u3054\u3068\u306b1\u56de\u307e\u3067\u3067\u3059\u3002
+Requirement_MinLength=%1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinLengthPlural=%1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinLower=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinLowerPlural=\u5c0f\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinNumeric=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinNumericPlural=\u6570\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinSpecial=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinSpecialPlural=\u8a18\u53f7(\u82f1\u6570\u5b57\u4ee5\u5916)\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinUnique=\u56fa\u6709\u306e\u6587\u5b57\u3092 %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinUniquePlural=\u56fa\u6709\u306e\u6587\u5b57\u3092 %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinUpper=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_MinUpperPlural=\u5927\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0a\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_NotCaseSensitive=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u304c\u533a\u5225\u3055\u308c\u307e\u305b\u3093\u3002
+Requirement_OldChar=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304b\u3089\u6d41\u7528\u3059\u308b\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_OldCharPlural=\u73fe\u5728\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304b\u3089\u6d41\u7528\u3059\u308b\u6587\u5b57\u306f %1% \u6587\u5b57\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_RequiredChars=\u6b21\u306e\u6587\u5b57\u3092\u305d\u308c\u305e\u308c1\u6587\u5b57\u4ee5\u4e0a\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002
+Requirement_UniqueRequired=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u4ee5\u524d\u306b\u4f7f\u7528\u3055\u308c\u305f\u3053\u3068\u304c\u306a\u3044\u3082\u306e\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Requirement_WordList=\u4e00\u822c\u7684\u306a\u7528\u8a9e\u3084\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u6587\u5b57\u5217\u306f\u542b\u3081\u306a\u3044\u3067\u304f\u3060\u3055\u3044\u3002
+Rule_PolicyEnabled=\u30dd\u30ea\u30b7\u30fc\u306e\u6709\u52b9\u5316
+Rule_MinimumLength=\u6700\u5c0f\u9577
+Rule_MaximumLength=\u6700\u5927\u9577
+Rule_MinimumUpperCase=\u5927\u6587\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumUpperCase=\u5927\u6587\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_MinimumLowerCase=\u5c0f\u6587\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumLowerCase=\u5c0f\u6587\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_AllowNumeric=\u6570\u5b57\u3092\u8a31\u53ef
+Rule_MinimumNumeric=\u6570\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumNumeric=\u6570\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_MinimumUnique=\u56fa\u6709\u6587\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumUnique=\u56fa\u6709\u6587\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_AllowFirstCharNumeric=\u6700\u521d\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
+Rule_AllowLastCharNumeric=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u6570\u5b57\u306b\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
+Rule_AllowSpecial=\u7279\u6b8a\u6587\u5b57\u3092\u8a31\u53ef
+Rule_MinimumSpecial=\u7279\u6b8a\u6587\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumSpecial=\u7279\u6b8a\u6587\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_AllowFirstCharSpecial=\u6700\u521d\u306e\u6587\u5b57\u3092\u7279\u6b8a\u6587\u5b57\u306b\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
+Rule_AllowLastCharSpecial=\u6700\u5f8c\u306e\u6587\u5b57\u3092\u7279\u6b8a\u6587\u5b57\u306b\u3059\u308b\u3053\u3068\u3092\u8a31\u53ef
+Rule_MaximumRepeat=\u6700\u5927\u7e70\u308a\u8fd4\u3057\u6570
+Rule_MaximumSequentialRepeat=\u6700\u5927\u9023\u7d9a\u7e70\u308a\u8fd4\u3057\u6570
+Rule_ChangeMessage=\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u5909\u66f4
+Rule_ExpirationInterval=\u6709\u52b9\u671f\u9650\u306e\u9593\u9694
+Rule_MinimumLifetime=\u6700\u5c0f\u5b58\u7d9a\u671f\u9593
+Rule_CaseSensitive=\u5927\u6587\u5b57\u5c0f\u6587\u5b57\u3092\u533a\u5225
+Rule_EnforceAtLogin=\u30ed\u30b0\u30a4\u30f3\u6642\u306b\u5f37\u5236
+Rule_ChallengeResponseEnabled=\u79d8\u5bc6\u306e\u8cea\u554f\u306e\u7b54\u3048\u306e\u6709\u52b9\u5316
+Rule_UniqueRequired=\u56fa\u6709\u6587\u5b57\u304c\u5fc5\u9808
+Rule_DisallowedValues=\u8a31\u53ef\u3055\u308c\u306a\u3044\u5024
+Rule_DisallowedAttributes=\u8a31\u53ef\u3055\u308c\u306a\u3044\u5c5e\u6027
+Rule_ADComplexity=AD\u8907\u96d1\u6027
+Rule_DisallowCurrent=\u73fe\u5728\u3092\u8a31\u53ef\u3057\u306a\u3044
+Rule_MaximumOldChars=\u53e4\u3044\u6587\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_RegExMatch=\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3059\u308b
+Rule_RegExNoMatch=\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3057\u306a\u3044
+Rule_MinimumAlpha=\u82f1\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumAlpha=\u82f1\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_MinimumNonAlpha=\u975e\u82f1\u5b57\u306e\u6700\u5c0f\u6587\u5b57\u6570
+Rule_MaximumNonAlpha=\u975e\u82f1\u5b57\u306e\u6700\u5927\u6587\u5b57\u6570
+Rule_EnableWordlist=\u30ef\u30fc\u30c9\u30ea\u30b9\u30c8\u306e\u6709\u52b9\u5316
+Rule_MinimumStrength=\u6700\u5c0f\u5f37\u5ea6
+Rule_MaximumConsecutive=\u6700\u5927\u9023\u7d9a\u6570
+Rule_CharGroupsValues=\u6587\u5b57\u30b0\u30eb\u30fc\u30d7\u5024
+Rule_CharGroupsMinMatch=\u6587\u5b57\u30b0\u30eb\u30fc\u30d7\u306b\u5fc5\u8981\u306a\u6700\u5c0f\u6587\u5b57\u6570
+Rule_AllowUserChange=\u7ba1\u7406\u8005\u306b\u3088\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\u3092\u8a31\u53ef
+Rule_AllowAdminChange=\u30e6\u30fc\u30b6\u306b\u3088\u308b\u30d1\u30b9\u30ef\u30fc\u30c9\u5909\u66f4\u3092\u8a31\u53ef
+Rule_ADComplexityLevel=AD\u8907\u96d1\u6027\u30ec\u30d9\u30eb
+Rule_ADComplexityMaxViolations=AD\u8907\u96d1\u6027\u9055\u53cd\u306e\u6700\u5927\u6570
+Success_ActivateUser=\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u6709\u52b9\u5316\u3055\u308c\u307e\u3057\u305f\u3002\u30d7\u30ed\u30bb\u30b9\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u307e\u305b\u3093\u3002
+Success_ConfigFileUpload=\u74b0\u5883\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3057\u305f\u3002
+Success_ClearResponse=\u79d8\u5bc6\u306e\u8cea\u554f\u3068\u56de\u7b54\u304c\u6b63\u5e38\u306b\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002
+Success_CreateGuest=\u65b0\u3057\u3044\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u306f\u3001\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u304c\u9001\u3089\u308c\u307e\u3059\u3002\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u6709\u52b9\u5316\u304c\u5fc5\u8981\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002
+Success_CreateUser=\u65b0\u3057\u3044\u30e6\u30fc\u30b6\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u4f5c\u6210\u3055\u308c\u307e\u3057\u305f\u3002
+Success_ForgottenUsername=\u30e6\u30fc\u30b6\u540d\u306f %1% \u3067\u3059\u3002\u5c06\u6765\u306e\u4f7f\u7528\u306b\u5099\u3048\u3066\u30e6\u30fc\u30b6\u540d\u3092\u8a18\u9332\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002
+Success_NewUserForm=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u4f5c\u6210\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3044\u3064\u3067\u3082\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Success_PasswordChange=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u5e38\u306b\u5909\u66f4\u3055\u308c\u307e\u3057\u305f\u3002
+Success_PasswordReset=%1% \u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u5e38\u306b\u8a2d\u5b9a\u3055\u308c\u307e\u3057\u305f\u3002
+Success_PasswordSend=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u304c %1% \u306b\u9001\u4fe1\u3055\u308c\u307e\u3057\u305f\u3002\u3053\u306e\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u9589\u3058\u3066\u304b\u3089\u3001\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u3067\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Success_ResponsesMeetRules=\u56de\u7b54\u304c\u8981\u4ef6\u3092\u6e80\u305f\u3057\u3066\u3044\u307e\u3059\u3002\u3044\u3064\u3067\u3082\uff3b\u56de\u7b54\u306e\u4fdd\u5b58\uff3d\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Success_SetupResponse=\u3042\u308a\u304c\u3068\u3046\u3054\u3056\u3044\u307e\u3059\u3002\u79d8\u5bc6\u306e\u8cea\u554f\u3068\u56de\u7b54\u304c\u6b63\u5e38\u306b\u4fdd\u5b58\u3055\u308c\u307e\u3057\u305f\u3002\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408\u306f\u3001\u3053\u308c\u3089\u306e\u8cea\u554f\u306b\u5bfe\u3059\u308b\u56de\u7b54\u3092\u4f7f\u7528\u3057\u3066\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u30ea\u30bb\u30c3\u30c8\u3067\u304d\u307e\u3059\u3002
+Success_Unknown=\u64cd\u4f5c\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
+Success_UnlockAccount=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u30ed\u30c3\u30af\u89e3\u9664\u3055\u308c\u307e\u3057\u305f\u3002
+Success_UpdateGuest=\u30b2\u30b9\u30c8\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f\u3002\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u305f\u5834\u5408\u306f\u3001\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u306b\u901a\u77e5\u304c\u9001\u3089\u308c\u307e\u3059\u3002
+Success_UpdateProfile=\u30e6\u30fc\u30b6\u60c5\u5831\u304c\u6b63\u5e38\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3055\u308c\u307e\u3057\u305f\u3002
+Success_UpdateForm=\u30d7\u30ed\u30d5\u30a1\u30a4\u30eb\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306e\u6e96\u5099\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u3044\u3064\u3067\u3082\u7d9a\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002
+Success_Action=\u30a2\u30af\u30b7\u30e7\u30f3 %1% \u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002
+Success_OtpSetup=\u3054\u4f7f\u7528\u306e\u30c7\u30d0\u30a4\u30b9\u306e\u767b\u9332\u304c\u6b63\u5e38\u306b\u5b8c\u4e86\u3057\u307e\u3057\u305f\u3002

+ 165 - 107
pwm/servlet/src/password/pwm/i18n/Message_pt_BR.properties

@@ -1,107 +1,165 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-EventLog_Startup=Inicializa\u00e7\u00e3o do Aplicativo
-EventLog_Shutdown=Desligamento do Aplicativo
-EventLog_FatalEvent=Evento Fatal
-EventLog_ModifyConfiguration=Configura\u00e7\u00e3o Modificada
-EventLog_ActivateUser=Ativar Conta
-EventLog_Authenticate=Autentica\u00e7\u00e3o
-EventLog_ChangePassword=Mudar Senha
-EventLog_CreateUser=Criar Conta
-EventLog_HelpdeskAction=A\u00e7\u00e3o do Suporte T\u00e9cnico
-EventLog_HelpdeskClearResponses=Limpar Respostas do Suporte T\u00e9cnico
-EventLog_HelpdeskClearOtpSecret=Limpar Segredo OTP do Suporte T\u00e9cnico
-EventLog_HelpdeskSetPassword=Definir Senha do Suporte T\u00e9cnico
-EventLog_HelpdeskUnlockPassword=Desbloquear Senha do Suporte T\u00e9cnico
-EventLog_IntruderLockout=Bloqueio de Intrus\u00e3o
-EventLog_TokenIssued=Token Emitido
-EventLog_TokenClaimed=Token Requerido
-EventLog_RecoverPassword=Recuperar Senha Esquecida
-EventLog_SetupResponses=Configurar Respostas da Senha
-Eventlog_SetupOtpSecret=Configurar Segredo OTP
-EventLog_UpdateProfile=Atualizar Atributos
-Requirement_ADComplexity=Deve ter no m\u00ednimo tr\u00eas tipos dos seguintes caracteres: <ul><li>Mai\u00fascula (A-Z)</li><li>Min\u00fascula (a-z)</li><li>N\u00famero (0-9)</li><li>S\u00edmbolo (!, #, $, etc.)</li></ul>
-Requirement_AllowNumeric=N\u00e3o deve incluir caracteres num\u00e9ricos.
-Requirement_AllowSpecial=N\u00e3o deve incluir caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_CaseSensitive=A senha diferencia mai\u00fasculas e min\u00fasculas.
-Requirement_DisAllowedAttributes=N\u00e3o deve incluir parte do seu nome ou nome de usu\u00e1rio.
-Requirement_DisAllowedValues=N\u00e3o deve incluir os seguintes valores: %1%
-Requirement_FirstNumeric=O primeiro caractere n\u00e3o pode ser num\u00e9rico.
-Requirement_FirstSpecial=O primeiro caractere n\u00e3o pode ser um s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_LastNumeric=O \u00faltimo caractere n\u00e3o pode ser num\u00e9rico.
-Requirement_LastSpecial=O \u00faltimo caractere n\u00e3o pode ser um s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_MaxAlpha=N\u00e3o pode incluir mais de %1% letra.
-Requirement_MaxAlphaPlural=N\u00e3o pode incluir mais de %1% letras.
-Requirement_MaxLength=N\u00e3o deve ter mais de %1% caractere.
-Requirement_MaxLengthPlural=N\u00e3o deve ter mais de %1% caractere.
-Requirement_MaxLower=N\u00e3o pode incluir mais de %1% letra min\u00fascula.
-Requirement_MaxLowerPlural=N\u00e3o pode incluir mais de %1% letras min\u00fasculas.
-Requirement_MaxNumeric=N\u00e3o pode incluir mais de %1% n\u00famero.
-Requirement_MaxNumericPlural=N\u00e3o pode incluir mais de %1% n\u00fameros.
-Requirement_MaxRepeat=N\u00e3o deve repetir um caractere mais de %1% vez.
-Requirement_MaxRepeatPlural=N\u00e3o deve repetir um caractere mais de %1% vezes.
-Requirement_MaxSeqRepeat=N\u00e3o deve repetir um caractere sequencialmente mais de %1% vez.
-Requirement_MaxSeqRepeatPlural=N\u00e3o deve repetir um caractere sequencialmente mais de %1% vezes.
-Requirement_MaxSpecial=N\u00e3o pode incluir mais de %1% caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_MaxSpecialPlural=N\u00e3o pode incluir mais de %1% caracteres de s\u00edmbolo (n\u00e3o de letra nem de n\u00famero).
-Requirement_MaxUpper=N\u00e3o pode incluir mais de %1% letra mai\u00fascula.
-Requirement_MaxUpperPlural=N\u00e3o pode incluir mais de %1% letras mai\u00fasculas.
-Requirement_MinAlpha=Deve incluir no m\u00ednimo %1% letra.
-Requirement_MinAlphaPlural=Deve incluir no m\u00ednimo %1% letras.
-Requirement_MinimumFrequency=Pode ser alterado n\u00e3o mais de uma vez a cada %1%.
-Requirement_MinLength=Deve ter no m\u00ednimo %1% caractere.
-Requirement_MinLengthPlural=Deve ter no m\u00ednimo %1% caracteres.
-Requirement_MinLower=Deve ter no m\u00ednimo %1% letra min\u00fascula.
-Requirement_MinLowerPlural=Deve ter no m\u00ednimo %1% letras min\u00fasculas.
-Requirement_MinNumeric=Deve incluir no m\u00ednimo %1% n\u00famero.
-Requirement_MinNumericPlural=Deve incluir no m\u00ednimo %1% n\u00fameros.
-Requirement_MinSpecial=Deve ter no m\u00ednimo %1% caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_MinSpecialPlural=Deve ter no m\u00ednimo %1% caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
-Requirement_MinUnique=Deve ter no m\u00ednimo %1% caractere exclusivo.
-Requirement_MinUniquePlural=Deve ter no m\u00ednimo %1% caracteres exclusivos.
-Requirement_MinUpper=Deve ter no m\u00ednimo %1% letra mai\u00fascula.
-Requirement_MinUpperPlural=Deve ter no m\u00ednimo %1% letras mai\u00fasculas.
-Requirement_NotCaseSensitive=A senha n\u00e3o diferencia mai\u00fasculas e min\u00fasculas.
-Requirement_OldChar=N\u00e3o pode ter mais de %1% caractere da senha atual.
-Requirement_OldCharPlural=N\u00e3o pode ter mais de %1% caracteres que a senha atual.
-Requirement_RequiredChars=Deve incluir no m\u00ednimo um de cada dos seguintes caracteres:
-Requirement_UniqueRequired=A nova senha n\u00e3o pode ter sido usada anteriormente.
-Requirement_WordList=N\u00e3o deve incluir uma palavra comum ou sequ\u00eancia de caracteres comumente usada.
-Success_ActivateUser=A conta do usu\u00e1rio foi ativada com \u00eaxito. Certifique-se de concluir o processo ou n\u00e3o poder\u00e1 acessar a conta.
-Success_ConfigFileUpload=O arquivo de configura\u00e7\u00e3o foi carregado com \u00eaxito.
-Success_ClearResponse=Suas perguntas e respostas secretas foram removidas com \u00eaxito.
-Success_CreateGuest=A nova conta do convidado foi criada com \u00eaxito. O usu\u00e1rio convidado receber\u00e1 uma notifica\u00e7\u00e3o se o endere\u00e7o de e-mail tiver sido informado. A conta do convidado pode ainda precisar ser ativada.
-Success_CreateUser=A nova conta do usu\u00e1rio foi criada com \u00eaxito.
-Success_ForgottenUsername=Seu nome de usu\u00e1rio \u00e9 %1%. Registre seu nome de usu\u00e1rio para uso futuro.
-Success_NewUserForm=Sua conta est\u00e1 pronta para ser criada. Continue quando estiver pronto.
-Success_PasswordChange=Sua senha foi alterada com \u00eaxito.
-Success_PasswordReset=A senha para %1% foi definida com \u00eaxito.
-Success_PasswordSend=Sua nova senha foi enviada para %1%. Feche esta janela e efetue login usando a nova senha.
-Success_ResponsesMeetRules=Suas respostas atendem aos requisitos. Clique em Salvar Respostas quando estiver pronto.
-Success_SetupResponse=Suas perguntas e respostas secretas foram salvas com \u00eaxito. Se voc\u00ea esquecer a senha, poder\u00e1 usar as respostas a essas perguntas para redefini-la.
-Success_Unknown=A opera\u00e7\u00e3o foi conclu\u00edda com \u00eaxito.
-Success_UnlockAccount=Sua conta foi desbloqueada.
-Success_UpdateGuest=A conta do convidado foi atualizada com \u00eaxito. O usu\u00e1rio convidado receber\u00e1 uma notifica\u00e7\u00e3o se o endere\u00e7o de e-mail tiver sido informado.
-Success_UpdateProfile=As informa\u00e7\u00f5es do usu\u00e1rio foram atualizadas com \u00eaxito.
-Success_UpdateForm=O seu perfil est\u00e1 pronto para ser atualizado. Continue quando estiver pronto.
-Success_Action=A a\u00e7\u00e3o %1% foi conclu\u00edda com \u00eaxito.
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+EventLog_Startup=Inicializa\u00e7\u00e3o do Aplicativo
+EventLog_Shutdown=Desligamento do Aplicativo
+EventLog_FatalEvent=Evento Fatal
+EventLog_ModifyConfiguration=Configura\u00e7\u00e3o Modificada
+EventLog_IntruderAttempt=Tentativa de Intruso
+EventLog_IntruderLockout=Bloqueio de Intrus\u00e3o
+EventLog_ActivateUser=Ativar Conta
+EventLog_Authenticate=Autentica\u00e7\u00e3o
+EventLog_AgreementPassed=Contrato Aprovado
+EventLog_ChangePassword=Mudar Senha
+EventLog_UnlockPassword=Desbloquear Senha
+EventLog_CreateUser=Criar Conta
+EventLog_HelpdeskAction=A\u00e7\u00e3o do Suporte T\u00e9cnico
+EventLog_HelpdeskClearResponses=Limpar Respostas do Suporte T\u00e9cnico
+EventLog_HelpdeskClearOtpSecret=Limpar Segredo OTP do Suporte T\u00e9cnico
+EventLog_HelpdeskSetPassword=Definir Senha do Suporte T\u00e9cnico
+EventLog_HelpdeskUnlockPassword=Desbloquear Senha do Suporte T\u00e9cnico
+EventLog_HelpdeskDeleteUser=Apagar Usu\u00e1rio do Suporte T\u00e9cnico
+EventLog_HelpdeskViewDetail=Detalhe de Exibi\u00e7\u00e3o da Central de Atendimento
+EventLog_HelpdeskVerifyOtp=OTP de Verifica\u00e7\u00e3o da Central de Atendimento
+EventLog_IntruderUser=Bloqueio de Usu\u00e1rio Intruso
+EventLog_TokenIssued=Token Emitido
+EventLog_TokenClaimed=Token Requerido
+EventLog_ClearResponses=Limpar Respostas
+EventLog_RecoverPassword=Recuperar Senha Esquecida
+EventLog_SetupResponses=Configurar Respostas da Senha
+Eventlog_SetupOtpSecret=Configurar Segredo OTP
+EventLog_UpdateProfile=Atualizar Atributos
+Requirement_ADComplexity=Deve ter no m\u00ednimo tr\u00eas tipos dos seguintes caracteres: <ul><li>Mai\u00fascula (A-Z)</li><li>Min\u00fascula (a-z)</li><li>N\u00famero (0-9)</li><li>S\u00edmbolo (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity2008=Deve ter no m\u00ednimo %1% tipos dos seguintes caracteres: <ul><li>Mai\u00fascula (A-Z)</li><li>Min\u00fascula (a-z)</li><li>N\u00famero (0-9)</li><li>S\u00edmbolo (!, #, $, etc.)</li><li>Outros caracteres do idioma n\u00e3o listados acima</li></ul>
+Requirement_AllowNumeric=N\u00e3o deve incluir caracteres num\u00e9ricos.
+Requirement_AllowSpecial=N\u00e3o deve incluir caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_CaseSensitive=A senha diferencia mai\u00fasculas e min\u00fasculas.
+Requirement_DisAllowedAttributes=N\u00e3o deve incluir parte do seu nome ou nome de usu\u00e1rio.
+Requirement_DisAllowedValues=N\u00e3o deve incluir os seguintes valores: %1%
+Requirement_FirstNumeric=O primeiro caractere n\u00e3o pode ser num\u00e9rico.
+Requirement_FirstSpecial=O primeiro caractere n\u00e3o pode ser um s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_LastNumeric=O \u00faltimo caractere n\u00e3o pode ser num\u00e9rico.
+Requirement_LastSpecial=O \u00faltimo caractere n\u00e3o pode ser um s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_MaxAlpha=N\u00e3o pode incluir mais de %1% letra.
+Requirement_MaxAlphaPlural=N\u00e3o pode incluir mais de %1% letras.
+Requirement_MaxLength=N\u00e3o deve ter mais de %1% caractere.
+Requirement_MaxLengthPlural=N\u00e3o deve ter mais de %1% caractere.
+Requirement_MaxLower=N\u00e3o pode incluir mais de %1% letra min\u00fascula.
+Requirement_MaxLowerPlural=N\u00e3o pode incluir mais de %1% letras min\u00fasculas.
+Requirement_MaxNumeric=N\u00e3o pode incluir mais de %1% n\u00famero.
+Requirement_MaxNumericPlural=N\u00e3o pode incluir mais de %1% n\u00fameros.
+Requirement_MaxRepeat=N\u00e3o deve repetir um caractere mais de %1% vez.
+Requirement_MaxRepeatPlural=N\u00e3o deve repetir um caractere mais de %1% vezes.
+Requirement_MaxSeqRepeat=N\u00e3o deve repetir um caractere sequencialmente mais de %1% vez.
+Requirement_MaxSeqRepeatPlural=N\u00e3o deve repetir um caractere sequencialmente mais de %1% vezes.
+Requirement_MaxSpecial=N\u00e3o pode incluir mais de %1% caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_MaxSpecialPlural=N\u00e3o pode incluir mais de %1% caracteres de s\u00edmbolo (n\u00e3o de letra nem de n\u00famero).
+Requirement_MaxUpper=N\u00e3o pode incluir mais de %1% letra mai\u00fascula.
+Requirement_MaxUpperPlural=N\u00e3o pode incluir mais de %1% letras mai\u00fasculas.
+Requirement_MinAlpha=Deve incluir no m\u00ednimo %1% letra.
+Requirement_MinAlphaPlural=Deve incluir no m\u00ednimo %1% letras.
+Requirement_MinimumFrequency=Pode ser alterado n\u00e3o mais de uma vez a cada %1%.
+Requirement_MinLength=Deve ter no m\u00ednimo %1% caractere.
+Requirement_MinLengthPlural=Deve ter no m\u00ednimo %1% caracteres.
+Requirement_MinLower=Deve ter no m\u00ednimo %1% letra min\u00fascula.
+Requirement_MinLowerPlural=Deve ter no m\u00ednimo %1% letras min\u00fasculas.
+Requirement_MinNumeric=Deve incluir no m\u00ednimo %1% n\u00famero.
+Requirement_MinNumericPlural=Deve incluir no m\u00ednimo %1% n\u00fameros.
+Requirement_MinSpecial=Deve ter no m\u00ednimo %1% caractere de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_MinSpecialPlural=Deve ter no m\u00ednimo %1% caracteres de s\u00edmbolo (n\u00e3o alfanum\u00e9rico).
+Requirement_MinUnique=Deve ter no m\u00ednimo %1% caractere exclusivo.
+Requirement_MinUniquePlural=Deve ter no m\u00ednimo %1% caracteres exclusivos.
+Requirement_MinUpper=Deve ter no m\u00ednimo %1% letra mai\u00fascula.
+Requirement_MinUpperPlural=Deve ter no m\u00ednimo %1% letras mai\u00fasculas.
+Requirement_NotCaseSensitive=A senha n\u00e3o diferencia mai\u00fasculas e min\u00fasculas.
+Requirement_OldChar=N\u00e3o pode ter mais de %1% caractere da senha atual.
+Requirement_OldCharPlural=N\u00e3o pode ter mais de %1% caracteres que a senha atual.
+Requirement_RequiredChars=Deve incluir no m\u00ednimo um de cada dos seguintes caracteres:
+Requirement_UniqueRequired=A nova senha n\u00e3o pode ter sido usada anteriormente.
+Requirement_WordList=N\u00e3o deve incluir uma palavra comum ou sequ\u00eancia de caracteres comumente usada.
+Rule_PolicyEnabled=Pol\u00edtica Habilitada
+Rule_MinimumLength=Tamanho M\u00ednimo
+Rule_MaximumLength=Tamanho M\u00e1ximo
+Rule_MinimumUpperCase=M\u00ednimo de Letras Mai\u00fasculas
+Rule_MaximumUpperCase=M\u00e1ximo de Letras Mai\u00fasculas
+Rule_MinimumLowerCase=M\u00ednimo de Letras Min\u00fasculas
+Rule_MaximumLowerCase=M\u00e1ximo de Letras Min\u00fasculas
+Rule_AllowNumeric=Permitir Num\u00e9rico
+Rule_MinimumNumeric=M\u00ednimo de Num\u00e9ricos
+Rule_MaximumNumeric=M\u00e1ximo de Num\u00e9ricos
+Rule_MinimumUnique=M\u00ednimo de \u00danicos
+Rule_MaximumUnique=M\u00e1ximo de \u00danicos
+Rule_AllowFirstCharNumeric=Permitir Primeiro Caractere Num\u00e9rico
+Rule_AllowLastCharNumeric=Permitir \u00daltimo Caractere Num\u00e9rico
+Rule_AllowSpecial=Permitir Especial
+Rule_MinimumSpecial=M\u00ednimo de Especiais
+Rule_MaximumSpecial=M\u00e1ximo de Especiais
+Rule_AllowFirstCharSpecial=Permitir Primeiro Caractere Especial
+Rule_AllowLastCharSpecial=Permitir \u00daltimo Caractere Especial
+Rule_MaximumRepeat=M\u00e1ximo de Repeti\u00e7\u00f5es
+Rule_MaximumSequentialRepeat=M\u00e1ximo de Repeti\u00e7\u00f5es Sequenciais
+Rule_ChangeMessage=Alterar Mensagem
+Rule_ExpirationInterval=Intervalo de Vencimento
+Rule_MinimumLifetime=Vida \u00datil M\u00ednima
+Rule_CaseSensitive=Distinguir entre Letras Mai\u00fasculas e Min\u00fasculas
+Rule_EnforceAtLogin=Assegurar o Uso Obrigat\u00f3rio ao Login
+Rule_ChallengeResponseEnabled=Resposta de Verifica\u00e7\u00e3o Habilitada
+Rule_UniqueRequired=\u00danico Obrigat\u00f3rio
+Rule_DisallowedValues=Valores N\u00e3o Permitidos
+Rule_DisallowedAttributes=Atributos N\u00e3o Permitidos
+Rule_ADComplexity=Complexidade de AD
+Rule_DisallowCurrent=N\u00e3o Permitir Atual
+Rule_MaximumOldChars=M\u00e1ximo de Caracteres Antigos
+Rule_RegExMatch=Correspond\u00eancia de Express\u00e3o Regular
+Rule_RegExNoMatch=Express\u00e3o Regular Sem Correspond\u00eancia
+Rule_MinimumAlpha=M\u00ednimo de Alfab\u00e9ticos
+Rule_MaximumAlpha=M\u00e1ximo de Alfab\u00e9ticos
+Rule_MinimumNonAlpha=M\u00ednimo de N\u00e3o Alfab\u00e9ticos
+Rule_MaximumNonAlpha=M\u00e1ximo de N\u00e3o Alfab\u00e9ticos
+Rule_EnableWordlist=Habilitar Lista de Palavras
+Rule_MinimumStrength=For\u00e7a M\u00ednima
+Rule_MaximumConsecutive=M\u00e1ximo Consecutivo
+Rule_CharGroupsValues=Valores do Grupo de Caracteres
+Rule_CharGroupsMinMatch=M\u00ednimo Requerido dos Grupos de Caracteres
+Rule_AllowUserChange=Permitir ao Admin Mudar Senha
+Rule_AllowAdminChange=Permitir ao Usu\u00e1rio Mudar Senha
+Rule_ADComplexityLevel=N\u00edvel de Complexidade de AD
+Rule_ADComplexityMaxViolations=M\u00e1ximo de Viola\u00e7\u00f5es de Complexidade do AD
+Success_ActivateUser=A conta do usu\u00e1rio foi ativada com \u00eaxito. Certifique-se de concluir o processo ou n\u00e3o poder\u00e1 acessar a conta.
+Success_ConfigFileUpload=O arquivo de configura\u00e7\u00e3o foi carregado com \u00eaxito.
+Success_ClearResponse=Suas perguntas e respostas secretas foram removidas com \u00eaxito.
+Success_CreateGuest=A nova conta do convidado foi criada com \u00eaxito. O usu\u00e1rio convidado receber\u00e1 uma notifica\u00e7\u00e3o se o endere\u00e7o de e-mail tiver sido informado. A conta do convidado pode ainda precisar ser ativada.
+Success_CreateUser=A nova conta do usu\u00e1rio foi criada com \u00eaxito.
+Success_ForgottenUsername=Seu nome de usu\u00e1rio \u00e9 %1%. Registre seu nome de usu\u00e1rio para uso futuro.
+Success_NewUserForm=Sua conta est\u00e1 pronta para ser criada. Continue quando estiver pronto.
+Success_PasswordChange=Sua senha foi alterada com \u00eaxito.
+Success_PasswordReset=A senha para %1% foi definida com \u00eaxito.
+Success_PasswordSend=Sua nova senha foi enviada para %1%. Feche esta janela e efetue login usando a nova senha.
+Success_ResponsesMeetRules=Suas respostas cumprem os requisitos. Clique em Gravar Respostas quando estiver pronto.
+Success_SetupResponse=Suas perguntas e respostas secretas foram salvas com \u00eaxito. Se esquecer a senha, poder\u00e1 usar as respostas a essas perguntas para redefini-la.
+Success_Unknown=A opera\u00e7\u00e3o foi conclu\u00edda com \u00eaxito.
+Success_UnlockAccount=Sua conta foi desbloqueada.
+Success_UpdateGuest=A conta do convidado foi atualizada com \u00eaxito. O usu\u00e1rio convidado receber\u00e1 uma notifica\u00e7\u00e3o se o endere\u00e7o de e-mail tiver sido informado.
+Success_UpdateProfile=As informa\u00e7\u00f5es do usu\u00e1rio foram atualizadas com \u00eaxito.
+Success_UpdateForm=O seu perfil est\u00e1 pronto para ser atualizado. Continue quando estiver pronto.
+Success_Action=A a\u00e7\u00e3o %1% foi conclu\u00edda com \u00eaxito.
+Success_OtpSetup=A inscri\u00e7\u00e3o do dispositivo foi conclu\u00edda com sucesso.

+ 12 - 1
pwm/servlet/src/password/pwm/i18n/Message_sv.properties

@@ -28,7 +28,9 @@ EventLog_IntruderAttempt=Intr\u00e5ngsf\u00f6rs\u00f6k
 EventLog_IntruderLockout=Utest\u00e4ngning av st\u00f6rande anv\u00e4ndare
 EventLog_ActivateUser=Aktivera konto
 EventLog_Authenticate=Autentisering
+EventLog_AgreementPassed=Avtalet p\u00e5skrivet
 EventLog_ChangePassword=\u00c4ndra l\u00f6senord
+EventLog_UnlockPassword=L\u00e5s upp l\u00f6senordet
 EventLog_CreateUser=Skapa konto
 EventLog_HelpdeskAction=\u00c5tg\u00e4rd fr\u00e5n supportavdelningen
 EventLog_HelpdeskClearResponses=Supportavdelningen rensar svar
@@ -36,6 +38,8 @@ EventLog_HelpdeskClearOtpSecret=Supportavdelningen rensar secret f\u00f6r eng\u0
 EventLog_HelpdeskSetPassword=Supportavdelningen anger l\u00f6senord
 EventLog_HelpdeskUnlockPassword=Supportavdelningen l\u00e5ser upp l\u00f6senord
 EventLog_HelpdeskDeleteUser=Supportavdelningen tar bort anv\u00e4ndare
+EventLog_HelpdeskViewDetail=Supportavdelningen visar information
+EventLog_HelpdeskVerifyOtp=Supportavdelningen verifierar eng\u00e5ngsl\u00f6senord
 EventLog_IntruderUser=Utest\u00e4ngning av st\u00f6rande anv\u00e4ndare
 EventLog_TokenIssued=Token utf\u00e4rdad
 EventLog_TokenClaimed=Token inl\u00f6st
@@ -44,7 +48,8 @@ EventLog_RecoverPassword=\u00c5terst\u00e4ll gl\u00f6mt l\u00f6senord
 EventLog_SetupResponses=Ange l\u00f6senordssvar
 Eventlog_SetupOtpSecret=Ange secret f\u00f6r eng\u00e5ngsl\u00f6senord
 EventLog_UpdateProfile=Uppdatera attribut
-Requirement_ADComplexity=M\u00e5ste ha minst tre av f\u00f6ljande teckentyper: <ul><li>Versaler (A-Z)</li><li>Gemener (a-z)</li><li>Siffror (0-9)</li><li>Symboler (!, #, $, etc.)</li></ul>
+Requirement_ADComplexity=M\u00e5ste ha minst tre av f\u00f6ljande teckentyper: <ul><li>Versaler (A-Z)</li><li>Gemener (a-z)</li><li>Siffror (0-9)</li><li>Symboler (!, #, $ osv.)</li></ul>
+Requirement_ADComplexity2008=M\u00e5ste ha minst %1% av f\u00f6ljande teckentyper: <ul><li>Versaler (A-Z)</li><li>Gemener (a-z)</li><li>Siffror (0-9)</li><li>Symboler (!, #, $ osv.)</li><li>\u00d6vriga spr\u00e5ktecken som inte listas ovan</li></ul>
 Requirement_AllowNumeric=F\u00e5r inte inneh\u00e5lla siffror.
 Requirement_AllowSpecial=F\u00e5r inte inneh\u00e5lla symboltecken (tecken som inte \u00e4r bokst\u00e4ver eller siffror).
 Requirement_CaseSensitive=L\u00f6senordet \u00e4r skiftl\u00e4gesk\u00e4nsligt.
@@ -132,8 +137,13 @@ Rule_MinimumNonAlpha=Min icke-alfabetiska
 Rule_MaximumNonAlpha=Max icke-alfabetiska
 Rule_EnableWordlist=Aktivera ordlista
 Rule_MinimumStrength=Minsta styrka
+Rule_MaximumConsecutive=H\u00f6gsta antal i f\u00f6ljd
 Rule_CharGroupsValues=Teckengruppsv\u00e4rden
 Rule_CharGroupsMinMatch=Teckengrupper, minimikrav
+Rule_AllowUserChange=Till\u00e5t administrat\u00f6ren att \u00e4ndra l\u00f6senord
+Rule_AllowAdminChange=Till\u00e5t anv\u00e4ndaren att \u00e4ndra l\u00f6senord
+Rule_ADComplexityLevel=AD-komplexitet
+Rule_ADComplexityMaxViolations=H\u00f6gsta antal brott mot AD-komplexitet
 Success_ActivateUser=Ditt anv\u00e4ndarkonto har aktiverats. Du m\u00e5ste slutf\u00f6ra processen, annars kommer du inte att kunna komma \u00e5t ditt konto.
 Success_ConfigFileUpload=Konfigurationsfilen har \u00f6verf\u00f6rts.
 Success_ClearResponse=Dina hemliga fr\u00e5gor och svar har tagits bort.
@@ -152,3 +162,4 @@ Success_UpdateGuest=G\u00e4stkontot har uppdaterats. G\u00e4stanv\u00e4ndaren f\
 Success_UpdateProfile=Din anv\u00e4ndarinformation har uppdaterats.
 Success_UpdateForm=Din profil \u00e4r klar att uppdateras. Forts\u00e4tt n\u00e4r du \u00e4r klar.
 Success_Action=\u00c5tg\u00e4rden %1% har slutf\u00f6rts.
+Success_OtpSetup=Din enhetsregistrering \u00e4r klar.

+ 165 - 107
pwm/servlet/src/password/pwm/i18n/Message_zh_TW.properties

@@ -1,107 +1,165 @@
-#
-# Password Management Servlets (PWM)
-# http://code.google.com/p/pwm/
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2014 The PWM Project
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#
-
-EventLog_Startup=\u61c9\u7528\u7a0b\u5f0f\u555f\u52d5
-EventLog_Shutdown=\u61c9\u7528\u7a0b\u5f0f\u95dc\u6a5f
-EventLog_FatalEvent=\u56b4\u91cd\u4e8b\u4ef6
-EventLog_ModifyConfiguration=\u5df2\u4fee\u6539\u7d44\u614b
-EventLog_ActivateUser=\u555f\u52d5\u5e33\u6236
-EventLog_Authenticate=\u9a57\u8b49
-EventLog_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
-EventLog_CreateUser=\u5efa\u7acb\u5e33\u6236
-EventLog_HelpdeskAction=\u670d\u52d9\u53f0\u52d5\u4f5c
-EventLog_HelpdeskClearResponses=\u670d\u52d9\u53f0\u6e05\u9664\u56de\u61c9
-EventLog_HelpdeskClearOtpSecret=\u670d\u52d9\u53f0\u6e05\u9664 OTP \u6a5f\u5bc6
-EventLog_HelpdeskSetPassword=\u670d\u52d9\u53f0\u8a2d\u5b9a\u5bc6\u78bc
-EventLog_HelpdeskUnlockPassword=\u670d\u52d9\u53f0\u89e3\u9664\u9396\u5b9a\u5bc6\u78bc
-EventLog_IntruderLockout=\u5e33\u6236\u9396\u5b9a\u72c0\u614b
-EventLog_TokenIssued=\u5df2\u7c3d\u767c\u8a18\u865f
-EventLog_TokenClaimed=\u5df2\u8981\u6c42\u8a18\u865f
-EventLog_RecoverPassword=\u5fa9\u539f\u5fd8\u8a18\u5bc6\u78bc
-EventLog_SetupResponses=\u8a2d\u5b9a\u5bc6\u78bc\u56de\u61c9
-Eventlog_SetupOtpSecret=\u8a2d\u5b9a OTP \u6a5f\u5bc6
-EventLog_UpdateProfile=\u66f4\u65b0\u5c6c\u6027
-Requirement_ADComplexity=\u5fc5\u9808\u5305\u542b\u81f3\u5c11\u4e0b\u5217\u4e09\u7a2e\u5b57\u5143\uff1a<ul><li>\u5927\u5beb (A-Z)</li><li>\u5c0f\u5beb (a-z)</li><li>\u6578\u5b57 (0-9)</li><li>\u7b26\u865f (!, #, $, etc.)</li></ul>
-Requirement_AllowNumeric=\u4e0d\u53ef\u5305\u542b\u4efb\u4f55\u6578\u5b57\u5b57\u5143\u3002
-Requirement_AllowSpecial=\u4e0d\u53ef\u5305\u542b\u4efb\u4f55\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
-Requirement_CaseSensitive=\u5bc6\u78bc\u5340\u5206\u5927\u5c0f\u5beb\u3002
-Requirement_DisAllowedAttributes=\u4e0d\u53ef\u5305\u542b\u60a8\u7684\u540d\u7a31\u6216\u4f7f\u7528\u8005\u540d\u7a31\u7684\u4e00\u90e8\u5206\u3002
-Requirement_DisAllowedValues=\u4e0d\u53ef\u5305\u542b\u4e0b\u5217\u4efb\u4f55\u503c\uff1a%1%
-Requirement_FirstNumeric=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57\u3002
-Requirement_FirstSpecial=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57)\u3002
-Requirement_LastNumeric=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57\u3002
-Requirement_LastSpecial=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57)\u3002
-Requirement_MaxAlpha=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5b57\u6bcd\u3002
-Requirement_MaxAlphaPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5b57\u6bcd\u3002
-Requirement_MaxLength=\u9577\u5ea6\u4e0d\u53ef\u8d85\u904e %1% \u500b\u5b57\u5143\u3002
-Requirement_MaxLengthPlural=\u9577\u5ea6\u4e0d\u53ef\u8d85\u904e %1% \u500b\u5b57\u5143\u3002
-Requirement_MaxLower=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
-Requirement_MaxLowerPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
-Requirement_MaxNumeric=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u6578\u5b57\u3002
-Requirement_MaxNumericPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u6578\u5b57\u3002
-Requirement_MaxRepeat=\u4e0d\u53ef\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
-Requirement_MaxRepeatPlural=\u4e0d\u53ef\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
-Requirement_MaxSeqRepeat=\u4e0d\u53ef\u5faa\u5e8f\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
-Requirement_MaxSeqRepeatPlural=\u4e0d\u53ef\u5faa\u5e8f\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
-Requirement_MaxSpecial=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
-Requirement_MaxSpecialPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
-Requirement_MaxUpper=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
-Requirement_MaxUpperPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
-Requirement_MinAlpha=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5b57\u6bcd\u3002
-Requirement_MinAlphaPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5b57\u6bcd\u3002
-Requirement_MinimumFrequency=\u8b8a\u66f4\u983b\u7387\u4e0d\u53ef\u8d85\u904e\u6bcf %1% \u4e00\u6b21\u3002
-Requirement_MinLength=\u9577\u5ea6\u81f3\u5c11\u5fc5\u9808\u70ba %1% \u500b\u5b57\u5143\u3002
-Requirement_MinLengthPlural=\u9577\u5ea6\u81f3\u5c11\u5fc5\u9808\u70ba %1% \u500b\u5b57\u5143\u3002
-Requirement_MinLower=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
-Requirement_MinLowerPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
-Requirement_MinNumeric=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u6578\u5b57\u3002
-Requirement_MinNumericPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u6578\u5b57\u3002
-Requirement_MinSpecial=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
-Requirement_MinSpecialPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
-Requirement_MinUnique=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u552f\u4e00\u5b57\u5143\u3002
-Requirement_MinUniquePlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u552f\u4e00\u5b57\u5143\u3002
-Requirement_MinUpper=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
-Requirement_MinUpperPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
-Requirement_NotCaseSensitive=\u5bc6\u78bc\u4e0d\u5340\u5206\u5927\u5c0f\u5beb\u3002
-Requirement_OldChar=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u76ee\u524d\u5bc6\u78bc\u7684\u5b57\u5143\u3002
-Requirement_OldCharPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u76ee\u524d\u5bc6\u78bc\u7684\u5b57\u5143\u3002
-Requirement_RequiredChars=\u5fc5\u9808\u5305\u542b\u4e0b\u5217\u81f3\u5c11\u4e00\u500b\u5b57\u5143\uff1a
-Requirement_UniqueRequired=\u65b0\u5bc6\u78bc\u4e0d\u53ef\u4ee5\u662f\u4e4b\u524d\u66fe\u4f7f\u7528\u7684\u5bc6\u78bc\u3002
-Requirement_WordList=\u4e0d\u53ef\u5305\u542b\u5e38\u898b\u6587\u5b57\u6216\u5e38\u7528\u5b57\u5143\u9806\u5e8f\u3002
-Success_ActivateUser=\u5df2\u6210\u529f\u555f\u52d5\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002\u8acb\u52d9\u5fc5\u5b8c\u6210\u7a0b\u5e8f\uff0c\u5426\u5247\u60a8\u5c07\u7121\u6cd5\u5b58\u53d6\u5e33\u6236\u3002
-Success_ConfigFileUpload=\u5df2\u6210\u529f\u4e0a\u8f09\u7d44\u614b\u6a94\u6848\u3002
-Success_ClearResponse=\u5df2\u6210\u529f\u79fb\u9664\u60a8\u7684\u6a5f\u5bc6\u554f\u984c\u548c\u7b54\u6848\u3002
-Success_CreateGuest=\u5df2\u6210\u529f\u5efa\u7acb\u65b0\u8a2a\u5ba2\u5e33\u6236\u3002\u5982\u679c\u5df2\u8f38\u5165\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u4f86\u8a2a\u4f7f\u7528\u8005\u5c07\u6703\u6536\u5230\u901a\u77e5\u3002\u4ecd\u9700\u555f\u52d5\u8a2a\u5ba2\u5e33\u6236\u3002
-Success_CreateUser=\u5df2\u6210\u529f\u5efa\u7acb\u60a8\u7684\u65b0\u4f7f\u7528\u8005\u5e33\u6236\u3002
-Success_ForgottenUsername=\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u70ba %1%\u3002\u8acb\u8a18\u9304\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u4ee5\u4f9b\u65e5\u5f8c\u4f7f\u7528\u3002
-Success_NewUserForm=\u53ef\u958b\u59cb\u5efa\u7acb\u60a8\u7684\u5e33\u6236\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u5373\u53ef\u7e7c\u7e8c\u3002
-Success_PasswordChange=\u5df2\u6210\u529f\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002
-Success_PasswordReset=\u5df2\u6210\u529f\u8a2d\u5b9a %1% \u7684\u5bc6\u78bc\u3002
-Success_PasswordSend=\u5df2\u5c07\u60a8\u7684\u65b0\u5bc6\u78bc\u50b3\u9001\u81f3 %1%\u3002\u8acb\u95dc\u9589\u6b64\u8996\u7a97\uff0c\u7136\u5f8c\u4f7f\u7528\u60a8\u7684\u65b0\u5bc6\u78bc\u767b\u5165\u3002
-Success_ResponsesMeetRules=\u60a8\u7684\u56de\u61c9\u7b26\u5408\u8981\u6c42\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u8acb\u6309\u4e00\u4e0b\u300c\u5132\u5b58\u56de\u61c9\u300d\u3002
-Success_SetupResponse=\u5df2\u6210\u529f\u5132\u5b58\u60a8\u7684\u6a5f\u5bc6\u554f\u984c\u548c\u7b54\u6848\u3002\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u9019\u4e9b\u554f\u984c\u7684\u7b54\u6848\u91cd\u8a2d\u5bc6\u78bc\u3002
-Success_Unknown=\u5df2\u6210\u529f\u5b8c\u6210\u64cd\u4f5c\u3002
-Success_UnlockAccount=\u5df2\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002
-Success_UpdateGuest=\u5df2\u6210\u529f\u66f4\u65b0\u8a2a\u5ba2\u5e33\u6236\u3002\u5982\u679c\u5df2\u8f38\u5165\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u4f86\u8a2a\u4f7f\u7528\u8005\u5c07\u6703\u6536\u5230\u901a\u77e5\u3002
-Success_UpdateProfile=\u5df2\u6210\u529f\u66f4\u65b0\u60a8\u7684\u4f7f\u7528\u8005\u8cc7\u8a0a\u3002
-Success_UpdateForm=\u53ef\u958b\u59cb\u66f4\u65b0\u60a8\u7684\u8a2d\u5b9a\u6a94\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u5373\u53ef\u7e7c\u7e8c\u3002
-Success_Action=\u5df2\u6210\u529f\u5b8c\u6210\u52d5\u4f5c %1%\u3002
+#
+# Password Management Servlets (PWM)
+# http://code.google.com/p/pwm/
+#
+# Copyright (c) 2006-2009 Novell, Inc.
+# Copyright (c) 2009-2015 The PWM Project
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+EventLog_Startup=\u61c9\u7528\u7a0b\u5f0f\u555f\u52d5
+EventLog_Shutdown=\u61c9\u7528\u7a0b\u5f0f\u95dc\u6a5f
+EventLog_FatalEvent=\u56b4\u91cd\u4e8b\u4ef6
+EventLog_ModifyConfiguration=\u5df2\u4fee\u6539\u7d44\u614b
+EventLog_IntruderAttempt=\u4fb5\u5165\u8005\u5617\u8a66
+EventLog_IntruderLockout=\u5e33\u6236\u9396\u5b9a\u72c0\u614b
+EventLog_ActivateUser=\u555f\u52d5\u5e33\u6236
+EventLog_Authenticate=\u9a57\u8b49
+EventLog_AgreementPassed=\u5df2\u901a\u904e\u5354\u8b70
+EventLog_ChangePassword=\u8b8a\u66f4\u5bc6\u78bc
+EventLog_UnlockPassword=\u89e3\u9664\u9396\u5b9a\u5bc6\u78bc
+EventLog_CreateUser=\u5efa\u7acb\u5e33\u6236
+EventLog_HelpdeskAction=\u670d\u52d9\u53f0\u52d5\u4f5c
+EventLog_HelpdeskClearResponses=\u670d\u52d9\u53f0\u6e05\u9664\u56de\u61c9
+EventLog_HelpdeskClearOtpSecret=\u670d\u52d9\u53f0\u6e05\u9664 OTP \u6a5f\u5bc6
+EventLog_HelpdeskSetPassword=\u670d\u52d9\u53f0\u8a2d\u5b9a\u5bc6\u78bc
+EventLog_HelpdeskUnlockPassword=\u670d\u52d9\u53f0\u89e3\u9664\u9396\u5b9a\u5bc6\u78bc
+EventLog_HelpdeskDeleteUser=\u670d\u52d9\u53f0\u522a\u9664\u4f7f\u7528\u8005
+EventLog_HelpdeskViewDetail=\u670d\u52d9\u53f0\u6aa2\u8996\u8a73\u7d30\u8cc7\u6599
+EventLog_HelpdeskVerifyOtp=\u670d\u52d9\u53f0\u9a57\u8b49 OTP
+EventLog_IntruderUser=\u4fb5\u5165\u8005\u4f7f\u7528\u8005\u9396\u5b9a
+EventLog_TokenIssued=\u5df2\u7c3d\u767c\u8a18\u865f
+EventLog_TokenClaimed=\u5df2\u8981\u6c42\u8a18\u865f
+EventLog_ClearResponses=\u6e05\u9664\u56de\u61c9
+EventLog_RecoverPassword=\u5fa9\u539f\u5fd8\u8a18\u5bc6\u78bc
+EventLog_SetupResponses=\u8a2d\u5b9a\u5bc6\u78bc\u56de\u61c9
+Eventlog_SetupOtpSecret=\u8a2d\u5b9a OTP \u6a5f\u5bc6
+EventLog_UpdateProfile=\u66f4\u65b0\u5c6c\u6027
+Requirement_ADComplexity=\u5fc5\u9808\u5305\u542b\u81f3\u5c11\u4e0b\u5217\u4e09\u7a2e\u5b57\u5143\uff1a<ul><li>\u5927\u5beb (A-Z)</li><li>\u5c0f\u5beb (a-z)</li><li>\u6578\u5b57 (0-9)</li><li>\u7b26\u865f (!\u3001#\u3001$\u3001\u7b49)</li></ul>
+Requirement_ADComplexity2008=\u5fc5\u9808\u5305\u542b\u81f3\u5c11\u4e0b\u5217 %1% \u7a2e\u5b57\u5143\uff1a<ul><li>\u5927\u5beb (A-Z)</li><li>\u5c0f\u5beb (a-z)</li><li>\u6578\u5b57 (0-9)</li><li>\u7b26\u865f (!\u3001#\u3001$\u3001\u7b49)</li></ul>\u4e0a\u65b9\u672a\u5217\u51fa\u5176\u4ed6\u8a9e\u8a00\u5b57\u5143</li></ul>
+Requirement_AllowNumeric=\u4e0d\u53ef\u5305\u542b\u4efb\u4f55\u6578\u5b57\u5b57\u5143\u3002
+Requirement_AllowSpecial=\u4e0d\u53ef\u5305\u542b\u4efb\u4f55\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
+Requirement_CaseSensitive=\u5bc6\u78bc\u5340\u5206\u5927\u5c0f\u5beb\u3002
+Requirement_DisAllowedAttributes=\u4e0d\u53ef\u5305\u542b\u60a8\u7684\u540d\u7a31\u6216\u4f7f\u7528\u8005\u540d\u7a31\u7684\u4e00\u90e8\u5206\u3002
+Requirement_DisAllowedValues=\u4e0d\u53ef\u5305\u542b\u4e0b\u5217\u4efb\u4f55\u503c\uff1a%1%
+Requirement_FirstNumeric=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57\u3002
+Requirement_FirstSpecial=\u7b2c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57)\u3002
+Requirement_LastNumeric=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u6578\u5b57\u3002
+Requirement_LastSpecial=\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u4e0d\u53ef\u4ee5\u662f\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57)\u3002
+Requirement_MaxAlpha=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5b57\u6bcd\u3002
+Requirement_MaxAlphaPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5b57\u6bcd\u3002
+Requirement_MaxLength=\u9577\u5ea6\u4e0d\u53ef\u8d85\u904e %1% \u500b\u5b57\u5143\u3002
+Requirement_MaxLengthPlural=\u9577\u5ea6\u4e0d\u53ef\u8d85\u904e %1% \u500b\u5b57\u5143\u3002
+Requirement_MaxLower=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
+Requirement_MaxLowerPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
+Requirement_MaxNumeric=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u6578\u5b57\u3002
+Requirement_MaxNumericPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u6578\u5b57\u3002
+Requirement_MaxRepeat=\u4e0d\u53ef\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
+Requirement_MaxRepeatPlural=\u4e0d\u53ef\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
+Requirement_MaxSeqRepeat=\u4e0d\u53ef\u5faa\u5e8f\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
+Requirement_MaxSeqRepeatPlural=\u4e0d\u53ef\u5faa\u5e8f\u91cd\u8907\u4efb\u4f55\u5b57\u5143\u8d85\u904e %1% \u6b21\u3002
+Requirement_MaxSpecial=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
+Requirement_MaxSpecialPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
+Requirement_MaxUpper=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
+Requirement_MaxUpperPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
+Requirement_MinAlpha=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5b57\u6bcd\u3002
+Requirement_MinAlphaPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5b57\u6bcd\u3002
+Requirement_MinimumFrequency=\u8b8a\u66f4\u983b\u7387\u4e0d\u53ef\u8d85\u904e\u6bcf %1% \u4e00\u6b21\u3002
+Requirement_MinLength=\u9577\u5ea6\u81f3\u5c11\u5fc5\u9808\u70ba %1% \u500b\u5b57\u5143\u3002
+Requirement_MinLengthPlural=\u9577\u5ea6\u81f3\u5c11\u5fc5\u9808\u70ba %1% \u500b\u5b57\u5143\u3002
+Requirement_MinLower=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
+Requirement_MinLowerPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5c0f\u5beb\u5b57\u6bcd\u3002
+Requirement_MinNumeric=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u6578\u5b57\u3002
+Requirement_MinNumericPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u6578\u5b57\u3002
+Requirement_MinSpecial=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
+Requirement_MinSpecialPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u7b26\u865f (\u975e\u5b57\u6bcd\u6216\u6578\u5b57) \u5b57\u5143\u3002
+Requirement_MinUnique=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u552f\u4e00\u5b57\u5143\u3002
+Requirement_MinUniquePlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u552f\u4e00\u5b57\u5143\u3002
+Requirement_MinUpper=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
+Requirement_MinUpperPlural=\u5fc5\u9808\u5305\u542b\u81f3\u5c11 %1% \u500b\u5927\u5beb\u5b57\u6bcd\u3002
+Requirement_NotCaseSensitive=\u5bc6\u78bc\u4e0d\u5340\u5206\u5927\u5c0f\u5beb\u3002
+Requirement_OldChar=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u76ee\u524d\u5bc6\u78bc\u7684\u5b57\u5143\u3002
+Requirement_OldCharPlural=\u4e0d\u53ef\u5305\u542b\u8d85\u904e %1% \u500b\u76ee\u524d\u5bc6\u78bc\u7684\u5b57\u5143\u3002
+Requirement_RequiredChars=\u5fc5\u9808\u5305\u542b\u4e0b\u5217\u81f3\u5c11\u4e00\u500b\u5b57\u5143\uff1a
+Requirement_UniqueRequired=\u65b0\u5bc6\u78bc\u4e0d\u53ef\u4ee5\u662f\u4e4b\u524d\u66fe\u4f7f\u7528\u7684\u5bc6\u78bc\u3002
+Requirement_WordList=\u4e0d\u53ef\u5305\u542b\u5e38\u898b\u6587\u5b57\u6216\u5e38\u7528\u5b57\u5143\u9806\u5e8f\u3002
+Rule_PolicyEnabled=\u5df2\u555f\u7528\u898f\u5247
+Rule_MinimumLength=\u9577\u5ea6\u4e0b\u9650
+Rule_MaximumLength=\u9577\u5ea6\u4e0a\u9650
+Rule_MinimumUpperCase=\u5927\u5beb\u5b57\u5143\u4e0b\u9650
+Rule_MaximumUpperCase=\u5927\u5beb\u5b57\u5143\u4e0a\u9650
+Rule_MinimumLowerCase=\u5c0f\u5beb\u5b57\u5143\u4e0b\u9650
+Rule_MaximumLowerCase=\u5c0f\u5beb\u5b57\u5143\u4e0a\u9650
+Rule_AllowNumeric=\u5141\u8a31\u6578\u503c\u5b57\u5143
+Rule_MinimumNumeric=\u6578\u503c\u5b57\u5143\u4e0b\u9650
+Rule_MaximumNumeric=\u6578\u503c\u5b57\u5143\u4e0a\u9650
+Rule_MinimumUnique=\u552f\u4e00\u5b57\u5143\u4e0b\u9650
+Rule_MaximumUnique=\u552f\u4e00\u5b57\u5143\u4e0a\u9650
+Rule_AllowFirstCharNumeric=\u5141\u8a31\u7b2c\u4e00\u500b\u5b57\u5143\u662f\u6578\u503c\u5b57\u5143
+Rule_AllowLastCharNumeric=\u5141\u8a31\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u662f\u6578\u503c\u5b57\u5143
+Rule_AllowSpecial=\u5141\u8a31\u7279\u6b8a\u5b57\u5143
+Rule_MinimumSpecial=\u7279\u6b8a\u5b57\u5143\u4e0b\u9650
+Rule_MaximumSpecial=\u7279\u6b8a\u5b57\u5143\u4e0a\u9650
+Rule_AllowFirstCharSpecial=\u5141\u8a31\u7b2c\u4e00\u500b\u5b57\u5143\u662f\u7279\u6b8a\u5b57\u5143
+Rule_AllowLastCharSpecial=\u5141\u8a31\u6700\u5f8c\u4e00\u500b\u5b57\u5143\u662f\u7279\u6b8a\u5b57\u5143
+Rule_MaximumRepeat=\u91cd\u8907\u5b57\u5143\u4e0a\u9650
+Rule_MaximumSequentialRepeat=\u5faa\u5e8f\u91cd\u8907\u5b57\u5143\u4e0a\u9650
+Rule_ChangeMessage=\u8b8a\u66f4\u8a0a\u606f
+Rule_ExpirationInterval=\u904e\u671f\u9593\u9694
+Rule_MinimumLifetime=\u751f\u547d\u671f\u9593\u4e0b\u9650
+Rule_CaseSensitive=\u5340\u5206\u5927\u5c0f\u5beb
+Rule_EnforceAtLogin=\u5728\u767b\u5165\u6642\u5f37\u5236\u57f7\u884c
+Rule_ChallengeResponseEnabled=\u5df2\u555f\u7528\u8655\u7406\u5b89\u5168\u56de\u61c9
+Rule_UniqueRequired=\u9700\u8981\u552f\u4e00\u5b57\u5143
+Rule_DisallowedValues=\u4e0d\u5141\u8a31\u7684\u503c
+Rule_DisallowedAttributes=\u4e0d\u5141\u8a31\u7684\u5c6c\u6027
+Rule_ADComplexity=AD \u8907\u96dc\u5ea6
+Rule_DisallowCurrent=\u4e0d\u5141\u8a31\u76ee\u524d\u7684\u9805\u76ee
+Rule_MaximumOldChars=\u820a\u5b57\u5143\u4e0a\u9650
+Rule_RegExMatch=\u898f\u5247\u904b\u7b97\u5f0f\u76f8\u7b26
+Rule_RegExNoMatch=\u898f\u5247\u904b\u7b97\u5f0f\u4e0d\u76f8\u7b26
+Rule_MinimumAlpha=\u82f1\u6587\u5b57\u5143\u4e0b\u9650
+Rule_MaximumAlpha=\u82f1\u6587\u5b57\u5143\u4e0a\u9650
+Rule_MinimumNonAlpha=\u975e\u82f1\u6587\u5b57\u5143\u4e0b\u9650
+Rule_MaximumNonAlpha=\u975e\u82f1\u6587\u5b57\u5143\u4e0a\u9650
+Rule_EnableWordlist=\u555f\u7528\u55ae\u5b57\u6e05\u55ae
+Rule_MinimumStrength=\u5f37\u529b\u4e0b\u9650
+Rule_MaximumConsecutive=\u9023\u7e8c\u4e0a\u9650
+Rule_CharGroupsValues=\u5b57\u5143\u7fa4\u7d44\u503c
+Rule_CharGroupsMinMatch=\u9700\u8981\u5b57\u5143\u7fa4\u7d44\u4e0b\u9650
+Rule_AllowUserChange=\u5141\u8a31\u7ba1\u7406\u54e1\u8b8a\u66f4\u5bc6\u78bc
+Rule_AllowAdminChange=\u5141\u8a31\u4f7f\u7528\u8005\u8b8a\u66f4\u5bc6\u78bc
+Rule_ADComplexityLevel=AD \u8907\u96dc\u5ea6\u7b49\u7d1a
+Rule_ADComplexityMaxViolations=AD \u8907\u96dc\u5ea6\u9055\u898f\u4e0a\u9650
+Success_ActivateUser=\u5df2\u6210\u529f\u555f\u52d5\u60a8\u7684\u4f7f\u7528\u8005\u5e33\u6236\u3002\u8acb\u52d9\u5fc5\u5b8c\u6210\u7a0b\u5e8f\uff0c\u5426\u5247\u60a8\u5c07\u7121\u6cd5\u5b58\u53d6\u5e33\u6236\u3002
+Success_ConfigFileUpload=\u5df2\u6210\u529f\u4e0a\u8f09\u7d44\u614b\u6a94\u6848\u3002
+Success_ClearResponse=\u5df2\u6210\u529f\u79fb\u9664\u60a8\u7684\u6a5f\u5bc6\u554f\u984c\u548c\u7b54\u6848\u3002
+Success_CreateGuest=\u5df2\u6210\u529f\u5efa\u7acb\u65b0\u8a2a\u5ba2\u5e33\u6236\u3002\u5982\u679c\u5df2\u8f38\u5165\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u4f86\u8a2a\u4f7f\u7528\u8005\u5c07\u6703\u6536\u5230\u901a\u77e5\u3002\u4ecd\u9700\u555f\u52d5\u8a2a\u5ba2\u5e33\u6236\u3002
+Success_CreateUser=\u5df2\u6210\u529f\u5efa\u7acb\u60a8\u7684\u65b0\u4f7f\u7528\u8005\u5e33\u6236\u3002
+Success_ForgottenUsername=\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u70ba %1%\u3002\u8acb\u8a18\u9304\u60a8\u7684\u4f7f\u7528\u8005\u540d\u7a31\u4ee5\u4f9b\u65e5\u5f8c\u4f7f\u7528\u3002
+Success_NewUserForm=\u53ef\u958b\u59cb\u5efa\u7acb\u60a8\u7684\u5e33\u6236\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u5373\u53ef\u7e7c\u7e8c\u3002
+Success_PasswordChange=\u5df2\u6210\u529f\u8b8a\u66f4\u60a8\u7684\u5bc6\u78bc\u3002
+Success_PasswordReset=\u5df2\u6210\u529f\u8a2d\u5b9a %1% \u7684\u5bc6\u78bc\u3002
+Success_PasswordSend=\u5df2\u5c07\u60a8\u7684\u65b0\u5bc6\u78bc\u50b3\u9001\u81f3 %1%\u3002\u8acb\u95dc\u9589\u6b64\u8996\u7a97\uff0c\u7136\u5f8c\u4f7f\u7528\u60a8\u7684\u65b0\u5bc6\u78bc\u767b\u5165\u3002
+Success_ResponsesMeetRules=\u60a8\u7684\u56de\u61c9\u7b26\u5408\u8981\u6c42\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u8acb\u6309\u4e00\u4e0b\u300c\u5132\u5b58\u56de\u61c9\u300d\u3002
+Success_SetupResponse=\u611f\u8b1d\u60a8\u3002\u5df2\u6210\u529f\u5132\u5b58\u60a8\u7684\u6a5f\u5bc6\u554f\u984c\u548c\u7b54\u6848\u3002\u5982\u679c\u5fd8\u8a18\u5bc6\u78bc\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528\u9019\u4e9b\u554f\u984c\u7684\u7b54\u6848\u91cd\u8a2d\u5bc6\u78bc\u3002
+Success_Unknown=\u5df2\u6210\u529f\u5b8c\u6210\u64cd\u4f5c\u3002
+Success_UnlockAccount=\u5df2\u89e3\u9664\u9396\u5b9a\u60a8\u7684\u5e33\u6236\u3002
+Success_UpdateGuest=\u5df2\u6210\u529f\u66f4\u65b0\u8a2a\u5ba2\u5e33\u6236\u3002\u5982\u679c\u5df2\u8f38\u5165\u96fb\u5b50\u90f5\u4ef6\u5730\u5740\uff0c\u4f86\u8a2a\u4f7f\u7528\u8005\u5c07\u6703\u6536\u5230\u901a\u77e5\u3002
+Success_UpdateProfile=\u5df2\u6210\u529f\u66f4\u65b0\u60a8\u7684\u4f7f\u7528\u8005\u8cc7\u8a0a\u3002
+Success_UpdateForm=\u53ef\u958b\u59cb\u66f4\u65b0\u60a8\u7684\u8a2d\u5b9a\u6a94\u3002\u6e96\u5099\u5c31\u7dd2\u6642\u5373\u53ef\u7e7c\u7e8c\u3002
+Success_Action=\u5df2\u6210\u529f\u5b8c\u6210\u52d5\u4f5c %1%\u3002
+Success_OtpSetup=\u5df2\u6210\u529f\u5b8c\u6210\u88dd\u7f6e\u8a3b\u518a\u3002

+ 59 - 3
pwm/servlet/src/password/pwm/ldap/LdapPermissionTester.java

@@ -22,9 +22,14 @@
 
 package password.pwm.ldap;
 
+import com.novell.ldapchai.ChaiEntry;
+import com.novell.ldapchai.ChaiFactory;
 import com.novell.ldapchai.ChaiUser;
 import com.novell.ldapchai.exception.ChaiException;
+import com.novell.ldapchai.exception.ChaiOperationException;
+import com.novell.ldapchai.exception.ChaiUnavailableException;
 import com.novell.ldapchai.provider.ChaiProvider;
+import password.pwm.AppProperty;
 import password.pwm.PwmApplication;
 import password.pwm.PwmConstants;
 import password.pwm.bean.SessionLabel;
@@ -36,6 +41,8 @@ import password.pwm.error.ErrorInformation;
 import password.pwm.error.PwmError;
 import password.pwm.error.PwmOperationalException;
 import password.pwm.error.PwmUnrecoverableException;
+import password.pwm.util.cache.CacheKey;
+import password.pwm.util.cache.CachePolicy;
 import password.pwm.util.logging.PwmLogger;
 
 import java.util.Collections;
@@ -91,9 +98,7 @@ public class LdapPermissionTester {
         switch (userPermission.getType()) {
             case ldapQuery: {
                 if (userPermission.getLdapBase() != null && !userPermission.getLdapBase().trim().isEmpty()) {
-                    final String permissionBase = userPermission.getLdapBase().trim();
-                    final String userDN = userIdentity.getUserDN();
-                    if (!userDN.endsWith(permissionBase)) {
+                    if (!testUserDNmatch(pwmApplication, sessionLabel, userPermission.getLdapBase(), userIdentity)) {
                         return false;
                     }
                 }
@@ -238,4 +243,55 @@ public class LdapPermissionTester {
 
         return results;
     }
+
+    private static boolean testUserDNmatch(
+            final PwmApplication pwmApplication,
+            final SessionLabel sessionLabel,
+            final String ldapBase,
+            final UserIdentity userIdentity
+    )
+            throws PwmUnrecoverableException
+    {
+        if (ldapBase == null || ldapBase.trim().isEmpty()) {
+            return true;
+        }
+
+        final String permissionBase = ldapBase.trim();
+        final String userDN = userIdentity.getUserDN();
+        if (userDN.endsWith(permissionBase)) {
+            return true;
+        }
+
+        {
+            final boolean doCanonicalDnResolve = Boolean.parseBoolean(pwmApplication.getConfig().readAppProperty(AppProperty.SECURITY_LDAP_BASEDN_RESOLVE_CANONICAL_DN));
+            if (!doCanonicalDnResolve) {
+                return false;
+            }
+        }
+
+        String canonicalBaseDN = null;
+        final CacheKey cacheKey = CacheKey.makeCacheKey(LdapPermissionTester.class, null, "canonicalDN-" + userIdentity.getLdapProfileID() + "-" + ldapBase);
+        {
+            final String cachedDN = pwmApplication.getCacheService().get(cacheKey);
+            if (cachedDN != null) {
+                canonicalBaseDN = cachedDN;
+            }
+        }
+
+        if (canonicalBaseDN == null) {
+            try {
+                final ChaiProvider chaiProvider = pwmApplication.getProxyChaiProvider(userIdentity.getLdapProfileID());
+                ChaiEntry chaiEntry = ChaiFactory.createChaiEntry(ldapBase, chaiProvider);
+                canonicalBaseDN = chaiEntry.readCanonicalDN();
+                final long cacheSeconds = Long.parseLong(pwmApplication.getConfig().readAppProperty(AppProperty.SECURITY_LDAP_BASEDN_CANONICAL_CACHE_SECONDS));
+                final CachePolicy cachePolicy = CachePolicy.makePolicyWithExpirationMS(cacheSeconds * 1000);
+                pwmApplication.getCacheService().put(cacheKey, cachePolicy, canonicalBaseDN);
+            } catch (ChaiUnavailableException | ChaiOperationException e) {
+                LOGGER.error(sessionLabel, "error while testing userDN match against baseDN '" + ldapBase + "', error: " + e.getMessage());
+                return false;
+            }
+        }
+
+        return userDN.endsWith(canonicalBaseDN);
+    }
 }

+ 6 - 16
pwm/servlet/src/password/pwm/ldap/UserStatusReader.java

@@ -179,7 +179,8 @@ public class UserStatusReader {
             final PwmSession pwmSession,
             final UserIdentity userIdentity
     )
-            throws ChaiUnavailableException, PwmUnrecoverableException {
+            throws ChaiUnavailableException, PwmUnrecoverableException
+    {
         final String userLdapProfile = userIdentity.getLdapProfileID();
         final ChaiProvider provider = pwmApplication.getProxyChaiProvider(userLdapProfile);
         final UserInfoBean uiBean = pwmSession.getUserInfoBean();
@@ -193,27 +194,16 @@ public class UserStatusReader {
         );
     }
 
-    public void populateUserInfoBean(
-            final UserInfoBean uiBean,
+    public UserInfoBean populateUserInfoBean(
             final Locale userLocale,
             final UserIdentity userIdentity
     )
             throws PwmUnrecoverableException
     {
         final ChaiProvider provider = pwmApplication.getProxyChaiProvider(userIdentity.getLdapProfileID());
-        populateUserInfoBean(uiBean, userLocale, userIdentity, provider, null);
-    }
-
-    public void populateUserInfoBean(
-            final UserInfoBean uiBean,
-            final Locale userLocale,
-            final UserIdentity userIdentity,
-            final PasswordData currentPassword
-    )
-            throws PwmUnrecoverableException
-    {
-        final ChaiProvider provider = pwmApplication.getProxyChaiProvider(userIdentity.getLdapProfileID());
-        populateUserInfoBean(uiBean, userLocale, userIdentity, provider, currentPassword);
+        final UserInfoBean userInfoBean = new UserInfoBean();
+        populateUserInfoBean(userInfoBean, userLocale, userIdentity, provider, null);
+        return userInfoBean;
     }
 
     public void populateUserInfoBean(

+ 1 - 2
pwm/servlet/src/password/pwm/util/cli/MainClass.java

@@ -122,7 +122,6 @@ public class MainClass {
 
         final Map<String,Object> options = parseCommandOptions(parameters, args);
         final File applicationPath = figureApplicationPath(MAIN_OPTIONS);
-        out(PwmConstants.SERVLET_VERSION);
         out("applicationPath=" + applicationPath.getAbsolutePath());
         PwmApplication.verifyApplicationPath(applicationPath);
         final File configurationFile = locateConfigurationFile(applicationPath);
@@ -224,6 +223,7 @@ public class MainClass {
     public static void main(String[] args)
             throws Exception
     {
+        System.out.println(PwmConstants.PWM_APP_NAME + " " + PwmConstants.SERVLET_VERSION + " Command Line Utility");
         args = parseCommandOptions(args);
 
         initLog4j(MAIN_OPTIONS.pwmLogLevel);
@@ -231,7 +231,6 @@ public class MainClass {
         final String commandStr = args == null || args.length < 1 ? null : args[0];
 
         if (commandStr == null) {
-            System.out.println(PwmConstants.PWM_APP_NAME + " " + PwmConstants.SERVLET_VERSION + " Command Line Utility");
             System.out.println("");
             System.out.println(makeHelpTextOutput());
         } else {

+ 1 - 1
pwm/servlet/src/password/pwm/util/cli/UserReportCommand.java

@@ -70,7 +70,7 @@ public class UserReportCommand extends AbstractCliCommand {
         userReport.outputToCsv(outputFileStream, true, PwmConstants.DEFAULT_LOCALE);
 
         try { outputFileStream.close(); } catch (Exception e) { /* nothing */ }
-        out("report complete.");
+        out("report output complete.");
     }
 
     @Override

+ 1 - 3
pwm/servlet/src/password/pwm/util/intruder/IntruderManager.java

@@ -546,11 +546,9 @@ public class IntruderManager implements Serializable, PwmService {
         }
 
         try {
-            final UserInfoBean userInfoBean = new UserInfoBean();
             final UserStatusReader userStatusReader = new UserStatusReader(pwmApplication, null);
             MacroMachine.forUser(pwmApplication, PwmConstants.DEFAULT_LOCALE, null, userIdentity);
-            userStatusReader.populateUserInfoBean(
-                    userInfoBean,
+            final UserInfoBean userInfoBean = userStatusReader.populateUserInfoBean(
                     PwmConstants.DEFAULT_LOCALE,
                     userIdentity
             );

+ 1 - 0
pwm/servlet/src/password/pwm/util/localdb/LocalDBUtility.java

@@ -236,6 +236,7 @@ public class LocalDBUtility {
                 }
             }
         } finally {
+            LOGGER.trace("import process completed");;
             if (csvReader != null) {csvReader.close();}
             statTimer.cancel();
         }

+ 12 - 0
pwm/servlet/src/password/pwm/util/logging/PwmLogEvent.java

@@ -29,7 +29,9 @@ import password.pwm.util.JsonUtil;
 import password.pwm.util.StringUtil;
 
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.io.Serializable;
+import java.io.StringWriter;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -261,6 +263,15 @@ public class PwmLogEvent implements Serializable, Comparable {
             }
         }
 
+        if (this.getThrowable() != null) {
+            output.append(" (stacktrace follows)\n");
+            final StringWriter sw = new StringWriter();
+            final PrintWriter pw = new PrintWriter(sw);
+            this.getThrowable().printStackTrace(pw);
+            pw.flush();
+            output.append(sw.toString());
+        }
+
         return output.toString();
     }
 
@@ -318,6 +329,7 @@ public class PwmLogEvent implements Serializable, Comparable {
     {
         return toLogString(true);
     }
+
     public String toLogString(final boolean includeTimeStamp)
     {
         final StringBuilder sb = new StringBuilder();

+ 1 - 2
pwm/servlet/src/password/pwm/util/macro/MacroMachine.java

@@ -240,8 +240,7 @@ public class MacroMachine {
     {
         final UserDataReader userDataReader = LdapUserDataReader.appProxiedReader(pwmApplication, userIdentity);
         final UserStatusReader userStatusReader = new UserStatusReader(pwmApplication, sessionLabel);
-        final UserInfoBean userInfoBean = new UserInfoBean();
-        userStatusReader.populateUserInfoBean(userInfoBean, userLocale, userIdentity);
+        final UserInfoBean userInfoBean = userStatusReader.populateUserInfoBean(userLocale, userIdentity);
         return new MacroMachine(pwmApplication, sessionLabel, userInfoBean, null, userDataReader);
     }
 

+ 12 - 2
pwm/servlet/src/password/pwm/util/operations/ActionExecutor.java

@@ -94,8 +94,8 @@ public class ActionExecutor {
     )
             throws ChaiUnavailableException, PwmOperationalException, PwmUnrecoverableException
     {
-        final String attributeName = actionConfiguration.getAttributeName();
-        final String attributeValue = actionConfiguration.getAttributeValue();
+        String attributeName = actionConfiguration.getAttributeName();
+        String attributeValue = actionConfiguration.getAttributeValue();
 
         final ChaiUser theUser;
         if (settings.getChaiUser() != null) {
@@ -109,6 +109,16 @@ public class ActionExecutor {
             theUser = pwmApplication.getProxiedChaiUser(settings.getUserIdentity());
         }
 
+        if (settings.isExpandPwmMacros()) {
+            if (settings.getMacroMachine() == null) {
+                throw new PwmUnrecoverableException(new ErrorInformation(PwmError.ERROR_UNKNOWN,"executor specified macro expansion but did not supply macro machine"));
+            }
+            final MacroMachine macroMachine = settings.getMacroMachine();
+
+            attributeName = macroMachine.expandMacros(attributeName);
+            attributeValue = macroMachine.expandMacros(attributeValue);
+        }
+
         writeLdapAttribute(
                 pwmSession,
                 theUser,

+ 3 - 2
pwm/servlet/src/password/pwm/util/operations/CrService.java

@@ -143,14 +143,15 @@ public class CrService implements PwmService {
             } catch (ChaiException e) {
                 LOGGER.error(sessionLabel,"error reading nmas c/r policy for user " + theUser.getEntryDN() + ": " + e.getMessage());
             }
+            LOGGER.debug(sessionLabel,"no detected c/r policy for user " + theUser.getEntryDN() + " in nmas");
         }
 
         // use PWM policies if PWM is configured and either its all that is configured OR the NMAS policy read was not successful
         final String challengeProfileID = determineChallengeProfileForUser(pwmApplication, sessionLabel, userIdentity, locale);
         final ChallengeProfile challengeProfile = config.getChallengeProfile(challengeProfileID, locale);
 
-        LOGGER.debug(sessionLabel,"no detected c/r policy for user " + theUser.getEntryDN() + " in ldap ");
-        LOGGER.trace(sessionLabel,"readUserChallengeProfile completed in " + TimeDuration.fromCurrent(methodStartTime).asCompactString());
+        LOGGER.trace(sessionLabel,"readUserChallengeProfile completed in " + TimeDuration.fromCurrent(methodStartTime).asCompactString() + " returned profile: "
+                + (challengeProfile == null ? "null" : challengeProfile.getIdentifier()));
         return challengeProfile;
     }
 

+ 1 - 3
pwm/servlet/src/password/pwm/ws/client/rest/RestTokenDataClient.java

@@ -102,10 +102,8 @@ public class RestTokenDataClient implements RestClient {
         final Map<String,Object> sendData = new LinkedHashMap<>();
         sendData.put(DATA_KEY_TOKENDATA, tokenDestinationData);
         if (userIdentity != null) {
-            final UserInfoBean userInfoBean = new UserInfoBean();
             UserStatusReader userStatusReader = new UserStatusReader(pwmApplication, sessionLabel);
-            userStatusReader.populateUserInfoBean(
-                    userInfoBean,
+            final UserInfoBean userInfoBean = userStatusReader.populateUserInfoBean(
                     locale,
                     userIdentity
             );

+ 4 - 2
pwm/servlet/src/password/pwm/ws/server/RestResultBean.java

@@ -148,10 +148,12 @@ public class RestResultBean implements Serializable {
     public static RestResultBean forSuccessMessage(
             final Locale locale,
             final Configuration config,
-            final Message message
+            final Message message,
+            final String... fieldValues
+
     ) {
         final RestResultBean restResultBean = new RestResultBean();
-        final String msgText = Message.getLocalizedMessage(locale, message, config);
+        final String msgText = Message.getLocalizedMessage(locale, message, config, fieldValues);
         restResultBean.setSuccessMessage(msgText);
         return restResultBean;
     }

+ 6 - 13
pwm/servlet/src/password/pwm/ws/server/rest/RestCheckPasswordServer.java

@@ -39,6 +39,7 @@ import password.pwm.http.bean.LoginInfoBean;
 import password.pwm.ldap.UserStatusReader;
 import password.pwm.util.JsonUtil;
 import password.pwm.util.PasswordData;
+import password.pwm.util.TimeDuration;
 import password.pwm.util.logging.PwmLogger;
 import password.pwm.util.operations.PasswordUtility;
 import password.pwm.util.stats.Statistic;
@@ -53,6 +54,7 @@ import javax.ws.rs.core.Response;
 import java.io.Serializable;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.util.Date;
 
 @Path("/checkpassword")
 public class RestCheckPasswordServer extends AbstractRestServer {
@@ -125,6 +127,7 @@ public class RestCheckPasswordServer extends AbstractRestServer {
     public Response doOperation(JsonInput jsonInput)
             throws PwmUnrecoverableException
     {
+        final Date startTime = new Date();
         final RestRequestBean restRequestBean;
         try {
             final ServicePermissions servicePermissions = new ServicePermissions();
@@ -177,6 +180,8 @@ public class RestCheckPasswordServer extends AbstractRestServer {
             final JsonData jsonData = doPasswordRuleCheck(restRequestBean.getPwmApplication(), restRequestBean.getPwmSession(), checkRequest);
             final RestResultBean restResultBean = new RestResultBean();
             restResultBean.setData(jsonData);
+            final TimeDuration timeDuration = TimeDuration.fromCurrent(startTime);
+            LOGGER.trace(restRequestBean.getPwmSession(), "REST /checkpassword response (" + timeDuration.asCompactString() + "): " + JsonUtil.serialize(jsonData));
             return restResultBean.asJsonResponse();
         } catch (PwmException e) {
             return RestResultBean.fromError(e.getErrorInformation(), restRequestBean).asJsonResponse();
@@ -225,7 +230,6 @@ public class RestCheckPasswordServer extends AbstractRestServer {
     )
             throws PwmUnrecoverableException, ChaiUnavailableException
     {
-        final long startTime = System.currentTimeMillis();
         final HelpdeskProfile helpdeskProfile = pwmSession.getSessionManager().getHelpdeskProfile(pwmApplication);
         final boolean useProxy = helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_USE_PROXY);
         final boolean thirdParty = !checkRequest.getUserIdentity().equals(pwmSession.getUserInfoBean().getUserIdentity());
@@ -246,18 +250,7 @@ public class RestCheckPasswordServer extends AbstractRestServer {
                 checkRequest.getPassword2()
         );
 
-        final JsonData result = JsonData.fromPasswordCheckInfo(passwordCheckInfo);
-        {
-            final StringBuilder sb = new StringBuilder();
-            sb.append("real-time password validator called for ").append(checkRequest.getUserIdentity());
-            sb.append("\n");
-            sb.append("  process time: ").append((int) (System.currentTimeMillis() - startTime)).append("ms");
-            sb.append("\n");
-            sb.append("  passwordCheckInfo string: ").append(JsonUtil.serialize(result));
-            LOGGER.trace(pwmSession.getLabel(), sb.toString());
-        }
-
-        return result;
+        return JsonData.fromPasswordCheckInfo(passwordCheckInfo);
     }
 }
 

+ 1 - 1
pwm/servlet/src/password/pwm/ws/server/rest/bean/AppDashboardData.java

@@ -150,7 +150,7 @@ public class AppDashboardData implements Serializable {
                     "chaiApiVersion",
                     Type.string,
                     l.forKey("Field_ChaiAPIVersion"),
-                    com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION + " (" + com.novell.ldapchai.ChaiConstant.CHAI_API_BUILD_INFO + ")"
+                    com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION
             ));
 
 

+ 1 - 1
pwm/servlet/web/WEB-INF/jsp/admin-dashboard.jsp

@@ -282,7 +282,7 @@
                                 Chai API Version
                             </td>
                             <td>
-                                <%= com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION %> (<%= com.novell.ldapchai.ChaiConstant.CHAI_API_BUILD_INFO %>)
+                                <%= com.novell.ldapchai.ChaiConstant.CHAI_API_VERSION %>
                             </td>
                         </tr>
                         <tr>

+ 30 - 31
pwm/servlet/web/WEB-INF/jsp/configeditor.jsp

@@ -20,29 +20,24 @@
   ~ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   --%>
 
-<%@ page import="password.pwm.config.StoredConfiguration" %>
 <%@ page import="password.pwm.http.JspUtility" %>
-<%@ page import="password.pwm.http.bean.ConfigManagerBean" %>
-<%@ page import="password.pwm.util.StringUtil" %>
-<%@ page import="java.util.List" %>
 <!DOCTYPE html>
 <%@ page language="java" session="true" isThreadSafe="true"
          contentType="text/html" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <html dir="<pwm:LocaleOrientation/>">
+<% JspUtility.setFlag(pageContext, PwmRequest.Flag.HIDE_LOCALE); %>
+<% JspUtility.setFlag(pageContext, PwmRequest.Flag.HIDE_FOOTER_TEXT); %>
 <% JspUtility.setFlag(pageContext, PwmRequest.Flag.HIDE_THEME); %>
 <% JspUtility.setFlag(pageContext, PwmRequest.Flag.NO_MOBILE_CSS); %>
 <%@ include file="fragment/header.jsp" %>
-<% final PwmRequest configeditor_pwmRequest = PwmRequest.forRequest(request, response); %>
-<% final ConfigManagerBean configManagerBean = configeditor_pwmRequest.getPwmSession().getConfigManagerBean(); %>
-<% final boolean configUnlocked = configeditor_pwmRequest.getPwmApplication().getApplicationMode() == PwmApplication.MODE.CONFIGURATION && !PwmConstants.TRIAL_MODE; %>
-<% final String configNotes = configManagerBean.getStoredConfiguration().readConfigProperty(StoredConfiguration.ConfigProperty.PROPERTY_KEY_NOTES);%>
 <body class="nihilo">
 <style nonce="<pwm:value name="cspNonce"/>" type="text/css">
     html { overflow-y: scroll; } <%-- always add verticle scrollbar to page --%>
 </style>
 <link href="<pwm:context/><pwm:url url='/public/resources/configStyle.css'/>" rel="stylesheet" type="text/css"/>
 <div id="wrapper">
+
     <div class="configeditor-header" id="header" >
         <div id="header-center-wide" style="min-width: 850px">
             <div id="header-title">
@@ -69,6 +64,7 @@
             </div>
         </div>
     </div>
+
     <div id="centerbody-config" class="centerbody-config">
         <div id="settingSearchPanel">
             <table class="noborder settingSearchPanelTable">
@@ -121,37 +117,40 @@
     <br/><br/>
     <div class="push"></div>
 </div>
+
+<%--
+<div id="header-warning" style="display: none">
+    <div class="header-warning-row header-warning-version"><%=PwmConstants.PWM_APP_NAME_VERSION%></div>
+    <div id="header-warning-message" class="header-warning-row header-warning-message">
+        configeditor
+    </div>
+    <div class="header-warning-row header-warning-buttons">
+        <a class="header-warning-button" id="header_configManagerButton">
+            <pwm:if test="showIcons"><span class="btn-icon fa fa-gears"></span></pwm:if>
+            <pwm:display key="MenuItem_ConfigManager" bundle="Admin"/>
+        </a>
+        <a class="header-warning-button" id="header_configEditorButton">
+            <pwm:if test="showIcons"><span class="btn-icon fa fa-edit"></span></pwm:if>
+            <pwm:display key="MenuItem_ConfigEditor" bundle="Admin"/>
+        </a>
+    </div>
+    <div id="button-closeMenu" title="<pwm:display key="Button_Hide"/>">
+        <span class="fa fa-chevron-circle-up"></span>
+    </div>
+</div>
+<div id="button-openMenu" title="<pwm:display key="Button_Show"/>">
+    <span class="fa fa-chevron-circle-down"></span>
+</div>
+--%>
 <pwm:script>
     <script type="text/javascript">
-        var PWM_VAR = PWM_VAR || {};
-        PWM_GLOBAL['setting_alwaysFloatMessages'] = true;
-        PWM_VAR['currentTemplate'] = '<%=configManagerBean.getStoredConfiguration().getTemplate()%>';
-        PWM_VAR['configurationNotes'] = '<%=configNotes==null?"":StringUtil.escapeJS(configNotes)%>';
-        PWM_VAR['ldapProfileIds'] = [];
-        <% for (final String id : (List<String>)configManagerBean.getStoredConfiguration().readSetting(PwmSetting.LDAP_PROFILE_LIST).toNativeObject()) { %>
-        PWM_VAR['ldapProfileIds'].push('<%=StringUtil.escapeJS(id)%>');
-        <% } %>
-
         PWM_GLOBAL['startupFunctions'].push(function(){
             PWM_CFGEDIT.initConfigEditor();
+                PWM_CONFIG.initConfigHeader();
 
-            <% if (configUnlocked) { %>
-            PWM_MAIN.showDialog({
-                title:'Notice - Configuration Status: Open',
-                text:PWM_CONFIG.showString('Display_ConfigOpenInfo'),
-                loadFunction:function(){
-                    PWM_MAIN.addEventHandler('link-configManager','click',function(){
-                        PWM_MAIN.goto('/private/config/ConfigManager');
-                    });
-                }
-            });
-
-            <% } %>
         });
     </script>
 </pwm:script>
-<% JspUtility.setFlag(pageContext, PwmRequest.Flag.HIDE_LOCALE); %>
-<% JspUtility.setFlag(pageContext, PwmRequest.Flag.HIDE_FOOTER_TEXT); %>
 <pwm:script-ref url="/public/resources/js/configmanager.js"/>
 <pwm:script-ref url="/public/resources/js/configeditor.js"/>
 <pwm:script-ref url="/public/resources/js/configeditor-settings.js"/>

+ 26 - 20
pwm/servlet/web/WEB-INF/jsp/helpdesk-detail.jsp

@@ -33,7 +33,7 @@
 <%@ page import="password.pwm.config.profile.HelpdeskProfile" %>
 <%@ page import="password.pwm.config.profile.PwmPasswordRule" %>
 <%@ page import="password.pwm.event.UserAuditRecord" %>
-<%@ page import="password.pwm.http.bean.HelpdeskBean" %>
+<%@ page import="password.pwm.http.servlet.helpdesk.HelpdeskDetailInfoBean" %>
 <%@ page import="password.pwm.http.tag.PasswordRequirementsTag" %>
 <%@ page import="password.pwm.i18n.Display" %>
 <%@ page import="password.pwm.util.StringUtil" %>
@@ -46,20 +46,18 @@
 <%@ page language="java" session="true" isThreadSafe="true" contentType="text/html; charset=UTF-8" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <%
-    final PwmRequest pwmRequest = PwmRequest.forRequest(request,response);
+    final PwmRequest pwmRequest = JspUtility.getPwmRequest(pageContext);
     final PwmSession pwmSession = pwmRequest.getPwmSession();
     final PwmApplication pwmApplication = pwmRequest.getPwmApplication();
-    final HelpdeskBean helpdeskBean = pwmSession.getHelpdeskBean();
     final HelpdeskProfile helpdeskProfile = pwmSession.getSessionManager().getHelpdeskProfile(pwmApplication);
     final DateFormat dateFormatter = PwmConstants.DEFAULT_DATETIME_FORMAT;
     final HelpdeskUIMode SETTING_PW_UI_MODE = HelpdeskUIMode.valueOf(helpdeskProfile.readSettingAsString(PwmSetting.HELPDESK_SET_PASSWORD_MODE));
 
     // user info
-    final HelpdeskBean.HelpdeskDetailInfo helpdeskDetailInfo = helpdeskBean.getHeldpdeskDetailInfo();
-    final UserInfoBean searchedUserInfo = helpdeskDetailInfo.getUserInfoBean();
+    final HelpdeskDetailInfoBean helpdeskDetailInfoBean = (HelpdeskDetailInfoBean)pwmRequest.getAttribute(PwmConstants.REQUEST_ATTR.HelpdeskDetail);
+    final UserInfoBean searchedUserInfo = helpdeskDetailInfoBean.getUserInfoBean();
     final ResponseInfoBean responseInfoBean = searchedUserInfo.getResponseInfoBean();
-    final String obfuscatedDN = searchedUserInfo.getUserIdentity().toObfuscatedKey(pwmApplication.getConfig());
-    final String displayName = helpdeskDetailInfo.getUserDisplayName();
+    final String displayName = helpdeskDetailInfoBean.getUserDisplayName();
     final Set<ViewStatusFields> viewStatusFields = helpdeskProfile.readSettingAsOptionList(PwmSetting.HELPDESK_VIEW_STATUS_VALUES,ViewStatusFields.class);
     final boolean hasOtp = searchedUserInfo.getOtpUserRecord() != null;
 %>
@@ -74,6 +72,14 @@
         <% if (displayName != null && !displayName.isEmpty()) { %>
         <h2 style="text-align: center"><%=displayName%></h2>
         <% } %>
+        <pwm:script>
+            <script type="text/javascript">
+                PWM_GLOBAL['startupFunctions'].push(function(){
+                    PWM_VAR["helpdesk_obfuscatedDN"] = '<%=JspUtility.getAttribute(pageContext, PwmConstants.REQUEST_ATTR.HelpdeskObfuscatedDN)%>';
+                    PWM_VAR["helpdesk_username"] = '<%=JspUtility.getAttribute(pageContext, PwmConstants.REQUEST_ATTR.HelpdeskUsername)%>';
+                });
+            </script>
+        </pwm:script>
         <%@ include file="/WEB-INF/jsp/fragment/message.jsp" %>
         <table style="border:0">
             <tr>
@@ -82,13 +88,13 @@
                         <div data-dojo-type="dijit.layout.ContentPane" title="<pwm:display key="Field_Profile"/>" class="tabContent">
                             <div style="max-height: 400px; overflow: auto;">
                                 <table class="nomargin">
-                                    <% for (FormConfiguration formItem : helpdeskBean.getHeldpdeskDetailInfo().getSearchDetails().keySet()) { %>
+                                    <% for (FormConfiguration formItem : helpdeskDetailInfoBean.getSearchDetails().keySet()) { %>
                                     <tr>
                                         <td class="key" id="key_<%=formItem.getName()%>">
                                             <%= formItem.getLabel(pwmSession.getSessionStateBean().getLocale())%>
                                         </td>
                                         <td id="value_<%=formItem.getName()%>">
-                                            <% final String loopValue = helpdeskBean.getHeldpdeskDetailInfo().getSearchDetails().get(formItem); %>
+                                            <% final String loopValue = helpdeskDetailInfoBean.getSearchDetails().get(formItem); %>
                                             <%= loopValue == null ? "" : StringUtil.escapeHtml(loopValue) %>
                                         </td>
                                     </tr>
@@ -164,7 +170,7 @@
                                         <pwm:display key="Field_AccountEnabled"/>
                                     </td>
                                     <td>
-                                        <%if (helpdeskBean.getHeldpdeskDetailInfo().isAccountEnabled()) { %><pwm:display key="Value_True"/><% } else { %><pwm:display key="Value_False"/><% } %>
+                                        <%if (helpdeskDetailInfoBean.isAccountEnabled()) { %><pwm:display key="Value_True"/><% } else { %><pwm:display key="Value_False"/><% } %>
                                     </td>
                                 </tr>
                                 <% } %>
@@ -174,7 +180,7 @@
                                         <pwm:display key="Field_AccountExpired"/>
                                     </td>
                                     <td>
-                                        <%if (helpdeskBean.getHeldpdeskDetailInfo().isAccountExpired()) { %><pwm:display key="Value_True"/><% } else { %><pwm:display key="Value_False"/><% } %>
+                                        <%if (helpdeskDetailInfoBean.isAccountExpired()) { %><pwm:display key="Value_True"/><% } else { %><pwm:display key="Value_False"/><% } %>
                                     </td>
                                 </tr>
                                 <% } %>
@@ -200,25 +206,25 @@
                                     <td class="key">
                                         <pwm:display key="Field_LastLoginTime"/>
                                     </td>
-                                    <% if (helpdeskBean.getHeldpdeskDetailInfo().getLastLoginTime() == null) { %>
+                                    <% if (helpdeskDetailInfoBean.getLastLoginTime() == null) { %>
                                     <td>
                                         <pwm:display key="Value_NotApplicable"/>
                                     </td>
                                     <% } else { %>
                                     <td class="timestamp">
-                                        <%= dateFormatter.format(helpdeskBean.getHeldpdeskDetailInfo().getLastLoginTime()) %>
+                                        <%= dateFormatter.format(helpdeskDetailInfoBean.getLastLoginTime()) %>
                                     </td>
                                     <% } %>
                                 </tr>
                                 <% } %>
                                 <% if (viewStatusFields.contains(ViewStatusFields.LastLoginTimeDelta)) { %>
-                                <% if (helpdeskBean.getHeldpdeskDetailInfo().getLastLoginTime() != null) { %>
+                                <% if (helpdeskDetailInfoBean.getLastLoginTime() != null) { %>
                                 <tr>
                                     <td class="key">
                                         <pwm:display key="Field_LastLoginTimeDelta"/>
                                     </td>
                                     <td>
-                                        <%= TimeDuration.fromCurrent(helpdeskBean.getHeldpdeskDetailInfo().getLastLoginTime()).asLongString(pwmSession.getSessionStateBean().getLocale()) %>
+                                        <%= TimeDuration.fromCurrent(helpdeskDetailInfoBean.getLastLoginTime()).asLongString(pwmSession.getSessionStateBean().getLocale()) %>
                                     </td>
                                 </tr>
                                 <% } %>
@@ -275,7 +281,7 @@
                                         <pwm:display key="Field_PasswordSetTimeDelta"/>
                                     </td>
                                     <td>
-                                        <%= helpdeskBean.getHeldpdeskDetailInfo().getPasswordSetDelta() %>
+                                        <%= helpdeskDetailInfoBean.getPasswordSetDelta() %>
                                     </td>
                                 </tr>
                                 <% } %>
@@ -300,7 +306,7 @@
                                     <td class="key">
                                         <pwm:display key="Field_PasswordLocked"/>
                                     </td>
-                                    <% if (helpdeskBean.getHeldpdeskDetailInfo().isIntruderLocked()) { %>
+                                    <% if (helpdeskDetailInfoBean.isIntruderLocked()) { %>
                                     <td class="health-WARN">
                                         <pwm:display key="Value_True"/>
                                     </td>
@@ -395,11 +401,11 @@
                                 <% } %>
                             </table>
                         </div>
-                        <% if (helpdeskBean.getHeldpdeskDetailInfo().getUserHistory() != null && !helpdeskBean.getHeldpdeskDetailInfo().getUserHistory().isEmpty()) { %>
+                        <% if (helpdeskDetailInfoBean.getUserHistory() != null && !helpdeskDetailInfoBean.getUserHistory().isEmpty()) { %>
                         <div data-dojo-type="dijit.layout.ContentPane" title="<pwm:display key="Title_UserEventHistory"/>" class="tabContent">
                             <div style="max-height: 400px; overflow: auto;">
                                 <table class="nomargin">
-                                    <% for (final UserAuditRecord record : helpdeskBean.getHeldpdeskDetailInfo().getUserHistory()) { %>
+                                    <% for (final UserAuditRecord record : helpdeskDetailInfoBean.getUserHistory()) { %>
                                     <tr>
                                         <td class="key timestamp" style="width:50%">
                                             <%= dateFormatter.format(record.getTimestamp()) %>
@@ -521,7 +527,7 @@
                         </button>
                         <% } %>
                         <% if (helpdeskProfile.readSettingAsBoolean(PwmSetting.HELPDESK_ENABLE_UNLOCK)) { %>
-                        <% if (helpdeskBean.getHeldpdeskDetailInfo().isIntruderLocked()) { %>
+                        <% if (helpdeskDetailInfoBean.isIntruderLocked()) { %>
                         <button id="helpdesk_unlockBtn" class="helpdesk-detail-btn btn">
                             <pwm:if test="showIcons"><span class="btn-icon fa fa-unlock"></span></pwm:if>
                             <pwm:display key="Button_Unlock"/>

+ 2 - 5
pwm/servlet/web/WEB-INF/jsp/helpdesk.jsp

@@ -20,12 +20,11 @@
   ~ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   --%>
 
-<%@ page import="password.pwm.http.bean.HelpdeskBean" %>
+<%@ page import="password.pwm.http.JspUtility" %>
 <!DOCTYPE html>
 <%@ page language="java" session="true" isThreadSafe="true" contentType="text/html" %>
 <%@ taglib uri="pwm" prefix="pwm" %>
 <% final PwmRequest pwmRequest = JspUtility.getPwmRequest(pageContext); %>
-<% final HelpdeskBean helpdeskBean = pwmRequest.getPwmSession().getHelpdeskBean(); %>
 <html dir="<pwm:LocaleOrientation/>">
 <%@ include file="/WEB-INF/jsp/fragment/header.jsp" %>
 <body class="nihilo">
@@ -34,7 +33,6 @@
         <jsp:param name="pwm.PageName" value="Title_Helpdesk"/>
     </jsp:include>
     <div id="centerbody" class="wide tall">
-        <%@ include file="/WEB-INF/jsp/fragment/message.jsp" %>
         <div id="panel-searchbar" class="searchbar">
             <table class="noborder" style="margin-left: auto; margin-right: auto; width:100px; table-layout: fixed" >
                 <tr>
@@ -42,8 +40,7 @@
                         <span class="fa fa-search"></span>
                     </td>
                     <td style="width:400px">
-                            <input type="search" id="username" name="username" class="helpdesk-input-username" style="width: 400px" <pwm:autofocus/>
-                                   value="<%=helpdeskBean.getSearchString()!=null?helpdeskBean.getSearchString():""%>" />
+                        <input type="search" id="username" name="username" class="helpdesk-input-username" style="width: 400px" <pwm:autofocus/> />
                     </td>
                     <td style="width:20px">
                         <div id="searchIndicator" style="display:none">

+ 3 - 1
pwm/servlet/web/WEB-INF/jsp/login.jsp

@@ -31,7 +31,9 @@
         <jsp:param name="pwm.PageName" value="Title_Login"/>
     </jsp:include>
     <div id="centerbody">
-        <p><pwm:display key="Display_Login"/></p>
+        <p>
+            <span class="panel-login-display-message"><pwm:display key="Display_Login"/></span>
+        </p>
 
         <form action="<pwm:url url='Login'/>" method="post" name="login" enctype="application/x-www-form-urlencoded" id="login">
             <%@ include file="/WEB-INF/jsp/fragment/message.jsp" %>

+ 3 - 3
pwm/servlet/web/WEB-INF/jsp/setupotpsecret.jsp

@@ -55,15 +55,15 @@
         <div data-dojo-type="dijit.layout.TabContainer" data-dojo-props="doLayout: false, persist: true">
             <div data-dojo-type="dijit.layout.ContentPane" title="<pwm:display key="Display_SetupOtp_Android_Title"/>">
                 <pwm:display key="Display_SetupOtp_Android_Steps"/>
-                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&width=150&height=150&pwmFormID=<pwm:FormID/>" alt="QR Code" width="150" height="150"/>
+                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&pwmFormID=<pwm:FormID/>" alt="QR Code"/>
             </div>
             <div data-dojo-type="dijit.layout.ContentPane" title="<pwm:display key="Display_SetupOtp_iPhone_Title"/>">
                 <pwm:display key="Display_SetupOtp_iPhone_Steps"/>
-                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&width=150&height=150&pwmFormID=<pwm:FormID/>" alt="QR code" width="150" height="150"/>
+                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&pwmFormID=<pwm:FormID/>" alt="QR code"/>
             </div>
             <div data-dojo-type="dijit.layout.ContentPane" title="<pwm:display key="Display_SetupOtp_Other_Title"/>">
                 <pwm:display key="Display_SetupOtp_Other_Steps"/>
-                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&width=150&height=150&pwmFormID=<pwm:FormID/>" alt="QR code" width="150" height="150"/>
+                <img class="qrcodeimage" src="SetupOtp?processAction=showQrImage&&pwmFormID=<pwm:FormID/>" alt="QR code"/>
                 <table border="0" style="width: 300px; margin-right: auto; margin-left: auto">
                     <tr valign="top">
                         <td><b><pwm:display key="Field_OTP_Identifier"/></b></td>

BIN
pwm/servlet/web/WEB-INF/lib/zxing-core-2.0.jar


BIN
pwm/servlet/web/WEB-INF/lib/zxing-core-3.2.0.jar


BIN
pwm/servlet/web/WEB-INF/lib/zxing-javase-2.0.jar


BIN
pwm/servlet/web/WEB-INF/lib/zxing-javase-3.2.0.jar


+ 1 - 1
pwm/servlet/web/WEB-INF/web.xml

@@ -294,7 +294,7 @@
     </servlet>
     <servlet>
         <servlet-name>HelpdeskServlet</servlet-name>
-        <servlet-class>password.pwm.http.servlet.HelpdeskServlet</servlet-class>
+        <servlet-class>password.pwm.http.servlet.helpdesk.HelpdeskServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>LoginServlet</servlet-name>

+ 27 - 0
pwm/servlet/web/public/resources/configStyle.css

@@ -20,6 +20,11 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
+
+.border {
+    border: 1px solid #D4D4D4 !important;
+}
+
 .setting_outline {
     background-color: #eaeaea;
     border-radius: 3px 3px 5px 5px;
@@ -313,6 +318,7 @@ table {
     font-size: 9pt;
     background: white;
     display: inline-block;
+    color: black;
 }
 
 .configNumericInput {
@@ -323,6 +329,7 @@ table {
     font-size: 9pt;
     background: white;
     display: inline-block;
+    color: black;
 }
 
 :invalid{
@@ -509,3 +516,23 @@ button {
 }.button:disabled {
      color: #9e9e9e;
  }
+
+ select {
+     color: black;
+ }
+
+#button-openMenu {
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    z-index: 100;
+    cursor: pointer;
+    color: #ffcd59;
+}
+
+#button-closeMenu {
+    position: absolute;
+    top: 3px;
+    right: 4px;
+    cursor: pointer
+}

+ 1 - 1
pwm/servlet/web/public/resources/js/changepassword.js

@@ -391,7 +391,7 @@ PWM_CHANGEPW.startupChangePasswordPage=function() {
         },100);
     }
 
-    PWM_MAIN.showTooltip({
+    PWM_MAIN.showDijitTooltip({
         id: "strengthBox",
         text: PWM_MAIN.showString('Tooltip_PasswordStrength'),
         width: 350

+ 309 - 265
pwm/servlet/web/public/resources/js/configeditor-settings.js

@@ -112,7 +112,7 @@ LocalizedStringValueHandler.drawRow = function(parentDiv, settingKey, localeStri
 
     if (!defaultLocale || !required && !hasNonDefaultValues) {
         tableHtml += '<div style="width: 10px; height: 10px;" class="delete-row-icon action-icon fa fa-times"'
-        + 'id="button-' + settingKey + '-' + localeString + '-deleteRow"></div>';
+            + 'id="button-' + settingKey + '-' + localeString + '-deleteRow"></div>';
     }
 
     newTableRow.innerHTML = tableHtml;
@@ -677,16 +677,16 @@ FormTableHandler.drawRow = function(parentDiv, settingKey, iteration, value) {
         });
         PWM_MAIN.addEventHandler(inputID + "name", 'input', function () {
             PWM_VAR['clientSettingCache'][settingKey][iteration]['name'] = PWM_MAIN.getObject(inputID + "name").value;
-            FormTableHandler.writeFormSetting(settingKey);
+            FormTableHandler.write(settingKey);
         });
         PWM_MAIN.addEventHandler(inputID + "type", 'click', function () {
             PWM_VAR['clientSettingCache'][settingKey][iteration]['type'] = PWM_MAIN.getObject(inputID + "type").value;
-            FormTableHandler.writeFormSetting(settingKey);
+            FormTableHandler.write(settingKey);
         });
     });
 };
 
-FormTableHandler.writeFormSetting = function(settingKey, finishFunction) {
+FormTableHandler.write = function(settingKey, finishFunction) {
     var cachedSetting = PWM_VAR['clientSettingCache'][settingKey];
     PWM_CFGEDIT.writeSetting(settingKey, cachedSetting, finishFunction);
 };
@@ -697,7 +697,7 @@ FormTableHandler.removeRow = function(keyName, iteration) {
         okAction:function(){
             var currentValues = PWM_VAR['clientSettingCache'][keyName];
             currentValues.splice(iteration,1);
-            FormTableHandler.writeFormSetting(keyName,function(){
+            FormTableHandler.write(keyName,function(){
                 FormTableHandler.init(keyName);
             });
         }
@@ -711,7 +711,7 @@ FormTableHandler.move = function(settingKey, moveUp, iteration) {
     } else {
         FormTableHandler.arrayMoveUtil(currentValues, iteration, iteration + 1);
     }
-    FormTableHandler.writeFormSetting(settingKey);
+    FormTableHandler.write(settingKey);
     FormTableHandler.redraw(settingKey);
 };
 
@@ -738,7 +738,7 @@ FormTableHandler.addRow = function(keyName) {
             PWM_VAR['clientSettingCache'][keyName][currentSize + 1] = FormTableHandler.newRowValue;
             PWM_VAR['clientSettingCache'][keyName][currentSize + 1].name = value;
             PWM_VAR['clientSettingCache'][keyName][currentSize + 1].labels = {'':value};
-            FormTableHandler.writeFormSetting(keyName,function(){
+            FormTableHandler.write(keyName,function(){
                 FormTableHandler.init(keyName);
             });
         }
@@ -812,7 +812,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 checked: PWM_VAR['clientSettingCache'][keyName][iteration]['required'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['required'] = this.checked;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 }
             }, inputID + "required");
 
@@ -821,7 +821,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 checked: PWM_VAR['clientSettingCache'][keyName][iteration]['confirmationRequired'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['confirmationRequired'] = this.checked;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 }
             }, inputID + "confirmationRequired");
 
@@ -831,7 +831,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                     checked: PWM_VAR['clientSettingCache'][keyName][iteration]['readonly'],
                     onChange: function () {
                         PWM_VAR['clientSettingCache'][keyName][iteration]['readonly'] = this.checked;
-                        FormTableHandler.writeFormSetting(keyName)
+                        FormTableHandler.write(keyName)
                     }
                 }, inputID + "readonly");
             }
@@ -842,7 +842,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                     checked: PWM_VAR['clientSettingCache'][keyName][iteration]['unique'],
                     onChange: function () {
                         PWM_VAR['clientSettingCache'][keyName][iteration]['unique'] = this.checked;
-                        FormTableHandler.writeFormSetting(keyName)
+                        FormTableHandler.write(keyName)
                     }
                 }, inputID + "unique");
             }
@@ -853,7 +853,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                     checked: PWM_VAR['clientSettingCache'][keyName][iteration]['unique'],
                     onChange: function () {
                         PWM_VAR['clientSettingCache'][keyName][iteration]['unique'] = this.checked;
-                        FormTableHandler.writeFormSetting(keyName)
+                        FormTableHandler.write(keyName)
                     }
                 }, inputID + "unique");
             }
@@ -863,7 +863,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 value: PWM_VAR['clientSettingCache'][keyName][iteration]['minimumLength'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['minimumLength'] = this.value;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 },
                 constraints: {min: 0, max: 5000},
                 style: "width: 70px"
@@ -874,7 +874,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 value: PWM_VAR['clientSettingCache'][keyName][iteration]['maximumLength'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['maximumLength'] = this.value;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 },
                 constraints: {min: 0, max: 5000},
                 style: "width: 70px"
@@ -885,7 +885,7 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 value: PWM_VAR['clientSettingCache'][keyName][iteration]['regex'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['regex'] = this.value;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 }
             }, inputID + "regex");
 
@@ -899,14 +899,14 @@ FormTableHandler.showOptionsDialog = function(keyName, iteration) {
                 value: PWM_VAR['clientSettingCache'][keyName][iteration]['placeholder'],
                 onChange: function () {
                     PWM_VAR['clientSettingCache'][keyName][iteration]['placeholder'] = this.value;
-                    FormTableHandler.writeFormSetting(keyName)
+                    FormTableHandler.write(keyName)
                 }
             }, inputID + "placeholder");
 
             PWM_MAIN.clearDijitWidget(inputID + "javascript");
             new dijit.form.Textarea({
                 value: PWM_VAR['clientSettingCache'][keyName][iteration]['javascript'],
-                onChange: function(){PWM_VAR['clientSettingCache'][keyName][iteration]['javascript'] = this.value;FormTableHandler.writeFormSetting(keyName)}
+                onChange: function(){PWM_VAR['clientSettingCache'][keyName][iteration]['javascript'] = this.value;FormTableHandler.write(keyName)}
             },inputID + "javascript");
         };
 
@@ -959,11 +959,11 @@ FormTableHandler.multiLocaleStringDialog = function(keyName, iteration, settingT
                             var inputElement = PWM_MAIN.getObject(localeID + '-input');
                             var value = inputElement.value;
                             PWM_VAR['clientSettingCache'][keyName][iteration][settingType][localeName] = value;
-                            FormTableHandler.writeFormSetting(keyName);
+                            FormTableHandler.write(keyName);
                         });
                         PWM_MAIN.addEventHandler(localeID + '-removeLocaleButton', 'click', function () {
                             delete PWM_VAR['clientSettingCache'][keyName][iteration][settingType][localeName];
-                            FormTableHandler.writeFormSetting(keyName);
+                            FormTableHandler.write(keyName);
                             FormTableHandler.multiLocaleStringDialog(keyName, iteration, settingType, finishAction, titleText);
                         });
                     }(iter));
@@ -973,7 +973,7 @@ FormTableHandler.multiLocaleStringDialog = function(keyName, iteration, settingT
                         alert('Locale is already present');
                     } else {
                         PWM_VAR['clientSettingCache'][keyName][iteration][settingType][localeName] = '';
-                        FormTableHandler.writeFormSetting(keyName);
+                        FormTableHandler.write(keyName);
                         FormTableHandler.multiLocaleStringDialog(keyName, iteration, settingType, finishAction, titleText);
                     }
                 }, Object.keys(PWM_VAR['clientSettingCache'][keyName][iteration][settingType]));
@@ -1048,13 +1048,13 @@ FormTableHandler.addSelectOptionsOption = function(keyName, iteration, optionNam
     }
 
     PWM_VAR['clientSettingCache'][keyName][iteration]['selectOptions'][optionName] = optionValue;
-    FormTableHandler.writeFormSetting(keyName);
+    FormTableHandler.write(keyName);
     FormTableHandler.showSelectOptionsDialog(keyName, iteration);
 };
 
 FormTableHandler.removeSelectOptionsOption = function(keyName, iteration, optionName) {
     delete PWM_VAR['clientSettingCache'][keyName][iteration]['selectOptions'][optionName];
-    FormTableHandler.writeFormSetting(keyName);
+    FormTableHandler.write(keyName);
     FormTableHandler.showSelectOptionsDialog(keyName, iteration);
 };
 
@@ -1230,8 +1230,8 @@ ChangePasswordHandler.changePasswordPopup = function(settingKey) {
     }
 
     bodyText += '</td></tr>'
-    + '<tr><td><span class="formFieldLabel">' + PWM_MAIN.showString('Field_ConfirmPassword') + '</span></td></tr>'
-    + '<tr><td>';
+        + '<tr><td><span class="formFieldLabel">' + PWM_MAIN.showString('Field_ConfirmPassword') + '</span></td></tr>'
+        + '<tr><td>';
 
     if (showFields) {
         bodyText += '<textarea name="password2" id="password2" class="configStringInput" style="width: 400px; max-width: 400px; max-height:100px; overflow-y: auto" autocomplete="off">' + p2 + '</textarea>';
@@ -1240,20 +1240,20 @@ ChangePasswordHandler.changePasswordPopup = function(settingKey) {
     }
 
     bodyText += '</td>'
-    + '<td><div style="margin:0;">'
-    + '<img style="visibility:hidden;" id="confirmCheckMark" alt="checkMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/greenCheck.png">'
-    + '<img style="visibility:hidden;" id="confirmCrossMark" alt="crossMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/redX.png">'
-    + '</div></td>'
-    + '</tr></table>'
-    + '<br/><br/><div class="dialogSection" style="width: 400px"><span class="formFieldLabel">Generate Random Password </span><br/>'
-    + '<label class="checkboxWrapper"><input id="input-special" type="checkbox"' + (special ? ' checked' : '') + '>Specials</input></label>'
-    + '&nbsp;&nbsp;&nbsp;&nbsp;<input id="input-randomLength" type="number" min="10" max="1000" value="' + length + '" style="width:45px">Length'
-    + '&nbsp;&nbsp;&nbsp;&nbsp;<button id="button-generateRandom" name="button-generateRandom"><span class="fa fa-random btn-icon"></span>Generate Random</button>'
-    + '</div><br/><br/>'
-    + '<button name="button-storePassword" class="btn" id="button-storePassword" disabled="true"/>'
-    + '<span class="fa fa-forward btn-icon"></span>Store Password</button>&nbsp;&nbsp;'
-    + '<label class="checkboxWrapper"><input id="show" type="checkbox"' + (showFields ? ' checked' : '') + '>Show Passwords</input></label>'
-    + '</div><br/><br/>';
+        + '<td><div style="margin:0;">'
+        + '<img style="visibility:hidden;" id="confirmCheckMark" alt="checkMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/greenCheck.png">'
+        + '<img style="visibility:hidden;" id="confirmCrossMark" alt="crossMark" height="15" width="15" src="' + PWM_GLOBAL['url-resources'] + '/redX.png">'
+        + '</div></td>'
+        + '</tr></table>'
+        + '<br/><br/><div class="dialogSection" style="width: 400px"><span class="formFieldLabel">Generate Random Password </span><br/>'
+        + '<label class="checkboxWrapper"><input id="input-special" type="checkbox"' + (special ? ' checked' : '') + '>Specials</input></label>'
+        + '&nbsp;&nbsp;&nbsp;&nbsp;<input id="input-randomLength" type="number" min="10" max="1000" value="' + length + '" style="width:45px">Length'
+        + '&nbsp;&nbsp;&nbsp;&nbsp;<button id="button-generateRandom" name="button-generateRandom"><span class="fa fa-random btn-icon"></span>Generate Random</button>'
+        + '</div><br/><br/>'
+        + '<button name="button-storePassword" class="btn" id="button-storePassword" disabled="true"/>'
+        + '<span class="fa fa-forward btn-icon"></span>Store Password</button>&nbsp;&nbsp;'
+        + '<label class="checkboxWrapper"><input id="show" type="checkbox"' + (showFields ? ' checked' : '') + '>Show Passwords</input></label>'
+        + '</div><br/><br/>';
 
     PWM_MAIN.showDialog({
         title: 'Store Password - ' + PWM_VAR['clientSettingCache'][settingKey]['settings']['name'],
@@ -1330,71 +1330,49 @@ ActionHandler.init = function(keyName) {
 };
 
 ActionHandler.redraw = function(keyName) {
-    console.log('ActionHandler redraw for ' + keyName)
+    console.log('ActionHandler redraw for ' + keyName);
     var resultValue = PWM_VAR['clientSettingCache'][keyName];
     var parentDiv = 'table_setting_' + keyName;
     PWM_CFGEDIT.clearDivElements(parentDiv, false);
     var parentDivElement = PWM_MAIN.getObject(parentDiv);
 
+    var html = '';
     if (!PWM_MAIN.isEmpty(resultValue)) {
-        var headerRow = document.createElement("tr");
-        headerRow.setAttribute("style", "border-width: 0");
+        html += '<table class="noborder">';
+        html += '<tr><td>Name</td><td></td><td>Description</td></tr>';
 
-        var header1 = document.createElement("td");
-        header1.setAttribute("style", "border-width: 0;");
-        header1.innerHTML = "Name";
-        headerRow.appendChild(header1);
-
-        var header2 = document.createElement("td");
-        header2.setAttribute("style", "border-width: 0;");
-        header2.innerHTML = "Description";
-        headerRow.appendChild(header2);
+        for (var i in resultValue) {
+            html += ActionHandler.drawRow(keyName, i, resultValue[i]);
+        }
 
-        parentDivElement.appendChild(headerRow);
+        html += '</table>';
     }
 
+    html += '<br/><button class="btn" id="button-' + keyName + '-addValue"><span class="btn-icon fa fa-plus-square"></span>Add Action</button>';
+    parentDivElement.innerHTML = html;
+
     for (var i in resultValue) {
-        ActionHandler.drawRow(parentDiv, keyName, i, resultValue[i]);
+        html += ActionHandler.addRowHandlers(keyName, i, resultValue[i]);
     }
 
-    var newTableRow = document.createElement("tr");
-    newTableRow.setAttribute("style", "border-width: 0");
-    newTableRow.setAttribute("colspan", "5");
-
-    var newTableData = document.createElement("td");
-    newTableData.setAttribute("style", "border-width: 0");
-
-    var addItemButton = document.createElement("button");
-    addItemButton.setAttribute("type", "button");
-    addItemButton.setAttribute("class", "btn");
-    addItemButton.setAttribute("id", "button-" + keyName + "-addValue");
-    addItemButton.innerHTML = '<span class="btn-icon fa fa-plus-square"></span>Add Action';
-    newTableData.appendChild(addItemButton);
-
-    newTableRow.appendChild(newTableData);
-    parentDivElement.appendChild(newTableRow);
-
-    require(["dojo/parser","dijit/form/Button","dijit/form/Select","dijit/form/Textarea"],function(dojoParser){
-        dojoParser.parse(parentDiv);
-    });
-
     PWM_MAIN.addEventHandler('button-' + keyName + '-addValue','click',function(){
         ActionHandler.addRow(keyName);
     });
 };
 
-ActionHandler.drawRow = function(parentDiv, settingKey, iteration, value) {
+ActionHandler.drawRow = function(settingKey, iteration, value) {
     var inputID = 'value_' + settingKey + '_' + iteration + "_";
     var optionList = PWM_GLOBAL['actionTypeOptions'];
 
     var newTableRow = document.createElement("tr");
     newTableRow.setAttribute("style", "border-width: 0");
 
-    var htmlRow = '';
-    htmlRow += '<td>';
-    htmlRow += '<input id="input-' + inputID + '-name" class="configStringInput" style="width:180px" value="' + value['name'] + '"/>';
-    htmlRow += '</td><td>';
-    htmlRow += '<input id="input-' + inputID + '-description" class="configStringInput" style="width:180px" value="' + value['description'] + '"/>';
+    var htmlRow = '<tr>';
+    htmlRow += '<td class="border">';
+    htmlRow += '<div class="noWrapTextBox" style="width:160px" id="display-' + inputID + '-name" ></div>';
+    htmlRow += '<td style="width:1px" id="icon-editDescription-' + inputID + '"><span class="btn-icon fa fa-edit"></span></td>';
+    htmlRow += '</td><td class="border" style="width:160px" >';
+    htmlRow += '<div class="noWrapTextBox" id="display-' + inputID + '-description"></div>';
     htmlRow += '</td><td>';
     htmlRow += '<select id="select-' + inputID + '-type">';
     for (var optionItem in optionList) {
@@ -1405,33 +1383,47 @@ ActionHandler.drawRow = function(parentDiv, settingKey, iteration, value) {
     htmlRow += '<button id="button-' + inputID + '-options"><span class="btn-icon fa fa-sliders"/> Options</button>';
     htmlRow += '</td>';
     htmlRow += '<td><span class="delete-row-icon action-icon fa fa-times" id="button-' + inputID + '-deleteRow"></span></td>';
+    htmlRow += '</tr>';
+    return htmlRow;
+};
 
-
-    newTableRow.innerHTML = htmlRow;
-    var parentDivElement = PWM_MAIN.getObject(parentDiv);
-    parentDivElement.appendChild(newTableRow);
-
+ActionHandler.addRowHandlers = function(settingKey, iteration, value) {
+    var inputID = 'value_' + settingKey + '_' + iteration + "_";
+    UILibrary.addTextValueToElement('display-' + inputID + '-name',value['name']);
+    UILibrary.addTextValueToElement('display-' + inputID + '-description',value['description']);
     PWM_MAIN.addEventHandler('button-' + inputID + '-options','click',function(){
         ActionHandler.showOptionsDialog(settingKey, iteration);
     });
-    PWM_MAIN.addEventHandler('input-' + inputID + '-name','input',function(){
-        PWM_VAR['clientSettingCache'][settingKey][iteration]['name'] = PWM_MAIN.getObject('input-' + inputID + '-name').value;
-        ActionHandler.writeFormSetting(settingKey);
+    var descriptionEditFunction = function() {
+        UILibrary.stringEditorDialog({
+            value: value['description'],
+            textarea: true,
+            completeFunction: function (newValue) {
+                PWM_VAR['clientSettingCache'][settingKey][iteration]['description'] = newValue;
+                ActionHandler.write(settingKey,function(){
+                    ActionHandler.init(settingKey);
+                });
+            }
+        });
+    };
+
+    PWM_MAIN.addEventHandler('icon-editDescription-' + inputID,'click',function(){
+        descriptionEditFunction();
     });
-    PWM_MAIN.addEventHandler('input-' + inputID + '-description','input',function(){
-        PWM_VAR['clientSettingCache'][settingKey][iteration]['description'] = PWM_MAIN.getObject('input-' + inputID + '-description').value;
-        ActionHandler.writeFormSetting(settingKey);
+    PWM_MAIN.addEventHandler('display-' + inputID + '-description','click',function(){
+        descriptionEditFunction();
     });
+
     PWM_MAIN.addEventHandler('select-' + inputID + '-type','change',function(){
         PWM_VAR['clientSettingCache'][settingKey][iteration]['type'] = PWM_MAIN.getObject('select-' + inputID + '-type').value;
-        ActionHandler.writeFormSetting(settingKey);
+        ActionHandler.write(settingKey);
     });
     PWM_MAIN.addEventHandler('button-' + inputID + '-deleteRow','click',function(){
         ActionHandler.removeRow(settingKey, iteration);
     });
 };
 
-ActionHandler.writeFormSetting = function(settingKey, finishFunction) {
+ActionHandler.write = function(settingKey, finishFunction) {
     var cachedSetting = PWM_VAR['clientSettingCache'][settingKey];
     PWM_CFGEDIT.writeSetting(settingKey, cachedSetting, finishFunction);
 };
@@ -1442,7 +1434,7 @@ ActionHandler.removeRow = function(keyName, iteration) {
         okAction:function(){
             delete PWM_VAR['clientSettingCache'][keyName][iteration];
             console.log("removed iteration " + iteration + " from " + keyName + ", cached keyValue=" + PWM_VAR['clientSettingCache'][keyName]);
-            ActionHandler.writeFormSetting(keyName,function(){
+            ActionHandler.write(keyName,function(){
                 ActionHandler.init(keyName);
             });
         }
@@ -1450,24 +1442,19 @@ ActionHandler.removeRow = function(keyName, iteration) {
 };
 
 ActionHandler.addRow = function(keyName) {
-    var body='Name <input class="configStringInput" id="newActionName" style="width:300px"/>';
-    PWM_MAIN.showConfirmDialog({title:'New Action',text:body,showClose:true,loadFunction:function(){
-        PWM_MAIN.getObject('dialog_ok_button').disabled = true;
-        PWM_MAIN.addEventHandler('newActionName','input',function(){
-            PWM_VAR['newActionName'] = PWM_MAIN.getObject('newActionName').value;
-            if (PWM_VAR['newActionName'] && PWM_VAR['newActionName'].length > 1) {
-                PWM_MAIN.getObject('dialog_ok_button').disabled = false;
-            }
-        });
-    },okAction:function(){
-        var currentSize = PWM_MAIN.itemCount(PWM_VAR['clientSettingCache'][keyName]);
-        PWM_VAR['clientSettingCache'][keyName][currentSize + 1] = ActionHandler.defaultValue;
-        PWM_VAR['clientSettingCache'][keyName][currentSize + 1].name = PWM_VAR['newActionName'];
-        ActionHandler.writeFormSetting(keyName,function(){
-            ActionHandler.init(keyName);
-        });
+    UILibrary.stringEditorDialog({
+        title:'New Action',
+        regex:'^[0-9a-zA-Z]+$',
+        completeFunction:function(value){
+            var currentSize = PWM_MAIN.itemCount(PWM_VAR['clientSettingCache'][keyName]);
+            PWM_VAR['clientSettingCache'][keyName][currentSize + 1] = ActionHandler.defaultValue;
+            PWM_VAR['clientSettingCache'][keyName][currentSize + 1].name = value;
+            ActionHandler.write(keyName,function(){
+                ActionHandler.init(keyName);
+            });
 
-    }});
+        }
+    });
 };
 
 
@@ -1533,28 +1520,28 @@ ActionHandler.showOptionsDialog = function(keyName, iteration) {
                             PWM_VAR['clientSettingCache'][keyName][iteration]['body'] = '';
                         }
                         PWM_VAR['clientSettingCache'][keyName][iteration]['method'] = value;
-                        ActionHandler.writeFormSetting(keyName, function(){ ActionHandler.showOptionsDialog(keyName,iteration)});
+                        ActionHandler.write(keyName, function(){ ActionHandler.showOptionsDialog(keyName,iteration)});
                     });
                     PWM_MAIN.addEventHandler('input-' + inputID + '-url','input',function(){
                         PWM_VAR['clientSettingCache'][keyName][iteration]['url'] = PWM_MAIN.getObject('input-' + inputID + '-url').value;
-                        ActionHandler.writeFormSetting(keyName);
+                        ActionHandler.write(keyName);
                     });
                     PWM_MAIN.addEventHandler('input-' + inputID + '-body','input',function(){
                         PWM_VAR['clientSettingCache'][keyName][iteration]['body'] = PWM_MAIN.getObject('input-' + inputID + '-body').value;
-                        ActionHandler.writeFormSetting(keyName);
+                        ActionHandler.write(keyName);
                     });
                 } else if (PWM_VAR['clientSettingCache'][keyName][iteration]['type'] == 'ldap') {
                     PWM_MAIN.addEventHandler('input-' + inputID + '-attributeName','input',function(){
                         PWM_VAR['clientSettingCache'][keyName][iteration]['attributeName'] = PWM_MAIN.getObject('input-' + inputID + '-attributeName').value;
-                        ActionHandler.writeFormSetting(keyName);
+                        ActionHandler.write(keyName);
                     });
                     PWM_MAIN.addEventHandler('input-' + inputID + '-attributeValue','input',function(){
                         PWM_VAR['clientSettingCache'][keyName][iteration]['attributeValue'] = PWM_MAIN.getObject('input-' + inputID + '-attributeValue').value;
-                        ActionHandler.writeFormSetting(keyName);
+                        ActionHandler.write(keyName);
                     });
                     PWM_MAIN.addEventHandler('select-' + inputID + '-ldapMethod','change',function(){
                         PWM_VAR['clientSettingCache'][keyName][iteration]['ldapMethod'] = PWM_MAIN.getObject('select-' + inputID + '-ldapMethod').value;
-                        ActionHandler.writeFormSetting(keyName);
+                        ActionHandler.write(keyName);
                     });
                 }
             }
@@ -1563,39 +1550,41 @@ ActionHandler.showOptionsDialog = function(keyName, iteration) {
 };
 
 ActionHandler.showHeadersDialog = function(keyName, iteration) {
+    var settingValue = PWM_VAR['clientSettingCache'][keyName][iteration];
     require(["dijit/Dialog","dijit/form/ValidationTextBox","dijit/form/Button","dijit/form/TextBox"],function(Dialog,ValidationTextBox,Button,TextBox){
         var inputID = 'value_' + keyName + '_' + iteration + "_" + "headers_";
 
         var bodyText = '';
         bodyText += '<table class="noborder">';
-        bodyText += '<tr>';
-        bodyText += '<td><b>Name</b></td><td><b>Value</b></td>';
-        bodyText += '</tr><tr>';
-        for (var headerName in PWM_VAR['clientSettingCache'][keyName][iteration]['headers']) {
-            var value = PWM_VAR['clientSettingCache'][keyName][iteration]['headers'][headerName];
-            var optionID = inputID + headerName;
-            bodyText += '<td>' + headerName + '</td><td>' + value + '</td>';
-            bodyText += '<td><span class="delete-row-icon action-icon fa fa-times" id="button-' + optionID + '-deleteRow"></span></td>';
-            bodyText += '</tr><tr>';
+        bodyText += '<tr><td><b>Name</b></td><td><b>Value</b></td></tr>';
+        for (var iter in settingValue['headers']) {
+            (function(headerName) {
+                var value = settingValue['headers'][headerName];
+                var optionID = inputID + headerName;
+                bodyText += '<tr><td class="border">' + headerName + '</td><td class="border">' + value + '</td>';
+                bodyText += '<td style="width:15px;"><span class="delete-row-icon action-icon fa fa-times" id="button-' + optionID + '-deleteRow"></span></td>';
+                bodyText += '</tr>';
+            }(iter));
         }
-        bodyText += '</tr></table>';
-        bodyText += '<br/>';
-        bodyText += '<button id="button-' + inputID + '-addHeader" class="btn"><span class="btn-icon fa fa-plus-square"></span>Add Header</button>';
+        bodyText += '</table>';
 
         PWM_MAIN.showDialog({
-            title: 'Http Headers for webservice ' + PWM_VAR['clientSettingCache'][keyName][iteration]['name'],
+            title: 'HTTP Headers for webservice ' + settingValue['name'],
             text: bodyText,
+            buttonHtml:'<button id="button-' + inputID + '-addHeader" class="btn"><span class="btn-icon fa fa-plus-square"></span>Add Header</button>',
             okAction: function() {
                 ActionHandler.showOptionsDialog(keyName,iteration);
             },
             loadFunction: function() {
-                for (var headerName in PWM_VAR['clientSettingCache'][keyName][iteration]['headers']) {
-                    var headerID = inputID + headerName;
-                    PWM_MAIN.addEventHandler('button-' + headerID + '-deleteRow','click',function(){
-                        delete PWM_VAR['clientSettingCache'][keyName][iteration]['headers'][headerName];
-                        ActionHandler.writeFormSetting(keyName);
-                        ActionHandler.showHeadersDialog(keyName, iteration);
-                    });
+                for (var iter in settingValue['headers']) {
+                    (function(headerName) {
+                        var headerID = inputID + headerName;
+                        PWM_MAIN.addEventHandler('button-' + headerID + '-deleteRow', 'click', function () {
+                            delete settingValue['headers'][headerName];
+                            ActionHandler.write(keyName);
+                            ActionHandler.showHeadersDialog(keyName, iteration);
+                        });
+                    }(iter));
                 }
                 PWM_MAIN.addEventHandler('button-' + inputID + '-addHeader','click',function(){
                     ActionHandler.addHeader(keyName, iteration);
@@ -1615,7 +1604,7 @@ ActionHandler.addHeader = function(keyName, iteration) {
         PWM_MAIN.getObject('dialog_ok_button').disabled = true;
         PWM_VAR['newHeaderName'] = PWM_MAIN.getObject('newHeaderName').value;
         PWM_VAR['newHeaderValue'] = PWM_MAIN.getObject('newHeaderValue').value;
-        if (PWM_VAR['newHeaderName'].length > 1 && PWM_VAR['newHeaderValue'].length > 1) {
+        if (PWM_VAR['newHeaderName'].length > 0 && PWM_VAR['newHeaderValue'].length > 0) {
             PWM_MAIN.getObject('dialog_ok_button').disabled = false;
         }
     };
@@ -1631,10 +1620,13 @@ ActionHandler.addHeader = function(keyName, iteration) {
             PWM_MAIN.addEventHandler('newHeaderValue','input',function(){
                 updateFunction();
             });
+            updateFunction();
         },okAction:function(){
             var headers = PWM_VAR['clientSettingCache'][keyName][iteration]['headers'];
             headers[PWM_VAR['newHeaderName']] = PWM_VAR['newHeaderValue'];
-            ActionHandler.writeFormSetting(keyName);
+            ActionHandler.write(keyName);
+            ActionHandler.showHeadersDialog(keyName, iteration);
+        },cancelAction:function(){
             ActionHandler.showHeadersDialog(keyName, iteration);
         }
     });
@@ -1835,8 +1827,8 @@ BooleanHandler.init = function(keyName) {
     var parentDivElement = PWM_MAIN.getObject(parentDiv);
 
     parentDivElement.innerHTML = '<label class="checkboxWrapper">'
-    + '<input type="checkbox" id="value_' + keyName + '" value="false" disabled/>'
-    + 'Enabled (True)</label>';
+        + '<input type="checkbox" id="value_' + keyName + '" value="false" disabled/>'
+        + 'Enabled (True)</label>';
 
     PWM_CFGEDIT.readSetting(keyName,function(data){
         var checkElement = PWM_MAIN.getObject("value_" + keyName);
@@ -1972,116 +1964,128 @@ ChallengeSettingHandler.editLocale = function(keyName, localeKey) {
     var localeName = localeKey;
 
     var resultValue = PWM_VAR['clientSettingCache'][keyName];
-    require(["dojo","dijit/registry","dojo/parser","dijit/form/Button","dijit/form/ValidationTextBox","dijit/form/Textarea","dijit/form/NumberSpinner","dijit/form/ToggleButton"],
-        function(dojo,registry,dojoParser){
 
+    var multiValues = resultValue[localeName];
 
-            var multiValues = resultValue[localeName];
+    for (var iteration in multiValues) {
+        (function(rowKey) {
+            dialogBody += '<table class="noborder">';
+            dialogBody += '<tr><td style="width: 15px" class="noborder">' + (parseInt(iteration) + 1) + '</td><td class="setting_outline">';
+            dialogBody += '<table class="noborder" style="margin:0"><tr>';
+            dialogBody += '<td colspan="200" style="border-width: 0;">';
 
-            for (var iteration in multiValues) {
-                (function(rowKey) {
-                    dialogBody += '<table style="border:0">';
-                    dialogBody += '<tr><td>';
-                    dialogBody += '<table class="noborder" style="margin:0"><tr>';
-                    dialogBody += '<td colspan="200" style="border-width: 0;">';
+            var inputID = "value-" + keyName + "-" + localeName + "-" + rowKey;
+            PWM_MAIN.clearDijitWidget(inputID);
 
-                    var inputID = "value-" + keyName + "-" + localeName + "-" + rowKey;
-                    PWM_MAIN.clearDijitWidget(inputID);
+            dialogBody += '<input class="configStringInput" id="' + inputID + '" style="width: 700px" required="required" disabled value="Loading"/>';
 
-                    dialogBody += '<input class="configStringInput" id="' + inputID + '" style="width: 700px" required="required" disabled value="Loading"/>';
+            dialogBody += '</td>';
+            dialogBody += '</tr>';
 
-                    dialogBody += '</td>';
-                    dialogBody += '</tr>';
+            dialogBody += '<tr><td>';
 
-                    dialogBody += '<tr style="padding-bottom: 15px; border:0"><td style="padding-bottom: 15px; border:0">';
+            dialogBody += '<label class="checkboxWrapper"><input type="checkbox" id="value-adminDefined-' + inputID + '" disabled/>Admin Defined</label>';
 
-                    dialogBody += '<label class="checkboxWrapper"><input type="checkbox" id="value-adminDefined-' + inputID + '" disabled/>Admin Defined</label>';
+            dialogBody += '</td><td>';
 
-                    dialogBody += '</td><td style="padding-bottom: 15px; border:0">';
-                    dialogBody += '<input style="width: 50px" data-dojo-type="dijit/form/NumberSpinner" value="' +multiValues[rowKey]['minLength'] + '" data-dojo-props="constraints:{min:0,max:255,places:0}""';
-                    dialogBody += ' onchange="PWM_VAR[\'clientSettingCache\'][\'' + keyName + '\'][\'' + localeKey + '\'][\'' + rowKey + '\'][\'minLength\'] = this.value"/><br/>Min Length';
+            dialogBody += '<input type="number" id="button-minLength-' + inputID + '" style="width:50px" class="configNumericInput" min="1" max="255" value="' + multiValues[rowKey]['minLength'] + '"/>';
+            dialogBody += '<br/>Min Length';
 
-                    dialogBody += '</td><td style="padding-bottom: 15px; border:0">';
-                    dialogBody += '<input style="width: 50px" data-dojo-type="dijit/form/NumberSpinner" value="' +multiValues[rowKey]['maxLength'] + '" data-dojo-props="constraints:{min:0,max:255,places:0}""';
-                    dialogBody += ' onchange="PWM_VAR[\'clientSettingCache\'][\'' + keyName + '\'][\'' + localeKey + '\'][\'' + rowKey + '\'][\'maxLength\'] = this.value"/><br/>Max Length';
+            dialogBody += '</td><td>';
+            dialogBody += '<input type="number" id="button-maxLength-' + inputID + '" style="width:50px" class="configNumericInput" min="1" max="255" value="' + multiValues[rowKey]['maxLength'] + '"/>';
+            dialogBody += '<br/>Max Length';
 
-                    dialogBody += '</td><td style="padding-bottom: 15px; border:0">';
-                    dialogBody += '<input style="width: 50px" data-dojo-type="dijit/form/NumberSpinner" value="' +multiValues[rowKey]['maxQuestionCharsInAnswer'] + '" data-dojo-props="constraints:{min:0,max:255,places:0}""';
-                    dialogBody += ' onchange="PWM_VAR[\'clientSettingCache\'][\'' + keyName + '\'][\'' + localeKey + '\'][\'' + rowKey + '\'][\'maxQuestionCharsInAnswer\'] = this.value"/><br/> Max Question Chars';
+            dialogBody += '</td><td>';
+            dialogBody += '<input type="number" id="button-maxQuestionCharsInAnswer-' + inputID + '" style="width:50px" class="configNumericInput" min="0" max="100" value="' + multiValues[rowKey]['maxQuestionCharsInAnswer'] + '"/>';
+            dialogBody += '<br/>Max Question Chars';
 
-                    dialogBody += '</td><td style="padding-bottom: 15px; border:0">';
-                    dialogBody += '<label class="checkboxWrapper"><input type="checkbox" id="value-wordlist-' + inputID + '" disabled/>Apply Wordlist</label>';
+            dialogBody += '</td><td>';
+            dialogBody += '<label class="checkboxWrapper"><input type="checkbox" id="value-wordlist-' + inputID + '" disabled/>Apply Wordlist</label>';
 
-                    dialogBody += '</td></tr>';
-                    dialogBody += '</table></td><td style="border:0; vertical-align: top">';
-                    if (PWM_MAIN.itemCount(PWM_VAR['clientSettingCache'][keyName][localeKey]) > 1) { // add remove locale x
+            dialogBody += '</td></tr>';
+            dialogBody += '</table></td><td style="border:0; vertical-align: top">';
+            if (PWM_MAIN.itemCount(PWM_VAR['clientSettingCache'][keyName][localeKey]) > 1) { // add remove locale x
 
-                        dialogBody += '<div class="delete-row-icon action-icon fa fa-times" id="button-deleteRow-' + inputID + '"/>';
-                    }
+                dialogBody += '<div class="delete-row-icon action-icon fa fa-times" id="button-deleteRow-' + inputID + '"/>';
+            }
 
-                    dialogBody += '</td></tr></table>';
-                    dialogBody += '<br/>';
+            dialogBody += '</td></tr></table>';
+            dialogBody += '<br/>';
 
-                }(iteration));
-            }
+        }(iteration));
+    }
 
+    dialogBody += '</div>';
+    dialogBody += '<br/>';
 
-            dialogBody += '</div>';
-            dialogBody += '<br/><br/><button type="button" data-dojo-type="dijit/form/Button"';
-            dialogBody += ' onclick="ChallengeSettingHandler.addRow(\'' + keyName + '\',\'' + localeKey + '\')"';
-            dialogBody += '><span class="btn-icon fa fa-plus-square"></span>Add Value</button>';
+    var dialogTitle = PWM_SETTINGS['settings'][keyName]['label'] + ' - ' + localeDisplay + ' Locale';
+    PWM_MAIN.showDialog({
+        title:dialogTitle,
+        buttonHtml:'<button class="btn" id="button-addValue"><span class="btn-icon fa fa-plus-square"></span>Add Value</button>',
+        text:dialogBody,
+        showClose:false,
+        dialogClass:'wide',
+        loadFunction:function(){
+            PWM_MAIN.addEventHandler('button-addValue','click',function(){
+                ChallengeSettingHandler.addRow(keyName,localeKey);
+            });
+            //dojoParser.parse(PWM_MAIN.getObject('challengeLocaleDialogDiv'));
+            for (var iteration in multiValues) {
+                (function(rowKey) {
+                    var inputID = "value-" + keyName + "-" + localeName + "-" + rowKey;
+                    UILibrary.manageNumericInput('button-minLength-' + inputID, function(value){
+                        PWM_VAR['clientSettingCache'][keyName][localeKey][rowKey]['minLength'] = value;
+                    })
+                    UILibrary.manageNumericInput('button-maxLength-' + inputID, function(value){
+                        PWM_VAR['clientSettingCache'][keyName][localeKey][rowKey]['maxLength'] = value;
+                    })
+                    UILibrary.manageNumericInput('button-maxQuestionCharsInAnswer-' + inputID, function(value){
+                        PWM_VAR['clientSettingCache'][keyName][localeKey][rowKey]['maxQuestionCharsInAnswer'] = value;
+                    })
+
+                    // question text
+                    var processQuestion = function() {
+                        var isAdminDefined = multiValues[rowKey]['adminDefined'];
+                        PWM_MAIN.getObject(inputID).value = isAdminDefined ? multiValues[rowKey]['text'] : '[User Defined]';
+                        PWM_MAIN.getObject(inputID).disabled = !isAdminDefined;
+                    };
+                    processQuestion();
+                    PWM_MAIN.addEventHandler(inputID, 'input', function () {
+                        //if (!multiValues[rowKey]['adminDefined']) {
+                        PWM_VAR['clientSettingCache'][keyName][localeKey][rowKey]['text'] = PWM_MAIN.getObject(inputID).value;
+                        //}
+                    });
 
-            var dialogTitle = PWM_SETTINGS['settings'][keyName]['label'] + ' - ' + localeDisplay;
-            PWM_MAIN.showDialog({title:dialogTitle,text:dialogBody,showClose:true,dialogClass:'wide',loadFunction:function(){
-                dojoParser.parse(PWM_MAIN.getObject('challengeLocaleDialogDiv'));
-                for (var iteration in multiValues) {
-                    (function(rowKey) {
-                        var inputID = "value-" + keyName + "-" + localeName + "-" + rowKey;
-
-                        // question text
-                        var processQuestion = function() {
-                            var isAdminDefined = multiValues[rowKey]['adminDefined'];
-                            PWM_MAIN.getObject(inputID).value = isAdminDefined ? multiValues[rowKey]['text'] : '[User Defined]';
-                            PWM_MAIN.getObject(inputID).disabled = !isAdminDefined;
-                        };
+                    // admin defined checkbox
+                    PWM_MAIN.getObject('value-adminDefined-' + inputID).disabled = false;
+                    PWM_MAIN.getObject('value-adminDefined-' + inputID).checked = multiValues[rowKey]['adminDefined'];
+                    PWM_MAIN.addEventHandler('value-adminDefined-' + inputID,'change',function(){
+                        var checked = PWM_MAIN.getObject('value-adminDefined-' + inputID).checked;
+                        multiValues[rowKey]['adminDefined'] = checked;
                         processQuestion();
-                        PWM_MAIN.addEventHandler(inputID, 'input', function () {
-                            //if (!multiValues[rowKey]['adminDefined']) {
-                                PWM_VAR['clientSettingCache'][keyName][localeKey][rowKey]['text'] = PWM_MAIN.getObject(inputID).value;
-                            //}
-                        });
+                    });
 
-                        // admin defined checkbox
-                        PWM_MAIN.getObject('value-adminDefined-' + inputID).disabled = false;
-                        PWM_MAIN.getObject('value-adminDefined-' + inputID).checked = multiValues[rowKey]['adminDefined'];
-                        PWM_MAIN.addEventHandler('value-adminDefined-' + inputID,'change',function(){
-                            var checked = PWM_MAIN.getObject('value-adminDefined-' + inputID).checked;
-                            multiValues[rowKey]['adminDefined'] = checked;
-                            processQuestion();
-                        });
+                    // wordlist checkbox
+                    PWM_MAIN.getObject('value-wordlist-' + inputID).disabled = false;
+                    PWM_MAIN.getObject('value-wordlist-' + inputID).checked = multiValues[rowKey]['enforceWordlist'];
+                    PWM_MAIN.addEventHandler('value-wordlist-' + inputID,'change',function(){
+                        var checked = PWM_MAIN.getObject('value-wordlist-' + inputID).checked;
+                        multiValues[rowKey]['enforceWordlist'] = checked;
+                    });
 
-                        // wordlist checkbox
-                        PWM_MAIN.getObject('value-wordlist-' + inputID).disabled = false;
-                        PWM_MAIN.getObject('value-wordlist-' + inputID).checked = multiValues[rowKey]['enforceWordlist'];
-                        PWM_MAIN.addEventHandler('value-wordlist-' + inputID,'change',function(){
-                            var checked = PWM_MAIN.getObject('value-wordlist-' + inputID).checked;
-                            multiValues[rowKey]['enforceWordlist'] = checked;
-                        });
+                    // delete row
+                    PWM_MAIN.addEventHandler('button-deleteRow-' + inputID, 'click', function () {
+                        ChallengeSettingHandler.deleteRow(keyName, localeKey, rowKey);
+                    });
 
-                        // delete row
-                        PWM_MAIN.addEventHandler('button-deleteRow-' + inputID, 'click', function () {
-                            ChallengeSettingHandler.deleteRow(keyName, localeKey, rowKey);
-                        });
+                }(iteration));
+            }
 
-                    }(iteration));
-                }
+        },okAction:function(){
+            ChallengeSettingHandler.write(keyName);
+            ChallengeSettingHandler.draw(keyName);
+        }});
 
-            },okAction:function(){
-                ChallengeSettingHandler.write(keyName);
-                ChallengeSettingHandler.draw(keyName);
-            }});
-        }
-    );
 
 };
 
@@ -2117,15 +2121,28 @@ ChallengeSettingHandler.toggleAdminDefinedRow = function(toggleElement,inputID,k
 };
 
 ChallengeSettingHandler.deleteRow = function(keyName, localeKey, rowName) {
-    delete PWM_VAR['clientSettingCache'][keyName][localeKey][rowName];
-    ChallengeSettingHandler.editLocale(keyName, localeKey);
+    PWM_MAIN.showConfirmDialog({
+        okAction:function(){
+            PWM_MAIN.showWaitDialog({loadFunction:function(){
+                delete PWM_VAR['clientSettingCache'][keyName][localeKey][rowName];
+                ChallengeSettingHandler.write(keyName,function(){
+                    ChallengeSettingHandler.editLocale(keyName, localeKey);
+                });
+            }})
+        }
+    });
 };
 
 ChallengeSettingHandler.addRow = function(keyName, localeKey) {
-    var newValues = PWM_MAIN.copyObject(ChallengeSettingHandler.defaultItem);
-    PWM_VAR['clientSettingCache'][keyName][localeKey].push(newValues);
-    ChallengeSettingHandler.write(keyName);
-    ChallengeSettingHandler.editLocale(keyName, localeKey);
+    PWM_MAIN.showWaitDialog({
+        loadFunction:function(){
+            var newValues = PWM_MAIN.copyObject(ChallengeSettingHandler.defaultItem);
+            PWM_VAR['clientSettingCache'][keyName][localeKey].push(newValues);
+            ChallengeSettingHandler.write(keyName,function(){
+                ChallengeSettingHandler.editLocale(keyName, localeKey);
+            });
+        }
+    });
 };
 
 ChallengeSettingHandler.write = function(keyName, nextFunction) {
@@ -2168,28 +2185,28 @@ UserPermissionHandler.draw = function(keyName) {
 
             var currentProfileValue = ('ldapProfileID' in resultValue[rowKey]) ? resultValue[rowKey]['ldapProfileID'] : "";
             htmlBody += '</div><table class="noborder">'
-            + '<td style="width:200px" id="' + inputID + '_profileHeader' + '">' + PWM_CONFIG.showString('Setting_Permission_Profile') + '</td>'
-            + '<td><input style="width: 200px;" class="configStringInput" id="' + inputID + '-profile" list="' + inputID + '-datalist" value="' +  currentProfileValue + '"/>'
-            + '<datalist id="' + inputID + '-datalist"/></td>'
-            + '</tr>';
+                + '<td style="width:200px" id="' + inputID + '_profileHeader' + '">' + PWM_CONFIG.showString('Setting_Permission_Profile') + '</td>'
+                + '<td><input style="width: 200px;" class="configStringInput" id="' + inputID + '-profile" list="' + inputID + '-datalist" value="' +  currentProfileValue + '"/>'
+                + '<datalist id="' + inputID + '-datalist"/></td>'
+                + '</tr>';
 
             if (resultValue[rowKey]['type'] != 'ldapGroup') {
                 var currentQueryValue = ('ldapQuery' in resultValue[rowKey]) ? resultValue[rowKey]['ldapQuery'] : "";
                 htmlBody += '<tr>'
-                + '<td><span id="' + inputID + '_FilterHeader' + '">' + PWM_CONFIG.showString('Setting_Permission_Filter') + '</span></td>'
-                + '<td><input style="width: 420px;" class="configStringInput" id="' + inputID + '-query" value="' + currentQueryValue + '"></input></td>'
-                + '</tr>';
+                    + '<td><span id="' + inputID + '_FilterHeader' + '">' + PWM_CONFIG.showString('Setting_Permission_Filter') + '</span></td>'
+                    + '<td><input style="width: 420px;" class="configStringInput" id="' + inputID + '-query" value="' + currentQueryValue + '"></input></td>'
+                    + '</tr>';
             }
 
             var currentBaseValue = ('ldapBase' in resultValue[rowKey]) ? resultValue[rowKey]['ldapBase'] : "";
             htmlBody += '<tr>'
-            + '<td><span id="' + inputID + '_BaseHeader' + '">'
-            + PWM_CONFIG.showString((resultValue[rowKey]['type'] == 'ldapGroup') ?  'Setting_Permission_Base_Group' : 'Setting_Permission_Base')
-            + '</span></td>'
+                + '<td><span id="' + inputID + '_BaseHeader' + '">'
+                + PWM_CONFIG.showString((resultValue[rowKey]['type'] == 'ldapGroup') ?  'Setting_Permission_Base_Group' : 'Setting_Permission_Base')
+                + '</span></td>'
 
-            + '<td><input style="width: 420px;" class="configStringInput" id="' + inputID + '-base" value="' + currentBaseValue + '"></input></td>'
-            + '</td>'
-            + '</tr>';
+                + '<td><input style="width: 420px;" class="configStringInput" id="' + inputID + '-base" value="' + currentBaseValue + '"></input></td>'
+                + '</td>'
+                + '</tr>';
 
 
             htmlBody += '</table></div><div id="button-' + inputID + '-deleteRow" style="float:right" class="delete-row-icon action-icon fa fa-times"></div>';
@@ -2205,8 +2222,9 @@ UserPermissionHandler.draw = function(keyName) {
 
                 var profileSelectElement = PWM_MAIN.getObject(inputID + "-datalist");
                 profileSelectElement.appendChild(new Option('all'));
-                for (var i in PWM_VAR['ldapProfileIds']) {
-                    profileSelectElement.appendChild(new Option(PWM_VAR['ldapProfileIds'][i]));
+                var profileIdList = PWM_SETTINGS['var']['ldapProfileIds'];
+                for (var i in profileIdList) {
+                    profileSelectElement.appendChild(new Option(profileIdList[i]));
                 }
 
                 PWM_MAIN.addEventHandler(inputID + '-profile','input',function(){
@@ -2271,13 +2289,13 @@ UserPermissionHandler.draw = function(keyName) {
     var hideGroup = 'hideGroups' in options && options['hideGroups'] == "true";
     if (!hideGroup) {
         buttonRowHtml += '<button class="btn" id="button-' + keyName + '-addGroupValue">'
-        + '<span class="btn-icon fa fa-plus-square"></span>Add Group</button>';
+            + '<span class="btn-icon fa fa-plus-square"></span>Add Group</button>';
     }
 
     var hideMatch = 'hideMatch' in options && options['hideMatch'] == "true";
     if (!hideMatch) {
         buttonRowHtml += '<button id="button-' + keyName + '-viewMatches" class="btn">'
-        + '<span class="btn-icon fa fa-user"></span>View Matches</button>';
+            + '<span class="btn-icon fa fa-user"></span>View Matches</button>';
     }
 
     parentDivElement.innerHTML = parentDivElement.innerHTML + buttonRowHtml;
@@ -2327,8 +2345,8 @@ OptionListHandler.init = function(keyName) {
         (function (optionKey) {
             var buttonID = keyName + "_button_" + optionKey;
             htmlBody += '<label class="checkboxWrapper" style="min-width:180px;">'
-            + '<input type="checkbox" id="' + buttonID + '" disabled/>'
-            + options[optionKey] + '</label>';
+                + '<input type="checkbox" id="' + buttonID + '" disabled/>'
+                + options[optionKey] + '</label>';
         })(key);
     }
     parentDivElement.innerHTML = htmlBody;
@@ -2395,26 +2413,17 @@ NumericValueHandler.impl = function(settingKey, type, defaultMin, defaultMax) {
         htmlBody += '<span class="configNumericLimits">' + min + ' - ' + max + '</span>';
     } else if (type == 'duration') {
         htmlBody +=  '<span class="configNumericLimits">' + PWM_MAIN.showString('Display_Seconds')  + '</span>'
-        htmlBody +=  '<span style="margin-left:10px" id="display-' + settingKey + '-duration"></span>';
+        htmlBody +=  '<span style="margin-left:20px" id="display-' + settingKey + '-duration"></span>';
     }
 
     parentDivElement.innerHTML = htmlBody;
 
     PWM_CFGEDIT.readSetting(settingKey,function(data){
         PWM_MAIN.getObject('value_' + settingKey).value = data;
-        PWM_VAR['clientSettingCache'][settingKey] = data;
-        PWM_MAIN.addEventHandler('value_' + settingKey,'input',function(){
-            var value = PWM_MAIN.getObject('value_' + settingKey).value;
-            var valid = value && value.match(/[0-9]+/);
-            if (valid) {
-                console.log('valid');
-                PWM_VAR['clientSettingCache'][settingKey] = data;
-                PWM_CFGEDIT.writeSetting(settingKey, value);
-                NumericValueHandler.updateDurationDisplay(settingKey,value);
-            } else {
-                console.log('invalid');
-                PWM_MAIN.getObject('value_' + settingKey).value = PWM_VAR['clientSettingCache'][settingKey];
-            }
+        UILibrary.manageNumericInput('value_' + settingKey,function(value){
+            PWM_VAR['clientSettingCache'][settingKey] = value;
+            PWM_CFGEDIT.writeSetting(settingKey, value);
+            NumericValueHandler.updateDurationDisplay(settingKey,value);
         });
 
         PWM_MAIN.addEventHandler('value_' + settingKey,'mousewheel',function(e){ e.blur(); });
@@ -2423,6 +2432,7 @@ NumericValueHandler.impl = function(settingKey, type, defaultMin, defaultMax) {
 };
 
 NumericValueHandler.updateDurationDisplay = function(settingKey, numberValue) {
+    numberValue = parseInt(numberValue);
     var displayElement = PWM_MAIN.getObject('display-' + settingKey + '-duration');
     if (displayElement) {
         displayElement.innerHTML = (numberValue && numberValue != 0)
@@ -2866,6 +2876,7 @@ UILibrary.stringEditorDialog = function(options){
         var value = PWM_MAIN.getObject('addValueDialog_input').value;
         if (value.length > 0) {
             var passedValidation = regexObject  != null && regexObject.test(value);
+
             if (passedValidation) {
                 PWM_MAIN.getObject('dialog_ok_button').disabled = false;
                 PWM_VAR['temp-dialogInputValue'] = PWM_MAIN.getObject('addValueDialog_input').value;
@@ -2948,4 +2959,37 @@ UILibrary.addAddLocaleButtonRow = function(parentDiv, keyName, addFunction, exis
     });
 };
 
-
+UILibrary.manageNumericInput = function(elementID, readFunction) {
+    var element = PWM_MAIN.getObject(elementID);
+    if (!element) {
+        return;
+    }
+    var validChecker = function(value) {
+        if (!value) {
+            return false;
+        }
+        if (value.match('^[0-9]*$') == null) {
+            return false;
+        }
+        if (element.hasAttribute('min')) {
+            if (value < parseInt(element.getAttribute('min'))) {
+                return false;
+            }
+        }
+        if (element.hasAttribute('max')) {
+            if (value > parseInt(element.getAttribute('max'))) {
+                return false;
+            }
+        }
+        return true;
+    };
+    PWM_MAIN.addEventHandler(elementID,'input',function(){
+        var value = element.value;
+        if (validChecker(value)) {
+            console.log('valid numerical input value: ' + value);
+            readFunction(value);
+        } else {
+            console.log('invalid numerical input value: ' + value);
+        }
+    });
+};

+ 46 - 14
pwm/servlet/web/public/resources/js/configeditor.js

@@ -301,6 +301,18 @@ function handleResetClick(settingKey) {
 }
 
 PWM_CFGEDIT.initConfigEditor = function(nextFunction) {
+    if (PWM_SETTINGS['var']['configUnlocked']) {
+        PWM_MAIN.showDialog({
+            title:'Notice - Configuration Status: Open',
+            text:PWM_CONFIG.showString('Display_ConfigOpenInfo'),
+            loadFunction:function(){
+                PWM_MAIN.addEventHandler('link-configManager','click',function(){
+                    PWM_MAIN.goto('/private/config/ConfigManager');
+                });
+            }
+        });
+    }
+
     PWM_MAIN.addEventHandler('homeSettingSearch',['input','focus'],function(){PWM_CFGEDIT.processSettingSearch(PWM_MAIN.getObject('searchResults'));});
     PWM_MAIN.addEventHandler('button-navigationExpandAll','click',function(){PWM_VAR['navigationTree'].expandAll()});
     PWM_MAIN.addEventHandler('button-navigationCollapseAll','click',function(){PWM_VAR['navigationTree'].collapseAll()});
@@ -314,6 +326,14 @@ PWM_CFGEDIT.initConfigEditor = function(nextFunction) {
     PWM_MAIN.addEventHandler('macroDoc_icon','click',function(){ PWM_CFGEDIT.showMacroHelp(); });
     PWM_MAIN.addEventHandler('settingFilter_icon','click',function(){ PWM_CFGEDIT.showSettingFilter(); });
 
+    PWM_MAIN.addEventHandler('button-closeMenu','click',function(){
+        PWM_CFGEDIT.closeMenuPanel();
+    });
+    PWM_MAIN.addEventHandler('button-openMenu','click',function(){
+        PWM_CFGEDIT.openMenuPanel();
+    });
+
+
     PWM_CONFIG.heartbeatCheck();
 
     PWM_CFGEDIT.loadMainPageBody();
@@ -336,7 +356,7 @@ PWM_CFGEDIT.executeSettingFunction = function(setting, name, input, resultHandle
         }});
     };
 
-    var requestUrl = "ConfigEditor?processAction=executeSettingFunction&pwmFormID=" + PWM_GLOBAL['pwmFormID'];
+    var requestUrl = "ConfigEditor?processAction=executeSettingFunction";
     if (PWM_CFGEDIT.readCurrentProfile()) {
         requestUrl = PWM_MAIN.addParamToUrl(requestUrl,'profile',PWM_CFGEDIT.readCurrentProfile());
     }
@@ -754,13 +774,13 @@ PWM_CFGEDIT.displaySettingsCategory = function(category) {
     }
     var htmlSettingBody = '';
     /*
-    htmlSettingBody += '<button id="button-expandAllHelp">Awesome</button>';
-    PWM_MAIN.addEventHandler('button-expandAllHelp','click',function(){
-        PWM_MAIN.doQuery('.pane-help',function(element){
-            console.log('hit!' );
-        });
-    });
-    */
+     htmlSettingBody += '<button id="button-expandAllHelp">Awesome</button>';
+     PWM_MAIN.addEventHandler('button-expandAllHelp','click',function(){
+     PWM_MAIN.doQuery('.pane-help',function(element){
+     console.log('hit!' );
+     });
+     });
+     */
 
     if (category == 'LDAP_PROFILE') {
         htmlSettingBody += '<div style="width: 100%; text-align: center">'
@@ -1133,7 +1153,7 @@ PWM_CFGEDIT.drawHomePage = function() {
     templateSettingBody += '<div><select id="select-template">';
     for (var template in PWM_SETTINGS['templates']) {
         var templateInfo = PWM_SETTINGS['templates'][template];
-        var selected = PWM_VAR['currentTemplate'] == templateInfo['key'];
+        var selected = PWM_SETTINGS['var']['currentTemplate'] == templateInfo['key'];
         if (selected || !templateInfo['hidden']) {
             templateSettingBody += '<option value="' + templateInfo['key'] + '"';
             if (selected) {
@@ -1145,7 +1165,8 @@ PWM_CFGEDIT.drawHomePage = function() {
     templateSettingBody += '</select></div>';
 
     var notesSettingBody = '';
-    notesSettingBody += '<div><textarea id="configurationNotesTextarea">' + PWM_VAR['configurationNotes'] + '</textarea></div>';
+    var configNotes = 'configurationNotes' in PWM_SETTINGS['var'] ? PWM_SETTINGS['var']['configurationNotes'] : ''  ;
+    notesSettingBody += '<div><textarea id="configurationNotesTextarea">' + configNotes + '</textarea></div>';
 
     var templateSelectSetting = {};
     templateSelectSetting['key'] = 'templateSelect';
@@ -1169,19 +1190,18 @@ PWM_CFGEDIT.drawHomePage = function() {
     });
     PWM_MAIN.addEventHandler('configurationNotesTextarea','input',function(){
         var value = PWM_MAIN.getObject('configurationNotesTextarea').value;
-        PWM_VAR['configurationNotes'] = value;
+        PWM_SETTINGS['var']['configurationNotes'] = value;
         var url = "ConfigEditor?processAction=setOption&updateNotesText=true";
         PWM_MAIN.ajaxRequest(url,function(){console.log('saved config notes')},{content:value});
     });
 
     PWM_MAIN.setStyle('outline_' + templateSelectSetting['key'],'display','inherit');
     PWM_MAIN.setStyle('outline_' + notesSettings['key'],'display','inherit');
-
 };
 
 
 PWM_CFGEDIT.initConfigSettingsDefinition=function(nextFunction) {
-    var clientConfigUrl = PWM_GLOBAL['url-context'] + "/private/config/ConfigEditor?processAction=settingData&pwmFormID=" + PWM_GLOBAL['pwmFormID'];
+    var clientConfigUrl = PWM_GLOBAL['url-context'] + "/private/config/ConfigEditor?processAction=settingData";
     var loadFunction = function(data) {
         if (data['error'] == true) {
             console.error('unable to load ' + clientConfigUrl + ', error: ' + data['errorDetail'])
@@ -1285,4 +1305,16 @@ PWM_CFGEDIT.applyGotoSettingHandlers = function() {
             PWM_CFGEDIT.gotoSetting(null,linkValue,null);
         })
     });
-};
+};
+
+PWM_CFGEDIT.closeMenuPanel = function() {
+    console.log('action closeHeader');
+    PWM_MAIN.setStyle('header-warning','display','none');
+    PWM_MAIN.setStyle('button-openMenu','display','inherit');
+};
+
+PWM_CFGEDIT.openMenuPanel = function() {
+    console.log('action openHeader');
+    PWM_MAIN.setStyle('header-warning','display','inherit');
+    PWM_MAIN.setStyle('button-openMenu','display','none');
+};

+ 16 - 5
pwm/servlet/web/public/resources/js/configmanager.js

@@ -129,6 +129,7 @@ PWM_CONFIG.uploadLocalDB=function() {
                     PWM_CONFIG.waitForRestart({location:'/'});
                 }});
             };
+            PWM_MAIN.IdleTimeoutHandler.cancelCountDownTimer();
             PWM_CONFIG.uploadFile(uploadOptions);
         }
     });
@@ -346,15 +347,23 @@ PWM_CONFIG.uploadFile = function(options) {
             dojo.connect(uploader, "onComplete", completeFunction);
             dojo.connect(uploader, "onError", errorFunction);
             dojo.connect(uploader, "onBegin", function () {
+                PWM_MAIN.clearDijitWidget(idName);
                 PWM_MAIN.showWaitDialog({title:"Uploading..."});
             });
             dojo.connect(uploader, "onProgress", function (data) {
                 var decimal = data['decimal'];
                 require(["dijit/registry"],function(registry){
                     var progressBar = registry.byId('progressBar');
-                    progressBar.set("maximum",100);
-                    progressBar.set("indeterminate",false);
-                    progressBar.set("value", decimal * 100);
+                    if (progressBar) {
+                        progressBar.set("maximum", 100);
+                        progressBar.set("indeterminate", false);
+                        progressBar.set("value", decimal * 100);
+                    }
+                    var html5Bar = PWM_MAIN.getObject("wait");
+                    if (html5Bar) {
+                        html5Bar.setAttribute("max",100);
+                        html5Bar.setAttribute("value", decimal * 100);
+                    }
                 });
             });
         }});
@@ -445,11 +454,13 @@ PWM_CONFIG.convertListOfIdentitiesToHtml = function(data) {
     var users = data['users'];
     if (users && !PWM_MAIN.isEmpty(users)) {
         html += '<table style="">';
-        html += '<thead><tr><td class="title" style="width: 75px">' + PWM_MAIN.showString('Field_LdapProfile') + '</td><td class="title" style="max-width: 275px">' + PWM_MAIN.showString('Field_UserDN') + '</td></tr></thead>';
+        html += '<thead><tr><td class="title" style="width: 75px">' + PWM_MAIN.showString('Field_LdapProfile') + '</td>';
+        html += '<td class="title" style="max-width: 375px">'+ PWM_MAIN.showString('Field_UserDN') + '</td></tr></thead>';
         html += '<tbody>';
         for (var iter in users) {
             var userIdentity = users[iter];
-            html += '<tr ><td style="width: 75px">' + userIdentity['ldapProfile'] + '</td><td style="max-width: 275px">' + userIdentity['userDN'] + '</td></tr>';
+            html += '<tr ><td style="width: 75px">' + userIdentity['ldapProfile'] + '</td><td title="' + userIdentity['userDN'] + '">';
+            html += '<div style="max-width: 375px; white-space: nowrap; overflow:hidden; text-overflow: ellipsis;">' + userIdentity['userDN'] + '</div></td></tr>';
         }
         html += '</tbody></table>';
     } else {

+ 129 - 67
pwm/servlet/web/public/resources/js/helpdesk.js

@@ -27,20 +27,30 @@ var PWM_HELPDESK = PWM_HELPDESK || {};
 var PWM_VAR = PWM_VAR || {};
 
 PWM_HELPDESK.executeAction = function(actionName) {
-    PWM_MAIN.showWaitDialog({loadFunction:function() {
-        var url = "Helpdesk&processAction=executeAction&name=" + actionName;
-        var loadFunction = function(data) {
-            PWM_MAIN.closeWaitDialog();
-            if (data['error'] == true) {
-                PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Error'), text: data['errorDetail']});
-            } else {
-                PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], nextAction: function () {
-                    PWM_HELPDESK.refreshDetailPage();
-                }});
-            }
-        };
-        PWM_MAIN.ajaxRequest(url,loadFunction);
-    }});
+    var body = PWM_VAR['actions'][actionName]['description'];
+    body += "<br/><br/>" + PWM_MAIN.showString('Confirm');
+    PWM_MAIN.showConfirmDialog({
+        title:PWM_MAIN.showString('Button_Confirm') + " " + actionName,
+        text:body,
+        okAction:function(){
+            var inputValues = {};
+            inputValues['userKey'] = PWM_VAR['helpdesk_obfuscatedDN'];
+            PWM_MAIN.showWaitDialog({loadFunction:function() {
+                var url = "Helpdesk?processAction=executeAction&name=" + actionName;
+                var loadFunction = function(data) {
+                    PWM_MAIN.closeWaitDialog();
+                    if (data['error'] == true) {
+                        PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Error'), text: data['errorDetail']});
+                    } else {
+                        PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], nextAction: function () {
+                            PWM_HELPDESK.refreshDetailPage();
+                        }});
+                    }
+                };
+                PWM_MAIN.ajaxRequest(url,loadFunction,{content:inputValues});
+            }});
+        }
+    });
 };
 
 PWM_HELPDESK.doResponseClear = function() {
@@ -259,7 +269,7 @@ PWM_HELPDESK.processHelpdeskSearch = function() {
     validationProps['processResultsFunction'] = function(data) {
         var grid = PWM_VAR['heldesk_search_grid'];
         if (data['error']) {
-            PWM_MAIN.showError("error: " + data['errorMessage']);
+            PWM_MAIN.showErrorDialog(data);
             grid.refresh();
         } else {
             var gridData = data['data']['searchResults'];
@@ -313,36 +323,22 @@ PWM_HELPDESK.makeSearchGrid = function(nextAction) {
     });
 };
 
-PWM_HELPDESK.deleteUser = function(userKey) {
+PWM_HELPDESK.deleteUser = function() {
     PWM_MAIN.showConfirmDialog({
         text:PWM_MAIN.showString('Confirm_DeleteUser'),
         okAction:function(){
-            require(["dojo", "dijit/Dialog"], function (dojo) {
-                dojo.xhrPost({
-                    url: "Helpdesk?pwmFormID=" + PWM_GLOBAL['pwmFormID'] + "&processAction=deleteUser",
-                    preventCache: true,
-                    handleAs: "json",
-                    timeout: PWM_MAIN.ajaxTimeout,
-                    postData: 'userKey=' + userKey,
-                    load: function (data) {
-                        PWM_MAIN.closeWaitDialog();
-                        if (data['error'] == true) {
-                            PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Error'), text: data['errorDetail'],okAction: function(){
-                                PWM_MAIN.goto("/private/Helpdesk");
-                            } });
-                        } else {
-                            PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], okAction: function () {
-                                PWM_MAIN.goto("/private/Helpdesk");
-                            }});
-                        }
-                    },
-                    error: function (errorObj) {
-                        PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Error'), text: 'error deleting user: ' + errorObj,okAction: function(){
-                            PWM_MAIN.goto("/private/Helpdesk");
-                        } });
-                    }
-                });
-            });
+            var url = "Helpdesk?processAction=deleteUser&userKey=" + PWM_VAR['helpdesk_obfuscatedDN'];
+            var loadFunction = function(data) {
+                PWM_MAIN.closeWaitDialog();
+                if (data['error'] == true) {
+                    PWM_MAIN.showErrorDialog(error);
+                } else {
+                    PWM_MAIN.showDialog({title: PWM_MAIN.showString('Title_Success'), text: data['successMessage'], okAction: function () {
+                        PWM_MAIN.goto("/private/Helpdesk");
+                    }});
+                }
+            };
+            PWM_MAIN.ajaxRequest(url,loadFunction);
         }
     })
 };
@@ -390,12 +386,13 @@ PWM_HELPDESK.validateOtpCode = function(userKey) {
     });
 };
 
-PWM_HELPDESK.sendVerificationToken = function(userKey) {
+PWM_HELPDESK.sendVerificationToken = function() {
     var sendMethodSetting = PWM_VAR["helpdesk_setting_tokenSendMethod"];
     var choiceFlag = sendMethodSetting == 'CHOICE_SMS_EMAIL';
 
     var sendTokenAction = function(choice) {
         var sendContent = {};
+        sendContent['userKey'] = PWM_VAR['helpdesk_obfuscatedDN'];
         if (choiceFlag && choice) {
             sendContent['method'] = choice;
         }
@@ -405,8 +402,7 @@ PWM_HELPDESK.sendVerificationToken = function(userKey) {
                 if (!data['error']) {
                     var text = '<table><tr><td>Token Destination</td><td>' + data['data']['destination'] + '</td></tr>'
                         + '<tr><td>Token</td><td><pre>' + data['data']['token'] + '</pre></td></tr></table>';
-
-                    PWM_MAIN.showDialog({title:PWM_MAIN.showString('Title_Success'),text:text,width:600});
+                    PWM_MAIN.showDialog({title:PWM_MAIN.showString('Title_Success'),text:text});
                 } else {
                     PWM_MAIN.showErrorDialog(data);
                 }
@@ -415,33 +411,52 @@ PWM_HELPDESK.sendVerificationToken = function(userKey) {
         }});
     };
 
-    var confirmText = 'Are you sure you want to send the user a verification token?';
-    var dialoagLoadFunction = function(){};
     if (choiceFlag) {
-        confirmText += '<br/><br/><button class="btn" type="button" name="emailChoiceButton" id="emailChoiceButton">'
+        var confirmText = '<div style="text-align:center"><br/><br/><button class="btn" type="button" name="emailChoiceButton" id="emailChoiceButton">'
             + '<span class="btn-icon fa fa-file-text"></span>' + PWM_MAIN.showString('Button_Email') + '</button>'
-            + '<button class="btn" type="button" name="smsChoiceButton" id="smsChoiceButton">'
-            + '<span class="btn-icon fa fa-phone"></span>' + PWM_MAIN.showString('Button_SMS') + '</button>';
-        dialoagLoadFunction = function() {
+            + '<br/><br/><button class="btn" type="button" name="smsChoiceButton" id="smsChoiceButton">'
+            + '<span class="btn-icon fa fa-phone"></span>' + PWM_MAIN.showString('Button_SMS') + '</button></div>';
+        var dialoagLoadFunction = function() {
             PWM_MAIN.addEventHandler('emailChoiceButton','click',function(){sendTokenAction('email')});
             PWM_MAIN.addEventHandler('smsChoiceButton','click',function(){sendTokenAction('sms')});
-        }
+        };
+        PWM_MAIN.showConfirmDialog({
+            title:'Verification send method',
+            text:confirmText,
+            showOk: !choiceFlag,
+            okAction:function(){
+                sendTokenAction();
+            },
+            loadFunction:dialoagLoadFunction
+        });
+    } else {
+        PWM_MAIN.showConfirmDialog({
+            okAction:function(){
+                sendTokenAction();
+            }
+        });
     }
-    PWM_MAIN.showConfirmDialog({
-        text:confirmText,
-        showOk: !choiceFlag,
-        okAction:function(){
-            sendTokenAction();
-        },
-        loadFunction:dialoagLoadFunction
-    });
 };
 
 PWM_HELPDESK.initHelpdeskSearchPage = function() {
     PWM_HELPDESK.makeSearchGrid(function(){
         PWM_MAIN.addEventHandler('username', "keyup, input", function(){
             PWM_HELPDESK.processHelpdeskSearch();
+            var userPrefs = PWM_MAIN.readLocalStorage();
+            if (userPrefs) {
+                userPrefs['helpdesk-search-inputfield'] = PWM_MAIN.getObject('username').value;
+                PWM_MAIN.writeLocalStorage(userPrefs);
+            }
         });
+
+        var userPrefs = PWM_MAIN.readLocalStorage();
+        if (userPrefs) {
+            var oldValue = userPrefs['helpdesk-search-inputfield'];
+            if (oldValue) {
+                PWM_MAIN.getObject('username').value = oldValue;
+            }
+        }
+
         if (PWM_MAIN.getObject('username').value && PWM_MAIN.getObject('username').value.length > 0) {
             PWM_HELPDESK.processHelpdeskSearch();
         }
@@ -462,28 +477,26 @@ PWM_HELPDESK.initHelpdeskDetailPage = function() {
         PWM_HELPDESK.initiateChangePasswordDialog();
     });
     PWM_MAIN.addEventHandler('helpdesk_unlockBtn','click',function(){
-        PWM_MAIN.showConfirmDialog({okAction:function() {
-            PWM_MAIN.submitPostAction('Helpdesk', 'doUnlock', {userKey: PWM_VAR['helpdesk_obfuscatedDN']});
-        }});
+        PWM_HELPDESK.unlockIntruder();
     });
     PWM_MAIN.addEventHandler('helpdesk_clearResponsesBtn','click',function(){
         PWM_MAIN.showConfirmDialog({okAction:function(){
-             PWM_HELPDESK.doResponseClear();
+            PWM_HELPDESK.doResponseClear();
         }});
     });
     PWM_MAIN.addEventHandler('helpdesk_clearOtpSecretBtn','click',function(){
         PWM_MAIN.showConfirmDialog({okAction:function() {
-            PWM_MAIN.submitPostAction('Helpdesk', 'doClearOtpSecret', {userKey: PWM_VAR['helpdesk_obfuscatedDN']});
+            PWM_HELPDESK.doOtpClear();
         }});
     });
     PWM_MAIN.addEventHandler('helpdesk_verifyOtpButton','click',function(){
         PWM_HELPDESK.validateOtpCode(PWM_VAR['helpdesk_obfuscatedDN']);
     });
     PWM_MAIN.addEventHandler('sendTokenButton','click',function(){
-        PWM_HELPDESK.sendVerificationToken(PWM_VAR['helpdesk_obfuscatedDN']);
+        PWM_HELPDESK.sendVerificationToken();
     });
     PWM_MAIN.addEventHandler('helpdesk_deleteUserButton','click',function(){
-        PWM_HELPDESK.deleteUser(PWM_VAR['helpdesk_obfuscatedDN'])
+        PWM_HELPDESK.deleteUser();
     });
 
 };
@@ -519,4 +532,53 @@ PWM_HELPDESK.refreshDetailPage = function() {
     }});
 };
 
+PWM_HELPDESK.unlockIntruder = function() {
+    PWM_MAIN.showConfirmDialog({
+        title: PWM_MAIN.showString('Button_Unlock'),
+        okAction:function() {
+            PWM_MAIN.showWaitDialog({
+                loadFunction:function(){
+                    var ajaxUrl = "Helpdesk?processAction=unlockIntruder&userKey=" + PWM_VAR['helpdesk_obfuscatedDN'];
+                    var load = function(data) {
+                        if (data['error'] == true) {
+                            PWM_MAIN.showErrorDialog(error);
+                        } else {
+                            PWM_MAIN.showDialog({
+                                title: PWM_MAIN.showString('Button_Unlock'),
+                                text: data['successMessage'],
+                                okAction:function(){
+                                    PWM_HELPDESK.refreshDetailPage();
+                                }
+                            });
+                        }
+                    };
+                    PWM_MAIN.ajaxRequest(ajaxUrl, load);
+                }
+            });
+        }
+    });
+};
+
+PWM_HELPDESK.doOtpClear = function() {
+    var inputValues = {};
+    inputValues['userKey'] = PWM_VAR['helpdesk_obfuscatedDN'];
+    PWM_MAIN.showWaitDialog({loadFunction:function() {
+        var url = "Helpdesk?processAction=clearOtpSecret";
+        var loadFunction = function(results) {
+            if (results['error'] != true) {
+                PWM_MAIN.showDialog({
+                    title: PWM_MAIN.showString('Button_HelpdeskClearOtpSecret'),
+                    text: results['successMessage'],
+                    okAction:function(){
+                        PWM_HELPDESK.refreshDetailPage();
+                    }
+                });
+            } else {
+                PWM_MAIN.showErrorDialog(results);
+            }
+        };
+        PWM_MAIN.ajaxRequest(url,loadFunction,{content:inputValues});
+    }});
+};
+
 PWM_HELPDESK.initPage();

+ 19 - 18
pwm/servlet/web/public/resources/js/main.js

@@ -781,6 +781,7 @@ PWM_MAIN.showDialog = function(options) {
     var idName = 'id' in options ? options['id'] : 'dialogPopup';
     var dialogClass = 'dialogClass' in options ? options['dialogClass'] : null;
     var okLabel = 'okLabel' in options ? options['okLabel'] : PWM_MAIN.showString('Button_OK');
+    var buttonHtml = 'buttonHtml' in options ? options['buttonHtml'] : '';
 
     var okAction = function(){
         if (closeOnOk) {
@@ -804,28 +805,27 @@ PWM_MAIN.showDialog = function(options) {
 
     var bodyText = '';
     bodyText += text;
-    if (showOk || showCancel) {
+
+    if (showOk || showCancel || buttonHtml.length > 0) {
         bodyText += '<div class="buttonbar">';
-    }
-    if (showOk) {
-        bodyText += '<button class="btn" id="dialog_ok_button">'
-            + '<span class="btn-icon fa fa-check-square-o"></span>'
-            + okLabel + '</button>  ';
-    }
-    if (showCancel) {
-        bodyText += '<button class="btn" id="dialog_cancel_button">'
-            + '<span class="btn-icon fa fa-times"></span>'
-            + PWM_MAIN.showString('Button_Cancel') + '</button>  ';
+        if (showOk) {
+            bodyText += '<button class="btn" id="dialog_ok_button">'
+                + '<span class="btn-icon fa fa-check-square-o"></span>'
+                + okLabel + '</button>  ';
+        }
+        if (showCancel) {
+            bodyText += '<button class="btn" id="dialog_cancel_button">'
+                + '<span class="btn-icon fa fa-times"></span>'
+                + PWM_MAIN.showString('Button_Cancel') + '</button>  ';
+        }
+        bodyText += buttonHtml;
+        bodyText += '</div>';
     }
 
     var dialogClassText = 'dialogBody';
     if (dialogClass) {
         dialogClassText += ' ' + dialogClass;
     }
-    if (showOk || showCancel) {
-        bodyText += '</div>';
-    }
-
     bodyText = '<div class="' + dialogClassText + '">' + bodyText + '</div>';
 
     if (html5Dialog) {
@@ -1173,9 +1173,6 @@ PWM_MAIN.messageDivFloatHandler = function() {
     }
 
     var doFloatDisplay = !(PWM_MAIN.elementInViewport(messageWrapperObj,false) || PWM_GLOBAL['messageStatus'] == '');
-    if (PWM_GLOBAL['setting_alwaysFloatMessages']) {
-        doFloatDisplay = PWM_GLOBAL['messageStatus'] != '';
-    }
 
     if (PWM_GLOBAL['message_scrollToggle'] != doFloatDisplay) {
         PWM_GLOBAL['message_scrollToggle'] = doFloatDisplay;
@@ -1541,6 +1538,10 @@ PWM_MAIN.IdleTimeoutHandler.initCountDownTimer = function(secondsRemaining) {
     });
 };
 
+PWM_MAIN.IdleTimeoutHandler.cancelCountDownTimer = function() {
+    PWM_GLOBAL['idle_suspendTimeout'] = true;
+}
+
 PWM_MAIN.IdleTimeoutHandler.resetIdleCounter = function() {
     PWM_MAIN.IdleTimeoutHandler.lastActivityTime = new Date();
     PWM_MAIN.IdleTimeoutHandler.closeIdleWarning();

+ 2 - 5
pwm/servlet/web/public/resources/themes/tulips/style.css

@@ -93,11 +93,8 @@ p {
 }
 
 #footer {
-    background-color: white;
-    color: #0a0a0a;
-    filter:alpha(opacity=75);
-    opacity: 0.75;
-
+    background-color: transparent;
+    color: white;
 }
 
 a {