Localize zxcvbn feedback
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 31 Jul 2020 10:14:13 +0000 (12:14 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 31 Jul 2020 10:14:13 +0000 (12:14 +0200)
com.woltlab.wcf/templates/accountManagement.tpl
com.woltlab.wcf/templates/newPassword.tpl
com.woltlab.wcf/templates/passwordStrengthLanguage.tpl [new file with mode: 0644]
com.woltlab.wcf/templates/register.tpl
syncTemplates.json
wcfsetup/install/files/acp/templates/passwordStrengthLanguage.tpl [new file with mode: 0644]
wcfsetup/install/files/acp/templates/userAdd.tpl
wcfsetup/install/files/js/WoltLabSuite/Core/Ui/User/PasswordStrength.js
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 06dd3b3467c2c085d3a6cac797c9ec23c1fa7593..291ce150b110fcf4168a361f39d54843dee65ce3 100644 (file)
                        {event name='changePasswordFields'}
                        
                        <script data-relocate="true">
-                               require(['WoltLabSuite/Core/Ui/User/PasswordStrength'], function (PasswordStrength) {
+                               require(['WoltLabSuite/Core/Ui/User/PasswordStrength', 'Language'], function (PasswordStrength, Language) {
+                                       {include file='passwordStrengthLanguage'}
+                                       
                                        var relatedInputs = [];
                                        if (elById('username')) relatedInputs.push(elById('username'));
                                        if (elById('email')) relatedInputs.push(elById('email'));
index d8261c9c753397b81e1a5031f939fdc224a759a5..2e9aa25a005e73c767459928bfd04d96dcf55db2 100644 (file)
@@ -37,7 +37,9 @@
                {event name='fields'}
                
                <script data-relocate="true">
-                       require(['WoltLabSuite/Core/Ui/User/PasswordStrength'], function (PasswordStrength) {
+                       require(['WoltLabSuite/Core/Ui/User/PasswordStrength', 'Language'], function (PasswordStrength, Language) {
+                               {include file='passwordStrengthLanguage'}
+                               
                                new PasswordStrength(elById('newPassword'), {
                                        staticDictionary: [
                                                '{$user->username|encodeJS}',
diff --git a/com.woltlab.wcf/templates/passwordStrengthLanguage.tpl b/com.woltlab.wcf/templates/passwordStrengthLanguage.tpl
new file mode 100644 (file)
index 0000000..a147d52
--- /dev/null
@@ -0,0 +1,29 @@
+Language.addObject({
+       'wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases': '{lang}wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase': '{lang}wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better': '{lang}wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern': '{lang}wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_repeat': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_repeat{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_sequence': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_sequence{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_recent_year': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_recent_year{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_associated_year': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_associated_year{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_date': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_date{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.start_upper': '{lang}wcf.user.password.zxcvbn.suggestions.start_upper{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.all_upper': '{lang}wcf.user.password.zxcvbn.suggestions.all_upper{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.reversed': '{lang}wcf.user.password.zxcvbn.suggestions.reversed{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.l33t': '{lang}wcf.user.password.zxcvbn.suggestions.l33t{/lang}',
+       'wcf.user.password.zxcvbn.warnings.straight_row': '{lang}wcf.user.password.zxcvbn.warnings.straight_row{/lang}',
+       'wcf.user.password.zxcvbn.warnings.short_keyboard_pattern': '{lang}wcf.user.password.zxcvbn.warnings.short_keyboard_pattern{/lang}',
+       'wcf.user.password.zxcvbn.warnings.repeat_single_char': '{lang}wcf.user.password.zxcvbn.warnings.repeat_single_char{/lang}',
+       'wcf.user.password.zxcvbn.warnings.repeat': '{lang}wcf.user.password.zxcvbn.warnings.repeat{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sequence': '{lang}wcf.user.password.zxcvbn.warnings.sequence{/lang}',
+       'wcf.user.password.zxcvbn.warnings.recent_year': '{lang}wcf.user.password.zxcvbn.warnings.recent_year{/lang}',
+       'wcf.user.password.zxcvbn.warnings.date': '{lang}wcf.user.password.zxcvbn.warnings.date{/lang}',
+       'wcf.user.password.zxcvbn.warnings.top_10': '{lang}wcf.user.password.zxcvbn.warnings.top_10{/lang}',
+       'wcf.user.password.zxcvbn.warnings.top_100': '{lang}wcf.user.password.zxcvbn.warnings.top_100{/lang}',
+       'wcf.user.password.zxcvbn.warnings.common': '{lang}wcf.user.password.zxcvbn.warnings.common{/lang}',
+       'wcf.user.password.zxcvbn.warnings.common_alike': '{lang}wcf.user.password.zxcvbn.warnings.common_alike{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sole_word': '{lang}wcf.user.password.zxcvbn.warnings.sole_word{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sole_name': '{lang}wcf.user.password.zxcvbn.warnings.sole_name{/lang}',
+       'wcf.user.password.zxcvbn.warnings.name': '{lang}wcf.user.password.zxcvbn.warnings.name{/lang}',
+});
index df27a72a6862df059cc26cbe10b93b5ef0f43206..82e871a32cae2e40a85197d07dcbeee0d7521fe8 100644 (file)
                        maxlength: {@REGISTER_USERNAME_MAX_LENGTH}
                });
                
-               require(['WoltLabSuite/Core/Ui/User/PasswordStrength'], function (PasswordStrength) {
+               require(['WoltLabSuite/Core/Ui/User/PasswordStrength', 'Language'], function (PasswordStrength, Language) {
+                       {include file='passwordStrengthLanguage'}
+                       
                        new PasswordStrength(elById('{@$randomFieldNames[password]}'), {
                                relatedInputs: [
                                        elById('{@$randomFieldNames[username]}'),
index 11db7532e8ec3be259f6d10aac8353f94f83bac1..a43b1152f6bfefa15581d3c909da1340f7415fa3 100644 (file)
@@ -70,6 +70,7 @@
     "mediaBBCodeTag",
     "mediaManager",
     "multipleLanguageInputJavascript",
+    "passwordStrengthLanguage",
     "radioButtonSearchableOptionType",
     "recaptcha",
     "scrollablePageCheckboxList",
diff --git a/wcfsetup/install/files/acp/templates/passwordStrengthLanguage.tpl b/wcfsetup/install/files/acp/templates/passwordStrengthLanguage.tpl
new file mode 100644 (file)
index 0000000..a147d52
--- /dev/null
@@ -0,0 +1,29 @@
+Language.addObject({
+       'wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases': '{lang}wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase': '{lang}wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better': '{lang}wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern': '{lang}wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_repeat': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_repeat{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_sequence': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_sequence{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_recent_year': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_recent_year{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_associated_year': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_associated_year{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.avoid_date': '{lang}wcf.user.password.zxcvbn.suggestions.avoid_date{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.start_upper': '{lang}wcf.user.password.zxcvbn.suggestions.start_upper{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.all_upper': '{lang}wcf.user.password.zxcvbn.suggestions.all_upper{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.reversed': '{lang}wcf.user.password.zxcvbn.suggestions.reversed{/lang}',
+       'wcf.user.password.zxcvbn.suggestions.l33t': '{lang}wcf.user.password.zxcvbn.suggestions.l33t{/lang}',
+       'wcf.user.password.zxcvbn.warnings.straight_row': '{lang}wcf.user.password.zxcvbn.warnings.straight_row{/lang}',
+       'wcf.user.password.zxcvbn.warnings.short_keyboard_pattern': '{lang}wcf.user.password.zxcvbn.warnings.short_keyboard_pattern{/lang}',
+       'wcf.user.password.zxcvbn.warnings.repeat_single_char': '{lang}wcf.user.password.zxcvbn.warnings.repeat_single_char{/lang}',
+       'wcf.user.password.zxcvbn.warnings.repeat': '{lang}wcf.user.password.zxcvbn.warnings.repeat{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sequence': '{lang}wcf.user.password.zxcvbn.warnings.sequence{/lang}',
+       'wcf.user.password.zxcvbn.warnings.recent_year': '{lang}wcf.user.password.zxcvbn.warnings.recent_year{/lang}',
+       'wcf.user.password.zxcvbn.warnings.date': '{lang}wcf.user.password.zxcvbn.warnings.date{/lang}',
+       'wcf.user.password.zxcvbn.warnings.top_10': '{lang}wcf.user.password.zxcvbn.warnings.top_10{/lang}',
+       'wcf.user.password.zxcvbn.warnings.top_100': '{lang}wcf.user.password.zxcvbn.warnings.top_100{/lang}',
+       'wcf.user.password.zxcvbn.warnings.common': '{lang}wcf.user.password.zxcvbn.warnings.common{/lang}',
+       'wcf.user.password.zxcvbn.warnings.common_alike': '{lang}wcf.user.password.zxcvbn.warnings.common_alike{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sole_word': '{lang}wcf.user.password.zxcvbn.warnings.sole_word{/lang}',
+       'wcf.user.password.zxcvbn.warnings.sole_name': '{lang}wcf.user.password.zxcvbn.warnings.sole_name{/lang}',
+       'wcf.user.password.zxcvbn.warnings.name': '{lang}wcf.user.password.zxcvbn.warnings.name{/lang}',
+});
index 6f72e996f9996eff8cb2aa1a41b9ef1dad368725..19289ed966884a8445e50e306f7ce31db81bfe8c 100644 (file)
                                                </dl>
                                                
                                                <script data-relocate="true">
-                                                       require(['WoltLabSuite/Core/Ui/User/PasswordStrength'], function (PasswordStrength) {
+                                                       require(['WoltLabSuite/Core/Ui/User/PasswordStrength', 'Language'], function (PasswordStrength, Language) {
+                                                               {include file='passwordStrengthLanguage'}
+                                                               
                                                                var relatedInputs = [];
                                                                if (elById('username')) relatedInputs.push(elById('username'));
                                                                if (elById('email')) relatedInputs.push(elById('email'));
index 76887c647bbea481ce9053ef5ba7f6ef5f7eb053..48900cbefe3a04557b3bb970d20747bfb71b4b21 100644 (file)
@@ -7,7 +7,7 @@
  * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
  * @module     WoltLabSuite/Core/Ui/User/PasswordStrength
  */
-define(['zxcvbn', 'Core'], function(zxcvbn, Core) {
+define(['zxcvbn', 'Core', 'Language'], function(zxcvbn, Core, Language) {
        "use strict";
        
        var STATIC_DICTIONARY = [];
@@ -52,6 +52,20 @@ define(['zxcvbn', 'Core'], function(zxcvbn, Core) {
                                staticDictionary: [],
                        }, options);
                        
+                       if (!this._options.feedbacker) {
+                               var phrases = Core.extend({}, zxcvbn.Feedback.default_phrases);
+                               for (var type in phrases) {
+                                       for (var phrase in phrases[type]) {
+                                               var languageItem = 'wcf.user.password.zxcvbn.' + type + '.' + phrase;
+                                               var value = Language.get(languageItem);
+                                               if (value !== languageItem) {
+                                                       phrases[type][phrase] = value;
+                                               }
+                                       }
+                               }
+                               this._options.feedbacker = new zxcvbn.Feedback(phrases);
+                       }
+                       
                        this._meter = createMeter({
                                min: 0,
                                max: 4,
@@ -86,6 +100,7 @@ define(['zxcvbn', 'Core'], function(zxcvbn, Core) {
                        // To bound runtime latency for really long passwords, consider sending zxcvbn() only
                        // the first 100 characters or so of user input.
                        var verdict = zxcvbn(this._input.value.substr(0, 100), dictionary);
+                       verdict.feedback = this._options.feedbacker.from_result(verdict);
                        
                        this._meter.value = verdict.score;
                        this._verdictResult.value = JSON.stringify(verdict);
index b2872c2b9a98f8e6ebade0fa6c685a72bc2bcbfb..5481343da909dc5bae3de467176c7ed62257c286 100644 (file)
@@ -4537,6 +4537,33 @@ Dateianhänge:
                <item name="wcf.user.style.description"><![CDATA[Stil der Benutzeroberfläche]]></item>
                <item name="wcf.user.username.description"><![CDATA[Der Benutzername muss mindestens {REGISTER_USERNAME_MIN_LENGTH} und darf maximal {REGISTER_USERNAME_MAX_LENGTH} Zeichen lang sein.]]></item>
                <item name="wcf.user.password.description"><![CDATA[Ein sicheres Kennwort sollte mindestens 10 Zeichen lang sein.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verwende{else}Verwenden Sie{/if} einige Wörter. {if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} gängige Phrasen.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase"><![CDATA[Sonderzeichen, Zahlen oder Großbuchstaben werden nicht benötigt.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Ergänze{else}Ergänzen Sie{/if} ein oder zwei weitere Worte. Unübliche Worte sind zu bevorzugen.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verwende{else}Verwenden Sie{/if} ein längeres und zufälligeres Muster auf der Tastatur.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_repeat"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} Wiederholungen.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_sequence"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} Sequenzen.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_recent_year"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} Jahreszahlen der letzten Jahre.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_associated_year"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} Jahreszahlen, die {if LANGUAGE_USE_INFORMAL_VARIANT}dir{else}Ihnen{/if} zugeordnet werden können.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_date"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Verweide{else}Vermeiden Sie{/if} Daten und Jahreszahlen, die {if LANGUAGE_USE_INFORMAL_VARIANT}dir{else}Ihnen{/if} zugeordnet werden können.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.start_upper"><![CDATA[Großbuchstaben zu Beginn erhöhen die Sicherheit nicht.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.all_upper"><![CDATA[Nur Großbuchstaben sind genau so einfach zu erraten, wie nur Kleinbuchstaben.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.reversed"><![CDATA[Umgekehrte Worte sind nicht viel schwieriger zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.l33t"><![CDATA[Vorhersehbare Ersetzungen, wie beispielsweise „@“ statt „a“, erhöhen die Sicherheit nicht.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.straight_row"><![CDATA[Geradlinige Sequenzen auf der Tastatur sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.short_keyboard_pattern"><![CDATA[Kurze Sequenzen auf der Tastatur sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.repeat_single_char"><![CDATA[Wiederholungen wie beispielsweise „aaa“ sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.repeat"><![CDATA[Wiederholungen wie beispielsweise „abcabcabc“ sind nicht viel schwieriger zu erraten als „abc“.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sequence"><![CDATA[Sequenzen wie „abc“ oder „6543“ sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.recent_year"><![CDATA[Kürzliche Jahreszahlen sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.date"><![CDATA[Daten sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.top_10"><![CDATA[Dies ist eines der 10 häufigsten Kennwörter.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.top_100"><![CDATA[Dies ist eines der 100 häufigsten Kennwörter.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.common"><![CDATA[Dies ist ein sehr häufiges Kennwort.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.common_alike"><![CDATA[Dies ist ähnlich zu einem sehr häufigen Kennwort.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sole_word"><![CDATA[Ein einzelnes Wort ist einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sole_name"><![CDATA[Alleinstehende Namen sind einfach zu erraten.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.name"><![CDATA[Häufige Namen sind einfach zu erraten.]]></item>
                <item name="wcf.user.lostPassword"><![CDATA[Kennwort vergessen]]></item>
                <item name="wcf.user.lostPassword.description"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Wenn du dein Kennwort vergessen hast, musst du entweder den Benutzernamen oder die E-Mail-Adresse angeben, die du in deinem Profil hinterlegt hast. Du kannst dabei nur eines der beiden Felder ausfüllen. Wenn du beide Daten nicht mehr weißt, wende dich bitte an den Administrator.{else}Wenn Sie Ihr Kennwort vergessen haben, müssen Sie entweder den Benutzernamen oder die E-Mail-Adresse angeben, die Sie in Ihrem Profil hinterlegt haben. Sie können dabei nur eines der beiden Felder ausfüllen. Wenn Sie beide Daten nicht mehr wissen, wenden Sie sich bitte an den Administrator.{/if}]]></item>
                <item name="wcf.user.lostPassword.email.error.notFound"><![CDATA[Es wurde kein Benutzer mit der E-Mail-Adresse: „{$email}“ gefunden.]]></item>
index 74915c226c164f8ec001e4581302eb9dada6b401..ad64de12a9c3d51bed465b40f15ab08d330c2d4b 100644 (file)
@@ -4538,6 +4538,33 @@ Attachments:
                <item name="wcf.user.style.description"><![CDATA[Forces a specific style instead of the default one.]]></item>
                <item name="wcf.user.username.description"><![CDATA[Username must be {REGISTER_USERNAME_MIN_LENGTH} up to {REGISTER_USERNAME_MAX_LENGTH} characters long.]]></item>
                <item name="wcf.user.password.description"><![CDATA[A secure password should be at least 10 characters long.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.use_words_avoid_common_phrases"><![CDATA[Use a few words, avoid common phrases.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.no_need_for_symbols_digits_uppercase"><![CDATA[No need for symbols, digits, or uppercase letters.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.add_word_uncommon_better"><![CDATA[Add another word or two. Uncommon words are better.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.use_longer_keyboard_pattern"><![CDATA[Use a longer keyboard pattern with more turns.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_repeat"><![CDATA[Avoid repeated words and characters.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_sequence"><![CDATA[Avoid sequences.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_recent_year"><![CDATA[Avoid recent years.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_associated_year"><![CDATA[Avoid years that are associated with you.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.avoid_date"><![CDATA[Avoid dates and years that are associated with you.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.start_upper"><![CDATA[Capitalization does nott help very much.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.all_upper"><![CDATA[All-uppercase is almost as easy to guess as all-lowercase.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.reversed"><![CDATA[Reversed words aren’t much harder to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.suggestions.l33t"><![CDATA[Predictable substitutions like “@” instead of “a” don't help very much.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.straight_row"><![CDATA[Straight rows of keys are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.short_keyboard_pattern"><![CDATA[Short keyboard patterns are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.repeat_single_char"><![CDATA[Repeats like “aaa” are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.repeat"><![CDATA[Repeats like “abcabcabc” are only slightly harder to guess than “abc”.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sequence"><![CDATA[Sequences like “abc” or “6543” are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.recent_year"><![CDATA[Recent years are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.date"><![CDATA[Dates are often easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.top_10"><![CDATA[This is a top-10 common password.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.top_100"><![CDATA[This is a top-100 common password.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.common"><![CDATA[This is a very common password.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.common_alike"><![CDATA[This is similar to a commonly used password.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sole_word"><![CDATA[A word by itself is easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.sole_name"><![CDATA[Names and surnames by themselves are easy to guess.]]></item>
+               <item name="wcf.user.password.zxcvbn.warnings.name"><![CDATA[Common names and surnames are easy to guess.]]></item>
                <item name="wcf.user.lostPassword"><![CDATA[Lost Password]]></item>
                <item name="wcf.user.lostPassword.description"><![CDATA[You must provide your username or email address to request a new password. Contact the site’s administrator if you need assistance.]]></item>
                <item name="wcf.user.lostPassword.email.error.notFound"><![CDATA[“{$email}” is not used by any account.]]></item>