Show nicer error message if allocating the MFA setup fails
[GitHub/WoltLab/WCF.git] / wcfsetup / install / lang / en.xml
index cc13375921f2c461f5aaa5b1c2163f2c2b9d1597..6eadf5e7e144b32688762aa2ff954ef6199a6906 100644 (file)
@@ -1,9 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/2019/language.xsd" languagecode="en" languagename="English" countrycode="gb">
+<language xmlns="http://www.woltlab.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.woltlab.com http://www.woltlab.com/XSD/5.4/language.xsd" languagecode="en" languagename="English" countrycode="gb">
        <category name="wcf.acl">
                <item name="wcf.acl.access"><![CDATA[Restricted Access]]></item>
                <item name="wcf.acl.access.grant"><![CDATA[Allow Access]]></item>
+               <item name="wcf.acl.access.deny"><![CDATA[Deny Access]]></item>
                <item name="wcf.acl.access.granted"><![CDATA[Granted Access for Users and User-Groups]]></item>
+               <item name="wcf.acl.access.denied"><![CDATA[Denied Access for Users and User-Groups]]></item>
+               <item name="wcf.acl.access.invertPermissions"><![CDATA[Invert Permissions]]></item>
+               <item name="wcf.acl.access.invertPermissions.description"><![CDATA[If selected, all users except selected users and user groups are allowed to see the object by default.]]></item>
                <item name="wcf.acl.allowAll"><![CDATA[Content Can be Accessed by Everyone]]></item>
                <item name="wcf.acl.option.deny"><![CDATA[Deny]]></item>
                <item name="wcf.acl.option.fullAccess"><![CDATA[Full Access]]></item>
@@ -33,7 +37,6 @@
                <item name="wcf.acp.ad.conditions.pointInTime.description"><![CDATA[Sets the point in time at which the ad is displayed.]]></item>
                <item name="wcf.acp.ad.conditions.user"><![CDATA[Active user]]></item>
                <item name="wcf.acp.ad.conditions.user.description"><![CDATA[The active user has to fulfill the following conditions to see the ad.]]></item>
-               <item name="wcf.acp.ad.delete.confirmMessage"><![CDATA[Do you really want to delete the ad <span class="confirmationObject">{$ad->adName}</span>?]]></item>
                <item name="wcf.acp.ad.edit"><![CDATA[Edit Ad]]></item>
                <item name="wcf.acp.ad.isDisabled"><![CDATA[Disable Ad]]></item>
                <item name="wcf.acp.ad.list"><![CDATA[Ads]]></item>
                <item name="wcf.acp.application.edit"><![CDATA[Edit Application]]></item>
                <item name="wcf.acp.application.edit.title"><![CDATA[Edit Application: “<a href="{link controller='Package' id=$application->packageID}{/link}">{$application->getPackage()->getName()}</a>”]]></item>
                <item name="wcf.acp.application.landingPage"><![CDATA[Entry Page]]></item>
+               <item name="wcf.acp.application.landingPage.default"><![CDATA[(Default)]]></item>
                <item name="wcf.acp.application.landingPage.description"><![CDATA[Optional: This page will be shown when a user is navigating to this app.]]></item>
                <item name="wcf.acp.application.list"><![CDATA[Installed Applications]]></item>
+               <item name="wcf.acp.application.multiDomain"><![CDATA[<p style="font-size: 18px">The support for setups with multiple domains is discontinued.</p>
+<p><br></p>
+<p>It is strongly recommended to consolidate all apps on a shared domain, please adjust the domain and path settings for these apps:</p>
+<ul class="nativeList">
+       {foreach from=$applicationList item=application}
+               <li><a href="{link controller='ApplicationEdit' id=$application->packageID}{/link}">{$application->getPackage()->getName()}</a></li>
+       {/foreach}
+</ul>]]></item>
+               <item name="wcf.acp.application.management.domain"><![CDATA[Domain Configuration]]></item>
+               <item name="wcf.acp.application.management.domainName"><![CDATA[Domain]]></item>
+               <item name="wcf.acp.application.management.domainName.description"><![CDATA[Provide the domain name excluding any protocol or path, for example “www.example.com”.]]></item>
+               <item name="wcf.acp.application.management.cookieDomain"><![CDATA[Cookie Domain]]></item>
+               <item name="wcf.acp.application.management.cookieDomain.description"><![CDATA[The cookie domain must match the provided domain. When in doubt simply provide the same value that you have entered for “Domain”.]]></item>
        </category>
        <category name="wcf.acp.article">
                <item name="wcf.acp.article.add"><![CDATA[Add Article]]></item>
                <item name="wcf.acp.bbcode.buttonLabel"><![CDATA[Button Label]]></item>
                <item name="wcf.acp.bbcode.className"><![CDATA[PHP Class Name]]></item>
                <item name="wcf.acp.bbcode.className.error.notFound"><![CDATA[Unable to find specified class.]]></item>
-               <item name="wcf.acp.bbcode.delete.sure"><![CDATA[Do you really want to delete the BBCode <span class="confirmationObject">[{$bbcode->bbcodeTag}]</span>?]]></item>
                <item name="wcf.acp.bbcode.edit"><![CDATA[Edit BBCode]]></item>
                <item name="wcf.acp.bbcode.htmlClose"><![CDATA[Closing HTML tag]]></item>
                <item name="wcf.acp.bbcode.htmlOpen"><![CDATA[Opening HTML tag]]></item>
                <item name="wcf.acp.bbcode.isBlockElement"><![CDATA[BBCode represents a block element]]></item>
-               <item name="wcf.acp.bbcode.isBlockElement.description"><![CDATA[Block elements are treated differently when processed. They can contain line breaks and paragraphs, and generally take up the entire available width. Common examples for block elements include quotes and lists.<br>Heads up! You must not set this option for inline elements such as bold or links.]]></item>
+               <item name="wcf.acp.bbcode.isBlockElement.description"><![CDATA[Block elements are treated differently when processed. They can contain line breaks and paragraphs, and generally take up the entire available width. Common examples for block elements include quotes and lists.<br><strong>Attention</strong>: You must not set this option for inline elements such as bold or links.]]></item>
                <item name="wcf.acp.bbcode.isSourceCode"><![CDATA[Content represents source code]]></item>
                <item name="wcf.acp.bbcode.isSourceCode.description"><![CDATA[Disables conversion of BBCodes and smilies.]]></item>
                <item name="wcf.acp.bbcode.list"><![CDATA[BBCodes]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.add"><![CDATA[Add Media Provider]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.className"><![CDATA[PHP Class Name]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.className.error.notFound"><![CDATA[Unable to find specified class.]]></item>
-               <item name="wcf.acp.bbcode.mediaProvider.delete.sure"><![CDATA[Do you really want to delete the media provider <span class="confirmationObject">{$mediaProvider->title}</span>?]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.edit"><![CDATA[Edit Media Provider]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.html"><![CDATA[HTML Code]]></item>
                <item name="wcf.acp.bbcode.mediaProvider.html.description"><![CDATA[{literal}Enter the media’s HTML code here. Variables are recognized as <kbd>{$variable}</kbd> and will be replaced with the regular expression’s matching named group.<br>
                <item name="wcf.acp.box.content"><![CDATA[Content]]></item>
                <item name="wcf.acp.box.contents"><![CDATA[Contents]]></item>
                <item name="wcf.acp.box.cssClassName"><![CDATA[CSS Class Name]]></item>
-               <item name="wcf.acp.box.delete.confirmMessage"><![CDATA[Do you really want to delete the box <span class="confirmationObject">{$box->name}</span>?]]></item>
                <item name="wcf.acp.box.edit"><![CDATA[Edit Box]]></item>
                <item name="wcf.acp.box.image"><![CDATA[Box Image]]></item>
                <item name="wcf.acp.box.i18n"><![CDATA[Multilingualism]]></item>
                <item name="wcf.acp.cache.list.perm"><![CDATA[Permissions]]></item>
                <item name="wcf.acp.cache.list.size"><![CDATA[Size]]></item>
                <item name="wcf.acp.cache.source.type.DiskCacheSource"><![CDATA[Filesystem]]></item>
-               <item name="wcf.acp.cache.source.type.MemcachedCacheSource"><![CDATA[Memcached]]></item>
+               <item name="wcf.acp.cache.source.type.MemcachedCacheSource"><![CDATA[Memcached (Not Recommended)]]></item>
                <item name="wcf.acp.cache.source.type.RedisCacheSource"><![CDATA[Redis]]></item>
                <item name="wcf.acp.cache.type.data"><![CDATA[Data]]></item>
                <item name="wcf.acp.cache.type.language"><![CDATA[Languages]]></item>
                <item name="wcf.acp.captcha.question.answers"><![CDATA[Answers]]></item>
                <item name="wcf.acp.captcha.question.answers.description"><![CDATA[Answers beginning and ending with “~” will be interpreted as regular expressions. Enter one answer per line.]]></item>
                <item name="wcf.acp.captcha.question.answers.error.invalidRegex"><![CDATA[The regular expression “{$invalidRegex}” is invalid.]]></item>
-               <item name="wcf.acp.captcha.question.delete.confirmMessage"><![CDATA[Do you really want to delete the question <span class="confirmationObject">{$question->getQuestion()}</span>?]]></item>
                <item name="wcf.acp.captcha.question.edit"><![CDATA[Edit Captcha Question]]></item>
                <item name="wcf.acp.captcha.question.isDisabled"><![CDATA[Disable Captcha Question]]></item>
                <item name="wcf.acp.captcha.question.list"><![CDATA[Captcha Questions]]></item>
                <item name="wcf.acp.cronjob.execute"><![CDATA[Run Cronjob]]></item>
                <item name="wcf.acp.cronjob.className.error.doesNotExist"><![CDATA[Unable to find the specified class.]]></item>
                <item name="wcf.acp.cronjob.timing.error.invalid"><![CDATA[Invalid time format.]]></item>
-               <item name="wcf.acp.cronjob.delete.sure"><![CDATA[Do you really want to delete the cronjob <span class="confirmationObject">{$cronjob->getDescription()}</span>?]]></item>
                <item name="wcf.acp.cronjob.log"><![CDATA[Cronjob Log]]></item>
                <item name="wcf.acp.cronjob.log.clear"><![CDATA[Clear Protocol]]></item>
                <item name="wcf.acp.cronjob.log.clear.confirm"><![CDATA[Do you really want to clear the cronjob log?]]></item>
        <category name="wcf.acp.devtools">
                <item name="wcf.acp.devtools.project.add"><![CDATA[Add Project]]></item>
                <item name="wcf.acp.devtools.project.edit"><![CDATA[Edit Project]]></item>
-               <item name="wcf.acp.devtools.project.delete.confirmMessage"><![CDATA[Do you really want to delete the project <span class="confirmationObject">{$object->name}</span>?]]></item>
-               <item name="wcf.acp.devtools.project.introduction"><![CDATA[Please read the <a href="https://docs.woltlab.com/5.3/getting-started_quick-start.html#developer-tools" class="externalURL">usage instructions</a> in the developer documentation.]]></item>
+               <item name="wcf.acp.devtools.project.introduction"><![CDATA[Please read the <a href="https://docs.woltlab.com/latest/getting-started/#developer-tools" class="externalURL">usage instructions</a> in the developer documentation.]]></item>
                <item name="wcf.acp.devtools.project.list"><![CDATA[Projects]]></item>
                <item name="wcf.acp.devtools.project.name"><![CDATA[Name]]></item>
                <item name="wcf.acp.devtools.project.name.error.notUnique"><![CDATA[The name is already used by another project.]]></item>
                <item name="wcf.acp.devtools.project.pip.entry.delete.confirmMessage"><![CDATA[Do you really want to delete the entry?]]></item>
                <item name="wcf.acp.devtools.project.pip.entry.delete.addDeleteInstruction"><![CDATA[Add delete instruction]]></item>
                <item name="wcf.acp.devtools.project.pip.entry.delete.addDeleteInstruction.description"><![CDATA[The entry will not only be deleted from database and its installation instruction removed, but a delete instruction will also be explicitly added.]]></item>
-               <item name="wcf.acp.devtools.project.edit.error.brokenPath"><![CDATA[There is no <kbd>package.xml</kbd> in the given directory. The package files have either been deleted or moved.]]></item>
+               <item name="wcf.acp.devtools.project.edit.error.brokenPath"><![CDATA[There is no <kbd>package.xml</kbd> in the entered directory. The package files have either been deleted or moved.]]></item>
                <item name="wcf.acp.devtools.project.edit.warning.missingElements"><![CDATA[The following information is missing from the <kbd>package.xml</kbd> file: {implode from=$missingElements item=missingElement}<kbd>{$missingElement}</kbd>{/implode}.]]></item>
                <item name="wcf.acp.devtools.project.license"><![CDATA[License]]></item>
                <item name="wcf.acp.devtools.missingLanguageItem.languageID"><![CDATA[Language]]></item>
                <item name="wcf.acp.devtools.missingLanguageItem.showStackTrace"><![CDATA[Show Stacktrace]]></item>
                <item name="wcf.acp.devtools.missingLanguageItem.clearLog"><![CDATA[Delete all entries]]></item>
                <item name="wcf.acp.devtools.missingLanguageItem.clearLog.confirmMessage"><![CDATA[Do you really want to delete all entries?]]></item>
+               <item name="wcf.acp.devtools.missingLanguageItem.clearExistingLog"><![CDATA[Delete existing entries]]></item>
+               <item name="wcf.acp.devtools.missingLanguageItem.clearExistingLog.confirmMessage"><![CDATA[Do you really want to delete all entries for which the phrases exist now?]]></item>
                <item name="wcf.acp.devtools.missingLanguageItem.stackTrace.toggleOutputFormat"><![CDATA[Toggle line breaks]]></item>
        </category>
        <category name="wcf.acp.email">
                <item name="wcf.acp.email.smtp.test.error.hostUnknown"><![CDATA[The server is not responding.]]></item>
                <item name="wcf.acp.email.smtp.test.error.notTlsSupport"><![CDATA[The server does not support encryption.]]></item>
                <item name="wcf.acp.email.smtp.test.error.tlsFailed"><![CDATA[Unable to establish a secure connection.]]></item>
+               <item name="wcf.acp.email.log"><![CDATA[Emails Sent]]></item>
+               <item name="wcf.acp.email.log.subject"><![CDATA[Subject]]></item>
+               <item name="wcf.acp.email.log.time"><![CDATA[Created]]></item>
+               <item name="wcf.acp.email.log.status"><![CDATA[Status]]></item>
+               <item name="wcf.acp.email.log.status.success"><![CDATA[Sent]]></item>
+               <item name="wcf.acp.email.log.status.transient_failure"><![CDATA[Transient Failure]]></item>
+               <item name="wcf.acp.email.log.status.permanent_failure"><![CDATA[Ultimately Failed]]></item>
+               <item name="wcf.acp.email.log.status.new"><![CDATA[Pending]]></item>
+               <item name="wcf.acp.email.log.status.discarded"><![CDATA[Discarded]]></item>
+               <item name="wcf.acp.email.log.statusMessage.title"><![CDATA[Status Message]]></item>
        </category>
        <category name="wcf.acp.exceptionLog">
                <item name="wcf.acp.exceptionLog"><![CDATA[Logged errors]]></item>
@@ -643,7 +666,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
        </category>
        <category name="wcf.acp.group">
                <item name="wcf.acp.group.add"><![CDATA[Add User Group]]></item>
-               <item name="wcf.acp.group.delete.sure"><![CDATA[Do you really want to delete the user group <span class="confirmationObject">{$group->getTitle()}</span>?]]></item>
                <item name="wcf.acp.group.edit"><![CDATA[Edit User Group]]></item>
                <item name="wcf.acp.group.option.editingOption"><![CDATA[Edit User Group Option]]></item>
                <item name="wcf.acp.group.edit.warning.selfIsMember"><![CDATA[Warning! You are a member of this user group, any changes could result in yourself being locked out of the Administration Control Panel.]]></item>
@@ -714,7 +736,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.option.category.user.message.attachment"><![CDATA[Attachments]]></item>
                <item name="wcf.acp.group.option.user.attachment.maxSize"><![CDATA[Maximum Attachment File Size]]></item>
                <item name="wcf.acp.group.option.user.attachment.allowedExtensions"><![CDATA[Allowed Attachment File Extensions]]></item>
-               <item name="wcf.acp.group.option.user.attachment.allowedExtensions.description"><![CDATA[Enter one extension per line.]]></item>
                <item name="wcf.acp.group.option.user.attachment.maxCount"><![CDATA[Maximum Attachments per Message]]></item>
                <item name="wcf.acp.group.option.user.attachment.maxCount.description"><![CDATA[The maximum number of attachments allowed per message.]]></item>
                <item name="wcf.acp.group.option.category.admin.attachment"><![CDATA[Attachments]]></item>
@@ -723,7 +744,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.option.admin.content.bbcode.canManageBBCode"><![CDATA[Can manage BBCodes]]></item>
                <item name="wcf.acp.group.option.category.admin.content.smiley"><![CDATA[Smilies]]></item>
                <item name="wcf.acp.group.option.admin.content.smiley.canManageSmiley"><![CDATA[Can manage smilies]]></item>
-               <item name="wcf.acp.group.option.user.comment.floodControlTime"><![CDATA[Delay for Comments]]></item>
+               <item name="wcf.acp.group.option.user.comment.floodControlTime"><![CDATA[Delay between Comments]]></item>
                <item name="wcf.acp.group.option.user.comment.floodControlTime.description"><![CDATA[Seconds required between creating two comments or replies. Use 0 to disable.]]></item>
                <item name="wcf.acp.group.option.user.comment.disallowedBBCodes"><![CDATA[Disallowed BBCodes]]></item>
                <item name="wcf.acp.group.option.user.comment.disallowedBBCodes.description"><![CDATA[Selected BBCodes <em>cannot</em> be used by the users of this user group.]]></item>
@@ -786,7 +807,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.option.admin.management.canRebuildData"><![CDATA[Can rebuild data]]></item>
                <item name="wcf.acp.group.description"><![CDATA[Description]]></item>
                <item name="wcf.acp.group.button.choose"><![CDATA[Choose User Group]]></item>
-               <item name="wcf.acp.group.option.error.validationFailed"><![CDATA[You have entered an invalid value.]]></item>
+               <item name="wcf.acp.group.option.error.validationFailed"><![CDATA[The entered value is invalid.]]></item>
                <item name="wcf.acp.group.option.admin.user.canDisableAvatar"><![CDATA[Can block avatars]]></item>
                <item name="wcf.acp.group.option.admin.user.canDisableCoverPhoto"><![CDATA[Can block cover photos]]></item>
                <item name="wcf.acp.group.option.admin.user.canDisableSignature"><![CDATA[Can block signatures]]></item>
@@ -796,7 +817,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.assignment.button.list"><![CDATA[Automatic Assignments]]></item>
                <item name="wcf.acp.group.assignment.conditions"><![CDATA[Conditions]]></item>
                <item name="wcf.acp.group.assignment.conditions.description"><![CDATA[The users need to fulfill the following conditions to automatically be added to the user group.]]></item>
-               <item name="wcf.acp.group.assignment.delete.confirmMessage"><![CDATA[Do you really want to delete the automatic user group assignment <span class="confirmationObject">{$assignment->title}</span>?]]></item>
                <item name="wcf.acp.group.assignment.edit"><![CDATA[Edit User Group Automatic Assignment]]></item>
                <item name="wcf.acp.group.assignment.error.noConditions"><![CDATA[You have not provided any conditions yet.]]></item>
                <item name="wcf.acp.group.assignment.list"><![CDATA[Automatic User Group Assignments]]></item>
@@ -869,7 +889,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.option.category.user.message.contactForm"><![CDATA[Contact Form]]></item>
                <item name="wcf.acp.group.option.user.contactForm.attachment.maxSize"><![CDATA[Maximum Attachment File Size]]></item>
                <item name="wcf.acp.group.option.user.contactForm.attachment.allowedExtensions"><![CDATA[Allowed Attachment File Extensions]]></item>
-               <item name="wcf.acp.group.option.user.contactForm.attachment.allowedExtensions.description"><![CDATA[Enter one extension per line.]]></item>
                <item name="wcf.acp.group.option.user.contactForm.attachment.maxCount"><![CDATA[Maximum Attachments per Message]]></item>
                <item name="wcf.acp.group.option.user.profile.canEditUserProfile"><![CDATA[Can edit their profile]]></item>
                <item name="wcf.acp.group.option.user.profile.canHideOnlineStatus"><![CDATA[Can hide their online status]]></item>
@@ -877,10 +896,14 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.group.type.owner"><![CDATA[Owner]]></item>
                <item name="wcf.acp.group.type.owner.description"><![CDATA[The owner group features a few irrevocable permissions and is protected from edits by other groups, only the owner group can edit itself. Members of this group can add other users to this group, but cannot remove themselves.]]></item>
                <item name="wcf.acp.group.ownerGroupPermission"><![CDATA[The owner group always has this permission, it cannot be revoked.]]></item>
-               <item name="wcf.acp.group.missingOwnerGroup"><![CDATA[No owner group has been configured yet, <a href="{link controller='UserGroupPromoteOwner'}{/link}">please set it up now</a>.]]></item>
-               <item name="wcf.acp.group.promoteOwner"><![CDATA[Set Up the Owner Group]]></item>
-               <item name="wcf.acp.group.promoteOwner.group"><![CDATA[Select the owner group]]></item>
-               <item name="wcf.acp.group.promoteOwner.warning"><![CDATA[The owner group cannot be modified once it has been set up. This group has special privileges and is protected from modifications by any other group, its members cannot be banned.]]></item>
+               <item name="wcf.acp.group.option.user.signature.attachment.canUpload"><![CDATA[Can Upload Attachments]]></item>
+               <item name="wcf.acp.group.option.user.signature.attachment.maxSize"><![CDATA[Maximum Attachment File Size]]></item>
+               <item name="wcf.acp.group.option.user.signature.attachment.allowedExtensions"><![CDATA[Allowed Attachment File Extensions]]></item>
+               <item name="wcf.acp.group.option.user.signature.attachment.maxCount"><![CDATA[Maximum Attachments]]></item>
+               <item name="wcf.acp.group.requireMultifactor"><![CDATA[Require Multi-factor Authentication]]></item>
+               <item name="wcf.acp.group.requireMultifactor.description"><![CDATA[Users that are members of this user group may not disable multi-factor authentication. They will also be required to set up multi-factor authentication before they may enter protected areas.]]></item>
+               <item name="wcf.acp.group.option.admin.user.canExportGdprData"><![CDATA[Can export personal data (GDPR)]]></item>
+               <item name="wcf.acp.group.option.admin.user.canExportGdprData.description"><![CDATA[The export according to the European General Data Protection Regulation (GDPR) contains detailed personal data of the respective user. The export <strong>will not</strong> be filtered according to the administrator’s permissions and may contain information that would be inaccessible otherwise.]]></item>
        </category>
        <category name="wcf.acp.index">
                <item name="wcf.acp.index.credits"><![CDATA[About WoltLab Suite&trade;]]></item>
@@ -920,19 +943,18 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.index.tinyBuild"><![CDATA[The accelerated guest view improves the page responsiveness and loading times for both visitors and search engines alike, please consider <a href="{link controller='Option' id=1 optionName="visitor_use_tiny_build"}#category_module.system{/link}">enabling it</a>.]]></item>
                <item name="wcf.acp.index.recaptchaWithoutKey"><![CDATA[Using reCAPTCHA without an individual website key is no longer supported by Google.<br><br>For further use you need to <a href="{$recaptchaKeyLink}">provide a key in your options</a>, please follow the instructions below the input field to obtain a key.]]></item>
                <item name="wcf.acp.index.missingLanguageItems"><![CDATA[Missing language items have been detected (last time: {@$missingLanguageItemsMTime|time}). Check the <a href="{link controller='DevtoolsMissingLanguageItemList'}{/link}">list of missing phrases</a> for more information.]]></item>
+               <item name="wcf.acp.index.nonInnoDbSearch"><![CDATA[Not all tables are using the InnoDB storage engine. You can find details in the <a href="{link controller='SystemCheck'}{/link}">System Check</a>.]]></item>
        </category>
        <category name="wcf.acp.label">
                <item name="wcf.acp.label.add"><![CDATA[Add Label]]></item>
                <item name="wcf.acp.label.cssClassName"><![CDATA[CSS Class Name]]></item>
                <item name="wcf.acp.label.cssClassName.error.invalid"><![CDATA[The entered CSS class name is invalid.]]></item>
                <item name="wcf.acp.label.defaultValue"><![CDATA[Label]]></item>
-               <item name="wcf.acp.label.delete.sure"><![CDATA[Do you really want to delete the label <span class="confirmationObject">{$label}</span>?]]></item>
                <item name="wcf.acp.label.edit"><![CDATA[Edit Label]]></item>
                <item name="wcf.acp.label.error.noGroups"><![CDATA[Please <a href="{link controller='LabelGroupAdd'}{/link}">add a label group</a> before creating labels.]]></item>
                <item name="wcf.acp.label.group"><![CDATA[Label Group]]></item>
                <item name="wcf.acp.label.group.add"><![CDATA[Add Label Group]]></item>
                <item name="wcf.acp.label.group.category.connect"><![CDATA[Availability]]></item>
-               <item name="wcf.acp.label.group.delete.sure"><![CDATA[Do you really want to delete the label group <span class="confirmationObject">{$group->getTitle()}</span>?]]></item>
                <item name="wcf.acp.label.group.edit"><![CDATA[Edit Label Group]]></item>
                <item name="wcf.acp.label.group.error.invalid"><![CDATA[The selected label group is invalid.]]></item>
                <item name="wcf.acp.label.group.forceSelection"><![CDATA[Force selection of a label]]></item>
@@ -950,13 +972,12 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
        <category name="wcf.acp.language">
                <item name="wcf.acp.language.add"><![CDATA[Add Language]]></item>
                <item name="wcf.acp.language.add.languageCode.error.notUnique"><![CDATA[The language code is already in use by an installed language.]]></item>
-               <item name="wcf.acp.language.add.source"><![CDATA[Origin]]></item>
+               <item name="wcf.acp.language.add.source"><![CDATA[Blueprint]]></item>
                <item name="wcf.acp.language.code"><![CDATA[ISO Language-Code]]></item>
                <item name="wcf.acp.language.code.description"><![CDATA[Please enter the <strong>ISO 639-1</strong> language code, you can look up the language code at <a href="https://en.wikipedia.org/wiki/ISO_639-1" class="externalURL">https://en.wikipedia.org/wiki/ISO_639-1</a>.]]></item>
                <item name="wcf.acp.language.countryCode"><![CDATA[ISO Country-Code]]></item>
                <item name="wcf.acp.language.countryCode.description"><![CDATA[Please enter the <strong>ISO 3166-1</strong> country code, you can look up the country code at <a href="https://en.wikipedia.org/wiki/ISO_3166-1" class="externalURL">https://en.wikipedia.org/wiki/ISO_3166-1</a>.]]></item>
                <item name="wcf.acp.language.customVariables"><![CDATA[Custom Phrases]]></item>
-               <item name="wcf.acp.language.delete.sure"><![CDATA[Do you really want to delete the language <span class="confirmationObject">{$language->languageName}</span>?]]></item>
                <item name="wcf.acp.language.edit"><![CDATA[Edit Language]]></item>
                <item name="wcf.acp.language.export"><![CDATA[Export Language]]></item>
                <item name="wcf.acp.language.export.allPackages"><![CDATA[All Packages]]></item>
@@ -985,7 +1006,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.language.item.customValues"><![CDATA[Customized values]]></item>
                <item name="wcf.acp.language.item.disabledCustomValues"><![CDATA[Disabled customized values]]></item>
                <item name="wcf.acp.language.name.description"><![CDATA[Language Name]]></item>
-               <item name="wcf.acp.language.add.source.description"><![CDATA[The selected language will be used as origin, all phrases will be copied into the new language.]]></item>
+               <item name="wcf.acp.language.add.source.description"><![CDATA[If the uploaded language file contains a completely new language the selected language will be used as a blueprint. Any missing phrases will be copied from the blueprint into the new language.]]></item>
                <item name="wcf.acp.language.item.oldValue"><![CDATA[Original Content]]></item>
                <item name="wcf.acp.language.item.oldValue.description"><![CDATA[Your custom value was based on the original content that has changed{if $item->languageCustomItemDisableTime} on {$item->languageCustomItemDisableTime|date}{/if}.]]></item>
                <item name="wcf.acp.language.item.recentlyDisabledCustomValues"><![CDATA[Recently disabled customized values (past 7 days)]]></item>
@@ -1008,6 +1029,8 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.language.item.languageCategory.description"><![CDATA[The entered language category identifier is used to group phrases.]]></item>
                <item name="wcf.acp.language.item.languageCategory.error.notUnique"><![CDATA[The entered identifier is already used by an existing language category.]]></item>
                <item name="wcf.acp.language.item.languageCategory.error.tooFewSegments"><![CDATA[The entered category contains {#$segmentCount} segment{if $segmentCount > 1}s{/if}.]]></item>
+               <item name="wcf.acp.language.add.package"><![CDATA[Package]]></item>
+               <item name="wcf.acp.language.add.package.description"><![CDATA[The imported phrases will be assigned to the selected package.]]></item>
        </category>
        <category name="wcf.acp.masterPassword">
                <item name="wcf.acp.masterPassword"><![CDATA[Master Password]]></item>
@@ -1021,6 +1044,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.masterPassword.example.set"><![CDATA[Use Suggestion]]></item>
                <item name="wcf.acp.masterPassword.init"><![CDATA[Set Master Password]]></item>
                <item name="wcf.acp.masterPassword.init.description"><![CDATA[The master password is the last line of defense, protecting both critical settings and sensitive data. One should choose a rather strong password which is neither known to any 3rd party person nor re-used on other web pages.]]></item>
+               <item name="wcf.acp.masterPassword.enter.deprecated"><![CDATA[Support for the master password is discouraged and will be removed in a future version without further notice. The <a href="{link controller='AccountSecurity' forceFrontend=true application='wcf'}#section_multifactor{/link}">Multi-factor Authentication</a> protects accounts more reliably and in all areas. If desired, specific user groups can be required to set up multi-factor authentication, before they are able to enter sensitive areas, such as the Administration Control Panel.]]></item>
        </category>
        <category name="wcf.acp.menu">
                <item name="wcf.acp.menu.link.management"><![CDATA[Management]]></item>
@@ -1141,11 +1165,10 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.menu.link.article.category.add"><![CDATA[Add Category]]></item>
                <item name="wcf.acp.menu.link.maintenance.sitemap"><![CDATA[Sitemaps]]></item>
                <item name="wcf.acp.menu.add"><![CDATA[Add Menu]]></item>
-               <item name="wcf.acp.menu.delete.confirmMessage"><![CDATA[Do you really want to delete the menu <span class="confirmationObject">{$menu->getTitle()}</span>?]]></item>
                <item name="wcf.acp.menu.edit"><![CDATA[Edit Menu]]></item>
                <item name="wcf.acp.menu.list"><![CDATA[Menus]]></item>
                <item name="wcf.acp.menu.item.add"><![CDATA[Add Menu Item]]></item>
-               <item name="wcf.acp.menu.item.delete.confirmMessage"><![CDATA[Do you really want to delete the menu item <span class="confirmationObject">{$menuItemNode->getTitle()}</span>?]]></item>
+               <item name="wcf.acp.menu.item.action.description"><![CDATA[Menu: {$menu->getTitle()}]]></item>
                <item name="wcf.acp.menu.item.edit"><![CDATA[Edit Menu Item]]></item>
                <item name="wcf.acp.menu.item.externalURL"><![CDATA[External URL]]></item>
                <item name="wcf.acp.menu.item.isDisabled"><![CDATA[Disable menu item]]></item>
@@ -1178,6 +1201,8 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.menu.link.language.item.add"><![CDATA[Add Phrase]]></item>
                <item name="wcf.acp.menu.link.systemCheck"><![CDATA[System Check]]></item>
                <item name="wcf.acp.menu.link.devtools.missingLanguageItem.list"><![CDATA[Missing Phrases]]></item>
+               <item name="wcf.acp.menu.link.log.email"><![CDATA[Emails]]></item>
+               <item name="wcf.acp.menu.item.button.choose"><![CDATA[Choose Menu Item]]></item>
        </category>
        <category name="wcf.acp.modificationLog">
                <item name="wcf.acp.modificationLog.list"><![CDATA[Global Modification Log]]></item>
@@ -1209,7 +1234,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.notice.conditions.pointInTime.description"><![CDATA[Sets the point in time at which the notice is displayed.]]></item>
                <item name="wcf.acp.notice.conditions.user"><![CDATA[Active user]]></item>
                <item name="wcf.acp.notice.conditions.user.description"><![CDATA[The active user has to fulfill the following conditions to view the notice.]]></item>
-               <item name="wcf.acp.notice.delete.confirmMessage"><![CDATA[Do you really want to delete the notice <span class="confirmationObject">{$notice->noticeName}</span>?]]></item>
                <item name="wcf.acp.notice.edit"><![CDATA[Edit Notice]]></item>
                <item name="wcf.acp.notice.example"><![CDATA[Example text of a notice]]></item>
                <item name="wcf.acp.notice.isDisabled"><![CDATA[Disable notice]]></item>
@@ -1224,26 +1248,24 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.notice.showOrder.description"><![CDATA[Choose display order of notices.]]></item>
        </category>
        <category name="wcf.acp.option">
-               <item name="wcf.acp.option.blacklist_hostnames"><![CDATA[Block by Hostname]]></item>
-               <item name="wcf.acp.option.blacklist_hostnames.description"><![CDATA[You can specify which hostnames will be blacklisted. Enter one hostname per line.]]></item>
-               <item name="wcf.acp.option.blacklist_ip_addresses"><![CDATA[Block by IP Address]]></item>
-               <item name="wcf.acp.option.blacklist_ip_addresses.description"><![CDATA[You can specify which IP addresses will be blacklisted. Enter one IP address per line.]]></item>
-               <item name="wcf.acp.option.blacklist_user_agents"><![CDATA[Block by User-Agent]]></item>
-               <item name="wcf.acp.option.blacklist_user_agents.description"><![CDATA[You can specify which user-agents will be blacklisted. Enter one user-agent per line.]]></item>
+               <item name="wcf.acp.option.blacklist_ip_addresses"><![CDATA[Block by IP Address (Not Recommended)]]></item>
+               <item name="wcf.acp.option.blacklist_ip_addresses.description"><![CDATA[Blocking IP Addresses is more reliably and performant achieved at the web server level. Use of this blocklist is not recommended and this option will be removed in a future version.]]></item>
+               <item name="wcf.acp.option.blacklist_user_agents"><![CDATA[Block by User-Agent (Not Recommended)]]></item>
+               <item name="wcf.acp.option.blacklist_user_agents.description"><![CDATA[User-Agents are easily faked by an attacker and not a reliable indicator of the client’s identity. If a block based on the User-Agent is desired nonetheless, it is achieve more performant at the web server level. Use of this blocklist is not recommended and this option will be removed in a future version.]]></item>
                <item name="wcf.acp.option.cache_source_memcached_host"><![CDATA[Memcached-Server]]></item>
-               <item name="wcf.acp.option.cache_source_memcached_host.description"><![CDATA[You can specify a weight factor to allow load balancing, for example “localhost:11211:67” or “10.0.13.37:31337:33”. Enter one server per line.]]></item>
+               <item name="wcf.acp.option.cache_source_memcached_host.description"/>
                <item name="wcf.acp.option.cache_source_redis_host"><![CDATA[Redis-Server]]></item>
                <item name="wcf.acp.option.cache_source_redis_host.description"><![CDATA[The server’s address, for example “localhost” or “10.0.13.37:1337”.]]></item>
                <item name="wcf.acp.option.cache_source_type"><![CDATA[Caching Method]]></item>
                <item name="wcf.acp.option.cache_source_type.description"><![CDATA[Caching methods different from filesystem require special extensions or services running on your machine.]]></item>
                <item name="wcf.acp.option.cache_source_type.disk"><![CDATA[Use Filesystem (default)]]></item>
-               <item name="wcf.acp.option.cache_source_type.memcached"><![CDATA[Use Memcached]]></item>
+               <item name="wcf.acp.option.cache_source_type.memcached"><![CDATA[Use Memcached (Not Recommended)]]></item>
                <item name="wcf.acp.option.cache_source_type.redis"><![CDATA[Use Redis]]></item>
                <item name="wcf.acp.option.category.general"><![CDATA[General]]></item>
                <item name="wcf.acp.option.category.general.cache"><![CDATA[Cache]]></item>
                <item name="wcf.acp.option.category.general.cache.general"><![CDATA[General]]></item>
-               <item name="wcf.acp.option.category.general.cache.memcached"><![CDATA[Memcached]]></item>
-               <item name="wcf.acp.option.category.general.cache.memcached.description"><![CDATA[Memcached uses the machine’s memory to store frequently accessed data, reducing database and filesystem load. Read more about Memcached on <a href="https://memcached.org/" class="externalURL">memcached.org</a>.]]></item>
+               <item name="wcf.acp.option.category.general.cache.memcached"><![CDATA[Memcached (Not Recommended)]]></item>
+               <item name="wcf.acp.option.category.general.cache.memcached.description"><![CDATA[The support for Memcached is deprecated and will be removed in a future version of WoltLab Suite™. Memcached users are encouraged to switch to Redis.]]></item>
                <item name="wcf.acp.option.category.general.cache.redis"><![CDATA[Redis]]></item>
                <item name="wcf.acp.option.category.general.cache.redis.description"><![CDATA[Redis uses the machine’s memory to store frequently accessed data, reducing database and filesystem load. Read more about Redis on <a href="https://redis.io/" class="externalURL">redis.io</a>.]]></item>
                <item name="wcf.acp.option.category.general.system.date"><![CDATA[Date and Time]]></item>
@@ -1299,8 +1321,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.error.tooLow"><![CDATA[Under the minimum value{if $option->minvalue !== null} of {#$option->minvalue}{/if}.]]></item>
                <item name="wcf.acp.option.error.tooLong"><![CDATA[The entered text is too long.]]></item>
                <item name="wcf.acp.option.error.tooShort"><![CDATA[The entered text is too short.]]></item>
-               <item name="wcf.acp.option.http_enable_gzip"><![CDATA[Enable gzip-compression]]></item>
-               <item name="wcf.acp.option.http_enable_gzip.description"><![CDATA[Compresses content transferred to users, it also reduces traffic and page load times. It does not affect files, e.g. images.]]></item>
                <item name="wcf.acp.option.http_send_x_frame_options"><![CDATA[Disallow embedding in a frame]]></item>
                <item name="wcf.acp.option.http_send_x_frame_options.description"><![CDATA[Sends the <a href="https://en.wikipedia.org/wiki/Clickjacking" class="externalURL">“X-Frame-Options”</a> header to prevent 3rd party sites from embedding this site in a frame (sends “SAMEORIGIN”).]]></item>
                <item name="wcf.acp.option.image_adapter_type"><![CDATA[Graphics Library]]></item>
@@ -1310,7 +1330,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.log_ip_address"><![CDATA[Store IP addresses]]></item>
                <item name="wcf.acp.option.log_ip_address.description"><![CDATA[Stores IP addresses indefinitely for user-created content, e.g. profiles or forum posts.]]></item>
                <item name="wcf.acp.option.mail_admin_address"><![CDATA[Administrator’s Email]]></item>
-               <item name="wcf.acp.option.mail_admin_address.description"><![CDATA[Enter the administrator’s email address here.]]></item>
+               <item name="wcf.acp.option.mail_admin_address.description"><![CDATA[The administrator’s email is the contact for general matters regarding the community. It is being used as the recipient and reply address for system mails, as well as being the default contact within the contact form. The entered email address should point to a mailbox that is capable of receiving incoming mail and should be checked regularly.]]></item>
                <item name="wcf.acp.option.mail_from_address"><![CDATA[Sender’s Email]]></item>
                <item name="wcf.acp.option.mail_from_address.description"><![CDATA[The sender’s email address for all generated emails.]]></item>
                <item name="wcf.acp.option.mail_from_name"><![CDATA[Sender’s Name]]></item>
@@ -1337,21 +1357,13 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.mail_use_f_param"><![CDATA[Use “-f” parameter]]></item>
                <item name="wcf.acp.option.mail_use_f_param.description"><![CDATA[The “-f” parameter sets the proper sender of the email if the PHP send method is used. This parameter may not be supported by every server. Try disabling it, if you have trouble sending emails.]]></item>
                <item name="wcf.acp.option.meta_description"><![CDATA[Meta Description]]></item>
-               <item name="wcf.acp.option.meta_keywords"><![CDATA[Meta Keywords]]></item>
                <item name="wcf.acp.option.og_image"><![CDATA[Open Graph Image]]></item>
                <item name="wcf.acp.option.og_image.description"><![CDATA[Path to the default image that will be displayed when sharing your site on Facebook, Twitter and other social media sites.]]></item>
-               <item name="wcf.acp.option.module_master_password"><![CDATA[Enable master password]]></item>
-               <item name="wcf.acp.option.module_master_password.description"><![CDATA[Enables an additional password to protect both critical actions and sensitive data.]]></item>
+               <item name="wcf.acp.option.module_master_password"><![CDATA[Enable master password (Not Recommended)]]></item>
+               <item name="wcf.acp.option.module_master_password.description"><![CDATA[Use of the master password is discouraged. Instead multi-factor authentication should be set up. Multi-factor authentication protects accounts more reliably and in all areas. Support for the master password will be removed in a future version without further notice.]]></item>
                <item name="wcf.acp.option.page_description"><![CDATA[Page Description]]></item>
                <item name="wcf.acp.option.page_title"><![CDATA[Page Title]]></item>
                <item name="wcf.acp.option.proxy_server_http"><![CDATA[Proxy-Server (HTTP)]]></item>
-               <item name="wcf.acp.option.session_timeout"><![CDATA[User Session Timeout]]></item>
-               <item name="wcf.acp.option.session_timeout.description"><![CDATA[User sessions expire after the following seconds.]]></item>
-               <item name="wcf.acp.option.session_validate_ip_address"><![CDATA[Validate IP address]]></item>
-               <item name="wcf.acp.option.session_validate_ip_address.description"><![CDATA[Enabling this validation might cause issues for users with a rotating IP address.]]></item>
-               <item name="wcf.acp.option.session_validate_user_agent"><![CDATA[Validate user-agent]]></item>
-               <item name="wcf.acp.option.session_enable_virtualization"><![CDATA[Allow session sharing]]></item>
-               <item name="wcf.acp.option.session_enable_virtualization.description"><![CDATA[Users can login from multiple devices (desktop, tablet, smartphone, etc.) concurrently; all devices will share the same session. Disabling this will restrict users to only one device (session) at a time, causing all the other device sessions to terminate. It is not recommended to disable this option.]]></item>
                <item name="wcf.acp.option.timezone"><![CDATA[Timezone]]></item>
                <item name="wcf.acp.option.timezone.description"><![CDATA[The default timezone of your page.]]></item>
                <item name="wcf.acp.option.ip_address_search_engine"><![CDATA[Search Engine for IP Addresses]]></item>
@@ -1402,7 +1414,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.module_smiley"><![CDATA[Smilies]]></item>
                <item name="wcf.acp.option.category.message.censorship"><![CDATA[Censorship]]></item>
                <item name="wcf.acp.option.censored_words"><![CDATA[Censored Words]]></item>
-               <item name="wcf.acp.option.censored_words.description"><![CDATA[You can specify which words will be censored. Using at least one of these words within a message causes an immediate rejection. Enter one word per line. Examples:
+               <item name="wcf.acp.option.censored_words.description"><![CDATA[You can specify which words will be censored. Using at least one of these words within a message causes an immediate rejection. Examples:
 <ul class="nativeList">
 <li>“*” to match parts: “wolt*” matches “woltlab”</li>
 <li>“~” to find splitted parts: “wolt~” matches “wolt-lab”</li>
@@ -1443,8 +1455,8 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.category.user.password"><![CDATA[Password]]></item>
                <item name="wcf.acp.option.category.user.ban"><![CDATA[Filter]]></item>
                <item name="wcf.acp.option.category.user.3rdPartyAuth"><![CDATA[Third-Party Authentication]]></item>
-               <item name="wcf.acp.option.module_gravatar"><![CDATA[Gravatars]]></item>
-               <item name="wcf.acp.option.module_gravatar.description"><![CDATA[Enables support for Gravatars (“Global Recognized Avatar”).]]></item>
+               <item name="wcf.acp.option.module_gravatar"><![CDATA[Gravatars (Not Recommended)]]></item>
+               <item name="wcf.acp.option.module_gravatar.description"><![CDATA[Enabling Gravatar support is not recommended due to privacy concerns. Gravatar support will be removed in a future version.]]></item>
                <item name="wcf.acp.option.module_users_online"><![CDATA[Users online list]]></item>
                <item name="wcf.acp.option.module_user_rank"><![CDATA[User ranks]]></item>
                <item name="wcf.acp.option.module_user_signature"><![CDATA[Signatures]]></item>
@@ -1455,11 +1467,11 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.password_min_score.1"><![CDATA[1: Very guessable (1 million attempts)]]></item>
                <item name="wcf.acp.option.password_min_score.2"><![CDATA[2: Somewhat guessable (100 million attempts)]]></item>
                <item name="wcf.acp.option.register_forbidden_usernames"><![CDATA[Reserved Usernames]]></item>
-               <item name="wcf.acp.option.register_forbidden_usernames.description"><![CDATA[You can specify which usernames are unavailable for registration. Enter one username per line.]]></item>
+               <item name="wcf.acp.option.register_forbidden_usernames.description"><![CDATA[You can specify which usernames are unavailable for registration.]]></item>
                <item name="wcf.acp.option.register_forbidden_emails"><![CDATA[Reserved Email Addresses]]></item>
-               <item name="wcf.acp.option.register_forbidden_emails.description"><![CDATA[You can specify which email addresses are unavailable for registration. Enter one email address per line.]]></item>
+               <item name="wcf.acp.option.register_forbidden_emails.description"><![CDATA[You can specify which email addresses are unavailable for registration.]]></item>
                <item name="wcf.acp.option.register_allowed_emails"><![CDATA[Allowed Email Addresses]]></item>
-               <item name="wcf.acp.option.register_allowed_emails.description"><![CDATA[You can specify which email addresses are allowed for registration. Enter one email address per line.]]></item>
+               <item name="wcf.acp.option.register_allowed_emails.description"><![CDATA[You can specify which email addresses are allowed for registration.]]></item>
                <item name="wcf.acp.option.register_username_min_length"><![CDATA[Minimum Username Length]]></item>
                <item name="wcf.acp.option.register_username_max_length"><![CDATA[Maximum Username Length]]></item>
                <item name="wcf.acp.option.register_username_force_ascii"><![CDATA[Require ASCII characters for usernames]]></item>
@@ -1469,7 +1481,6 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.register_disabled.description"><![CDATA[Disables registration for all users, new users can be created through an administrator.]]></item>
                <item name="wcf.acp.option.register_enable_disclaimer"><![CDATA[Enable disclaimer]]></item>
                <item name="wcf.acp.option.register_enable_disclaimer.description"><![CDATA[Disclaimer must be accepted during registration.]]></item>
-               <item name="wcf.acp.option.register_admin_notification"><![CDATA[Notify administrator of new registrations]]></item>
                <item name="wcf.acp.option.register_activation_method"><![CDATA[Registration Approval Method]]></item>
                <item name="wcf.acp.option.register_activation_method.byAdmin"><![CDATA[Only administrators can approve registrations]]></item>
                <item name="wcf.acp.option.register_activation_method.byUser"><![CDATA[Registrations are approved through an email confirmation]]></item>
@@ -1480,7 +1491,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.sitemap_index_time_frame.description"><![CDATA[Maximum age of the objects to be included in the sitemap. Use 0 to disable the time frame.]]></item>
                <item name="wcf.acp.option.user_title_max_length"><![CDATA[Maximum User Title Length]]></item>
                <item name="wcf.acp.option.user_forbidden_titles"><![CDATA[Reserved User Titles]]></item>
-               <item name="wcf.acp.option.user_forbidden_titles.description"><![CDATA[You can specify which user titles are unavailable for users. Enter one user title per line.]]></item>
+               <item name="wcf.acp.option.user_forbidden_titles.description"><![CDATA[You can specify which user titles are unavailable for users.]]></item>
                <item name="wcf.acp.option.profile_show_old_username"><![CDATA[Display Previous Username]]></item>
                <item name="wcf.acp.option.profile_show_old_username.description"><![CDATA[Previous usernames will be displayed for the following days.]]></item>
                <item name="wcf.acp.option.members_list_users_per_page"><![CDATA[Members per Page]]></item>
@@ -1529,13 +1540,13 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.module_poll"><![CDATA[Polls]]></item>
                <item name="wcf.acp.option.poll_max_options"><![CDATA[Maximum Poll Options]]></item>
                <item name="wcf.acp.option.poll_full_width"><![CDATA[Display polls over the entire width]]></item>
-               <item name="wcf.acp.option.error.validationFailed"><![CDATA[You have entered an invalid value.]]></item>
+               <item name="wcf.acp.option.error.validationFailed"><![CDATA[The entered value is invalid.]]></item>
                <item name="wcf.acp.option.module_members_list"><![CDATA[Members list]]></item>
                <item name="wcf.acp.option.footer_code"><![CDATA[Footer Code]]></item>
                <item name="wcf.acp.option.footer_code.description"><![CDATA[The entered code will be appended to the page footer of your site. You can use it to embed services like “Google Analytics” or “Matomo”.]]></item>
                <item name="wcf.acp.option.profile_enable_visitors"><![CDATA[Display user’s profile visitors in profile sidebar]]></item>
                <item name="wcf.acp.option.url_title_component_replacement"><![CDATA[URL Replacements]]></item>
-               <item name="wcf.acp.option.url_title_component_replacement.description"><![CDATA[You can replace parts of the title within the URL. You could use it to replace special characters or to expand abbreviations. Enter one replacement per line. Examples:
+               <item name="wcf.acp.option.url_title_component_replacement.description"><![CDATA[You can replace parts of the title within the URL. You could use it to replace special characters or to expand abbreviations. Examples:
 <ul class="nativeList">
 <li>“WBB=WoltLab Burning Board”</li>
 <li>“GmbH=Gesellschaft mit beschränkter Haftung”</li>
@@ -1564,7 +1575,7 @@ ATTENTION: The messages listed above are greatly shortened. You can view details
                <item name="wcf.acp.option.show_update_notice_frontend"><![CDATA[Display a notice for outstanding updates on the frontend]]></item>
                <item name="wcf.acp.option.url_omit_index_php"><![CDATA[Enable url-rewrite]]></item>
                <item name="wcf.acp.option.url_omit_index_php.button.runTestAgain"><![CDATA[Rerun Test]]></item>
-               <item name="wcf.acp.option.url_omit_index_php.description"><![CDATA[Attention! This option requires a rewrite module installed on your webserver and an appropriate configuration; It will not work without any prior configuration applied by you! Please read the following article for instructions: <a href="https://www.woltlab.com/article/25-setting-up-user-friendly-urls/" class="externalURL">Setting up user friendly URLs</a>. Enabling this option will rewrite URLs into a better readable representation. Examples: 
+               <item name="wcf.acp.option.url_omit_index_php.description"><![CDATA[Attention! This option requires a rewrite module installed on your webserver and an appropriate configuration; It will not work without any prior configuration applied by you! Please read the following article for instructions: <a href="https://www.woltlab.com/article/25-setting-up-user-friendly-urls/" class="externalURL">Setting up user friendly URLs</a>. Enabling this option will rewrite URLs into a better readable representation. Examples:
 <ul class="nativeList">
 <li>the link “https://example.com/index.php?thread/1-hello-i-am-john-doe/” will turn into “https://example.com/thread/1-hello-i-am-john-doe/”</li>
 <li>the link “https://example.com/index.php?members-list/” will turn into “https://example.com/members-list/”</li>
@@ -1645,15 +1656,16 @@ When prompted for the notification URL for the instant payment notifications, pl
                <item name="wcf.acp.option.article_related_articles_match_threshold.description"><![CDATA[The minimum amount of tags that both articles have in common.]]></item>
                <item name="wcf.acp.option.article_show_about_author"><![CDATA[Display “about the author” box]]></item>
                <item name="wcf.acp.option.category.message.general.image"><![CDATA[Images]]></item>
+               <item name="wcf.acp.option.category.message.general.imageProxy"><![CDATA[Image Proxy]]></item>
                <item name="wcf.acp.option.module_article"><![CDATA[Articles]]></item>
                <item name="wcf.acp.option.message_force_secure_images"><![CDATA[Allow secure images only]]></item>
                <item name="wcf.acp.option.message_force_secure_images.description"><![CDATA[Images may only be embedded using the encrypted “https”-protocol. Images in already existing messages will be force-rewritten to use the secure protocol.]]></item>
-               <item name="wcf.acp.option.module_image_proxy"><![CDATA[Enable image proxy]]></item>
+               <item name="wcf.acp.option.module_image_proxy"><![CDATA[Enable Image Proxy]]></item>
                <item name="wcf.acp.option.image_proxy_expiration"><![CDATA[Maximum Storage Time Period]]></item>
                <item name="wcf.acp.option.image_proxy_insecure_only"><![CDATA[Store images from insecure sources only]]></item>
                <item name="wcf.acp.option.image_proxy_enable_prune"><![CDATA[Remove Cached Images Regularly]]></item>
-               <item name="wcf.acp.option.image_proxy_host_whitelist"><![CDATA[Image proxy whitelist]]></item>
-               <item name="wcf.acp.option.image_proxy_host_whitelist.description"><![CDATA[The listed domains will not be handled by the image proxy, the current domain is implicitly added. Hostnames are exact matches only, a leading wildcard can be used to exclude an entire domain: <kbd>*.example.com</kbd> matches <kbd>example.com</kbd> and subdomains such as <kbd>foo.example.com</kbd> or <kbd>www.example.com</kbd>.<br>Enter one domain per line only.]]></item>
+               <item name="wcf.acp.option.image_proxy_host_whitelist"><![CDATA[Image Proxy Exception]]></item>
+               <item name="wcf.acp.option.image_proxy_host_whitelist.description"><![CDATA[The listed domains will not be handled by the image proxy, the current domain is implicitly added. Hostnames are exact matches only, a leading wildcard can be used to exclude an entire domain: <kbd>*.example.com</kbd> matches <kbd>example.com</kbd> and subdomains such as <kbd>foo.example.com</kbd> or <kbd>www.example.com</kbd>.]]></item>
                <item name="wcf.acp.option.share_buttons_providers"><![CDATA[Share Button Providers]]></item>
                <item name="wcf.acp.option.show_style_changer"><![CDATA[Enable style changer]]></item>
                <item name="wcf.acp.option.language_use_informal_variant"><![CDATA[Use informal language variant]]></item>
@@ -1699,11 +1711,9 @@ When prompted for the notification URL for the instant payment notifications, pl
                <item name="wcf.acp.option.desktop_notification_package_id.description"><![CDATA[Desktop Notifications will be enabled for the selected app only, including all other apps that use the exact same domain.]]></item>
                <item name="wcf.acp.option.page_logo_link_to_app_default"><![CDATA[Page logo links to the start page of the active app]]></item>
                <item name="wcf.acp.option.page_logo_link_to_app_default.description"><![CDATA[Disabling this option will cause the link to always point to the global landing page instead. This option enforces the behavior known from previous versions when disabled.]]></item>
-               <item name="wcf.acp.option.module_user_cover_photo"><![CDATA[Enable user cover photos]]></item>
-               <item name="wcf.acp.option.module_user_cover_photo.description"><![CDATA[Enables the display and upload of user profile cover photos.]]></item>
                <item name="wcf.acp.option.image_allow_external_source"><![CDATA[Allow images from external sites]]></item>
                <item name="wcf.acp.option.image_external_source_whitelist"><![CDATA[Allowed images from external sites]]></item>
-               <item name="wcf.acp.option.image_external_source_whitelist.description"><![CDATA[The listed domains will be exempt from blocking. Hostnames are exact matches only, a leading wildcard can be used to exclude an entire domain: <kbd>*.example.com</kbd> matches <kbd>example.com</kbd> and subdomains such as <kbd>foo.example.com</kbd> or <kbd>www.example.com</kbd>.<br>Enter one domain per line only.]]></item>
+               <item name="wcf.acp.option.image_external_source_whitelist.description"><![CDATA[The listed domains will be exempt from blocking. Hostnames are exact matches only, a leading wildcard can be used to exclude an entire domain: <kbd>*.example.com</kbd> matches <kbd>example.com</kbd> and subdomains such as <kbd>foo.example.com</kbd> or <kbd>www.example.com</kbd>.]]></item>
                <item name="wcf.acp.option.message_enable_toc"><![CDATA[Enable the table of contents]]></item>
                <item name="wcf.acp.option.search_enable_articles"><![CDATA[Articles are searchable]]></item>
                <item name="wcf.acp.option.search_enable_pages"><![CDATA[Pages are searchable]]></item>
@@ -1755,6 +1765,14 @@ The database is carefully maintained, but there will be always be a margin of er
                <item name="wcf.acp.option.message_enable_user_consent"><![CDATA[Prompt users before displaying content from external sources]]></item>
                <item name="wcf.acp.option.modification_log_expiration"><![CDATA[Storage Time for Modification Logs]]></item>
                <item name="wcf.acp.option.modification_log_expiration.description"><![CDATA[Modification logs will be deleted after the entered amount of days. To disable deleting old modification logs, enter “0”.]]></item>
+               <item name="wcf.acp.option.internal_hostnames"><![CDATA[Additional Internal Domains]]></item>
+               <item name="wcf.acp.option.internal_hostnames.description"><![CDATA[The listed domains will be considered as internal domains in addition to the domains in use by installed apps. Hostnames are exact matches only, a leading wildcard can be used to exclude an entire domain: <kbd>*.example.com</kbd> matches <kbd>example.com</kbd> and subdomains such as <kbd>foo.example.com</kbd> or <kbd>www.example.com</kbd>.]]></item>
+               <item name="wcf.acp.option.type.lineBreakSeparatedText.placeholder"><![CDATA[Add new entry]]></item>
+               <item name="wcf.acp.option.type.lineBreakSeparatedText.error.duplicate"><![CDATA[The entry <strong>{$item}</strong> already exists.]]></item>
+               <item name="wcf.acp.option.type.lineBreakSeparatedText.clearList.confirmMessage"><![CDATA[Do you really want to delete all entries?]]></item>
+               <item name="wcf.acp.option.category.message.general.unfurl"><![CDATA[Rich Embeds]]></item>
+               <item name="wcf.acp.option.module_url_unfurling"><![CDATA[Enable Rich Embeds]]></item>
+               <item name="wcf.acp.option.module_url_unfurling.description"><![CDATA[Creates a preview with title, description and image for external links in messages.]]></item>
        </category>
        <category name="wcf.acp.customOption">
                <item name="wcf.acp.customOption.list"><![CDATA[Option Fields]]></item>
@@ -1775,9 +1793,8 @@ The database is carefully maintained, but there will be always be a margin of er
                <item name="wcf.acp.customOption.optionType.URL"><![CDATA[Link]]></item>
                <item name="wcf.acp.customOption.add"><![CDATA[Add Option Field]]></item>
                <item name="wcf.acp.customOption.edit"><![CDATA[Edit Option Field]]></item>
-               <item name="wcf.acp.customOption.error.validationFailed"><![CDATA[You have entered an invalid value.]]></item>
+               <item name="wcf.acp.customOption.error.validationFailed"><![CDATA[The entered value is invalid.]]></item>
                <item name="wcf.acp.customOption.showOrder"><![CDATA[Display Order]]></item>
-               <item name="wcf.acp.customOption.delete.confirmMessage"><![CDATA[Do you really want to delete the option field <span class="confirmationObject">{$option->getTitle()}</span>?]]></item>
                <item name="wcf.acp.customOption.defaultValue"><![CDATA[Default Value]]></item>
                <item name="wcf.acp.customOption.defaultValue.description"><![CDATA[Default option value suggested on initial request.]]></item>
                <item name="wcf.acp.customOption.typeData"><![CDATA[Properties]]></item>
@@ -1873,6 +1890,7 @@ The database is carefully maintained, but there will be always be a margin of er
                <item name="wcf.acp.package.uninstallation.step.prepare"><![CDATA[Preparing uninstallation …]]></item>
                <item name="wcf.acp.package.updateDate"><![CDATA[Update Date]]></item>
                <item name="wcf.acp.package.update.credentials"><![CDATA[Credentials]]></item>
+               <item name="wcf.acp.package.update.credentials.description"><![CDATA[You can find your license and serial number in the <a class="externalURL" href="https://www.woltlab.com/license-list/"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>customer area on woltlab.com</a>.]]></item>
                <item name="wcf.acp.package.update.error.listNotFound"><![CDATA[The package list could not be retrieved.]]></item>
                <item name="wcf.acp.package.update.error.outstandingUpdates"><![CDATA[Please install all outstanding updates before attempting to migrate to a newer version.]]></item>
                <item name="wcf.acp.package.update.errorCode.401"><![CDATA[Your credentials are invalid, please verify {if $updateServer->requiresLicense()}license and serial number{else}username and password{/if}.]]></item>
@@ -1931,6 +1949,7 @@ The database is carefully maintained, but there will be always be a margin of er
                <item name="wcf.acp.package.validation.errorCode.15"><![CDATA[This package does not contain any data on API compatibility, the installation is prevented while the developer tools are enabled.]]></item>
                <item name="wcf.acp.package.validation.errorCode.16"><![CDATA[In addition to the &lt;void/&gt; instruction additional Package Installation Plugins are used.]]></item>
                <item name="wcf.acp.package.validation.errorCode.17"><![CDATA[The &lt;void/&gt; instruction may not be used in the install-instructions.]]></item>
+               <item name="wcf.acp.package.validation.errorCode.18"><![CDATA[The app “{$application->getPackage()->package}”, which is already installed, uses the same app abbreviation.]]></item>
                <item name="wcf.acp.package.validation.failed"><![CDATA[The package cannot be installed, please review the validation results below.]]></item>
                <item name="wcf.acp.package.evaluation.expired"><![CDATA[The evaluation period of <strong>{$packageName}</strong> has expired. For a legal use of this software, please update to the latest available version.{if $pluginStoreFileID || $isWoltLab}<br>The latest version can be purchased quickly and securely <strong>{if $pluginStoreFileID}<a href="https://pluginstore.woltlab.com/file/{$pluginStoreFileID}/">in the WoltLab Plugin-Store</a>{else}<a href="https://www.woltlab.com/purchase/">on WoltLab.com</a>{/if}</strong>.{/if}]]></item>
                <item name="wcf.acp.package.evaluation.pending"><![CDATA[The evaluation period of the apps listed below will expire on <strong>{$evaluationEndDate|plainTime}</strong> ({@$evaluationEndDate|dateDiff:TIME_NOW:true}). The apps will automatically disable themselves after this date and become unusable, you'll need to install the latest versions of the apps to active them again.
@@ -1961,6 +1980,8 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                The column {$error[tableName]}.{$error[columnName]} belongs to a different package and thus cannot be dropped.
        {else if $error[type] === 'foreignColumnChange'}
                The column {$error[tableName]}.{$error[columnName]} belongs to a different package and thus cannot be dropped.
+       {else if $error[type] === 'renameNonexistingColumn'}
+               The column {$error[tableName]}.{$error[columnName]} does not exist and thus cannot be renamed.
        {else if $error[type] === 'foreignIndexDrop'}
                The index {$error[tableName]} ({$error[columnNames]}) belongs to a different package and thus cannot be dropped.
        {else if $error[type] === 'nonexistingColumnInIndex'}
@@ -1975,9 +1996,11 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                Unknown error.
        {/if}
 {/implode}]]></item>
+               <item name="wcf.acp.package.application.isTainted"><![CDATA[The app{if $taintedApplication|isset} <strong>{$taintedApplication->getPackage()->getTitle()}</strong>{/if} is not fully installed. You need to uninstall and then reinstall the app to be able to use it.]]></item>
                <item name="wcf.acp.package.enableUpgradeOverride"><![CDATA[Upgrade to WoltLab Suite {$version}]]></item>
-               <item name="wcf.acp.package.enableUpgradeOverride.enable"><![CDATA[Enable Upgrading to the Evaluation Version]]></item>
-               <item name="wcf.acp.package.availableUpgradeVersion"><![CDATA[The new WoltLab Suite {$version} is available for installation. WARNING: This is an unstable version intended for test purposes only, do not upgrade your production site at this time.<br>
+               <item name="wcf.acp.package.enableUpgradeOverride.enable"><![CDATA[Enable Upgrading to the New Version]]></item>
+               <item name="wcf.acp.package.enableUpgradeOverride.issues"><![CDATA[The following issues currently prevent an upgrade:]]></item>
+               <item name="wcf.acp.package.availableUpgradeVersion"><![CDATA[New Version Available!<br><br>The new WoltLab Suite {$version} is available for installation. We have provided a guide with the instructions for the upgrade in our <a href="https://manual.woltlab.com/en/updates/#upgrading-woltlab-suite-52-to-53" class="externalURL">manual</a>.<br>
 <br>
 <a href="{link controller='PackageEnableUpgradeOverride' application='wcf'}{/link}">Validate the system requirements to begin the upgrade</a>]]></item>
                <item name="wcf.acp.package.upgradeOverrideEnabled"><![CDATA[The upgrade to WoltLab Suite {$version} is now ready. Please click on the button “Search for Updates” to start the upgrade.<br>
@@ -1996,7 +2019,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.paidSubscription.subscriptionLengthUnit.D"><![CDATA[Day(s)]]></item>
                <item name="wcf.acp.paidSubscription.subscriptionLengthUnit.M"><![CDATA[Month(s)]]></item>
                <item name="wcf.acp.paidSubscription.subscriptionLengthUnit.Y"><![CDATA[Year(s)]]></item>
-               <item name="wcf.acp.paidSubscription.subscriptionLength.error.invalid"><![CDATA[You have entered an invalid length. You can set a maximum of 90 for “Day(s)”, 24 for “Month(s)” or 5 for “Year(s)”.]]></item>
+               <item name="wcf.acp.paidSubscription.subscriptionLength.error.invalid"><![CDATA[The entered length is invalid. You can set a maximum of 90 for “Day(s)”, 24 for “Month(s)” or 5 for “Year(s)”.]]></item>
                <item name="wcf.acp.paidSubscription.showOrder.description"><![CDATA[Choose display order of paid subscriptions.]]></item>
                <item name="wcf.acp.paidSubscription.isDisabled"><![CDATA[Disable subscription]]></item>
                <item name="wcf.acp.paidSubscription.isDisabled.description"><![CDATA[Disabling a subscription will make it unpurchasable.]]></item>
@@ -2019,17 +2042,16 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.paidSubscription.user.add"><![CDATA[Manually Add Subscription]]></item>
                <item name="wcf.acp.paidSubscription.user.edit"><![CDATA[Edit Active Subscription]]></item>
                <item name="wcf.acp.paidSubscription.error.noPaymentMethods"><![CDATA[Adding subscriptions requires at least one active payment provider for the “Supported Payment Methods” option.]]></item>
-               <item name="wcf.acp.paidSubscription.delete.confirmMessage"><![CDATA[Do you really want to delete the paid subscription <span class="confirmationObject">{$subscription->title|language}</span>?]]></item>
        </category>
        <category name="wcf.acp.pluginStore">
                <item name="wcf.acp.pluginStore.api.error"><![CDATA[Error {@$status}: The server was unable to process your request.]]></item>
                <item name="wcf.acp.pluginStore.api.noSSL"><![CDATA[Querying the Plugin-Store to fetch the purchased products requires a secure connection.<br><br>Your PHP version has been compiled without OpenSSL support, it is required to establish secure connections, please contact your hosting company or system-administrator to resolve this shortcoming.]]></item>
                <item name="wcf.acp.pluginStore.authorization"><![CDATA[Authorization Required]]></item>
                <item name="wcf.acp.pluginStore.authorization.credentials"><![CDATA[Credentials]]></item>
-               <item name="wcf.acp.pluginStore.authorization.credentials.description"><![CDATA[Please enter your WoltLab.com username and password.]]></item>
+               <item name="wcf.acp.pluginStore.authorization.credentials.description"><![CDATA[Please enter the license and serial number of one of your licenses on WoltLab.com.]]></item>
                <item name="wcf.acp.pluginStore.authorization.credentials.rejected"><![CDATA[Your provided credentials are invalid, please check your username and password!]]></item>
-               <item name="wcf.acp.pluginStore.authorization.username"><![CDATA[Username]]></item>
-               <item name="wcf.acp.pluginStore.authorization.password"><![CDATA[Password]]></item>
+               <item name="wcf.acp.pluginStore.authorization.username"><![CDATA[License Number]]></item>
+               <item name="wcf.acp.pluginStore.authorization.password"><![CDATA[Serial Number]]></item>
                <item name="wcf.acp.pluginStore.authorization.saveCredentials"><![CDATA[Save credentials for this session only]]></item>
                <item name="wcf.acp.pluginStore.file"><![CDATA[WoltLab® Plugin-Store]]></item>
                <item name="wcf.acp.pluginStore.file.link"><![CDATA[Show listing in the Plugin-Store]]></item>
@@ -2162,6 +2184,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.deletedContent.description"><![CDATA[This object type definition is used to register types of objects that can be deleted and whose deleted objects will be shown in a specific list of deleted contents accessible only for moderators.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.edit.historySavingObject.description"><![CDATA[This object type definition is used to register types of messages of which different versions can be tracked using the edit history API.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.exporter.description"><![CDATA[This object type definition is used to register exporters that export data from other software and import it into WoltLab Suite Core.]]></item>
+               <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.floodControl.description"><![CDATA[This object type definition is used to register message types for which the timeframe for writing multiple messages can be restricted using the flood control API.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.importer.description"><![CDATA[This object type definition is used to register importers for specific types of objects.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.label.object.description"><![CDATA[This object type definition is used to register types of objects to which labels can be assigned.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.label.objectType.description"><![CDATA[This object type definition is used to register types of objects for which labels can be set up in the ACP.]]></item>
@@ -2173,6 +2196,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.moderation.report.description"><![CDATA[This object type definition is used to register types of objects that can be reported. For reported objects, a moderation queue entry is created.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.moderation.type.description"><![CDATA[This object type definition is used to register “states” of objects so that for objects in a relevant state, a moderation queue entry is created.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.modifiableContent.description"><![CDATA[This object type definition is used to register types of objects for which modifications are logged. These logs can be viewed via a chronological modification list.]]></item>
+               <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.multifactor.description"><![CDATA[This object type definition is used to register available multi-factor authentication methods.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.notification.objectType.description"><![CDATA[This object type definition is used to register types of objects for which notifications can be sent.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.payment.method.description"><![CDATA[This object type definition is used to register payment providers used, for example, for subscriptions to user groups.]]></item>
                <item name="wcf.acp.pip.objectType.definitionName.com.woltlab.wcf.payment.type.description"><![CDATA[This object type definition is used to register types of objects for which payment is possible like subscriptions to user groups.]]></item>
@@ -2353,7 +2377,6 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.pip.page.contentContent"><![CDATA[Content]]></item>
                <item name="wcf.acp.pip.page.contentCustomURL"><![CDATA[Custom URL]]></item>
                <item name="wcf.acp.pip.page.contentMetaDescription"><![CDATA[Meta Description]]></item>
-               <item name="wcf.acp.pip.page.contentMetaKeywords"><![CDATA[Meta Keywords]]></item>
                <item name="wcf.acp.pip.page.content"><![CDATA[Page Contents]]></item>
                <item name="wcf.acp.pip.eventListener.listenerName"><![CDATA[Event Listener Identifier]]></item>
                <item name="wcf.acp.pip.eventListener.listenerName.description"><![CDATA[Unique textual identifier of the event listener that may only contain letters and must start with a lowercase letter.]]></item>
@@ -2523,7 +2546,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.pip.objectType.integerCondition.propertyName"><![CDATA[Object Property Name]]></item>
                <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.data.title"><![CDATA[Message Type Data]]></item>
                <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.disallowedBBCodesPermission"><![CDATA[Permission for Disallowed BBCodes]]></item>
-               <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.disallowedBBCodesPermission.description"><![CDATA[If the form builder API is used to create a message of this type, the given user group permission will be used to determine the disallowed BBCodes. If no permission is given, the general permission for disallowed BBCodes for messages is used.]]></item>
+               <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.disallowedBBCodesPermission.description"><![CDATA[If the form builder API is used to create a message of this type, the entered user group permission will be used to determine the disallowed BBCodes. If no permission is given, the general permission for disallowed BBCodes for messages is used.]]></item>
                <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.disallowedBBCodesPermission.error.optionType"><![CDATA[The entered user group permission’s type has to be BBCodeSelect.]]></item>
                <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.enableToc"><![CDATA[Generate Table of Contents]]></item>
                <item name="wcf.acp.pip.objectType.com.woltlab.wcf.message.enableToc.description"><![CDATA[If selected, a table of contents is created for each message of this type.]]></item>
@@ -2531,36 +2554,37 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.pip.templateListener.niceValue.description"><![CDATA[The nice value is used to determine the order in which template listeners for the same event are executed. Template listeners with a lower nice value are executed first.]]></item>
                <item name="wcf.acp.pip.templateListener.options.description"><![CDATA[At least one of the entered options has to be enabled for the template listener’ code to be executed. The options are checked in the template by wrapping the template code in an if statement checking the options. Options of non-required packages will be reported as non-existing.]]></item>
                <item name="wcf.acp.pip.templateListener.permissions.description"><![CDATA[The active user must be granted at least one of the entered permissions for the template listener’ code to be executed. The permissions are checked in the template by wrapping the template code in an if statement checking the permissions. Permissions of non-required packages will be reported as non-existing.]]></item>
-               <item name="wcf.acp.pip.aclOption.info"><![CDATA[The <kbd>aclOption</kbd> package installation plugin allows setting up permissions for individual objects. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_acl-option.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.acpMenu.info"><![CDATA[The <kbd>acpMenu</kbd> package installation plugin installs new ACP menu items. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_acp-menu.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.acpSearchProvider.info"><![CDATA[The <kbd>acpSearchProvider</kbd> package installation plugin installs new data provider for the admin panel search. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_acp-search-provider.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.bbcode.info"><![CDATA[The <kbd>bbcode</kbd> package installation plugin installs new BBCodes. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_bbcode.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.box.info"><![CDATA[The <kbd>box</kbd> package installation plugin installs new pre-configured boxes. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_box.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.clipboardAction.info"><![CDATA[The <kbd>clipboardAction</kbd> package installation plugin installs new clipboard actions that can be executed for multiple objects at once. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_clipboard_action.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.coreObject.info"><![CDATA[The <kbd>coreObject</kbd> package installation plugin installs new <kbd>wcf\system\SingletonFactory</kbd> objects that can be accessed in templates. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_core-object.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.cronjob.info"><![CDATA[The <kbd>cronjob</kbd> package installation plugin installs new cronjobs that are executed regularly in the background. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_cronjob.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.eventListener.info"><![CDATA[The <kbd>eventListener</kbd> package installation plugin installs new event listeners. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_event-listener.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.language.info"><![CDATA[The <kbd>language</kbd> package installation plugin installs new language items. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_language.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.mediaProvider.info"><![CDATA[The <kbd>mediaProvider</kbd> package installation plugin installs new media providers that automatically convert links to media websites. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_media-provider.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.menu.info"><![CDATA[The <kbd>menu</kbd> package installation plugin installs new menus. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_menu.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.menuItem.info"><![CDATA[The <kbd>menuItem</kbd> package installation plugin installs new menu items for existing menus. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_menu-item.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.objectType.info"><![CDATA[The <kbd>objectType</kbd> package installation plugin installs new object types. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_object-type.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.objectTypeDefinition.info"><![CDATA[The <kbd>objectTypeDefinition</kbd> package installation plugin installs new object type definitions. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_object-type-definition.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.option.info"><![CDATA[The <kbd>option</kbd> package installation plugin installs new options. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_option.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.packageInstallationPlugin.info"><![CDATA[The <kbd>packageInstallationPlugin</kbd> package installation plugin installs new package installation plugins. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_pip.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.page.info"><![CDATA[The <kbd>page</kbd> package installation plugin installs new pages. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_page.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.smiley.info"><![CDATA[The <kbd>smiley</kbd> package installation plugin installs new smileys. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_smiley.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.templateListener.info"><![CDATA[The <kbd>templateListener</kbd> package installation plugin installs new template listeners. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_template-listener.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.userGroupOption.info"><![CDATA[The <kbd>userGroupOption</kbd> package installation plugin installs new user group options. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_user-group-option.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.userMenu.info"><![CDATA[The <kbd>userMenu</kbd> package installation plugin installs new menu items for the user menu. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_user-menu.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.userNotificationEvent.info"><![CDATA[The <kbd>userNotificationEvent</kbd> package installation plugin installs new user notification events. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_user-notification-event.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.userOption.info"><![CDATA[The <kbd>userOption</kbd> package installation plugin installs new user options and profile fields. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_user-option.html" class="externalURL">developer documentation</a>.]]></item>
-               <item name="wcf.acp.pip.userProfileMenu.info"><![CDATA[The <kbd>userProfileMenu</kbd> package installation plugin installs new menu items for the user profile menu. You can find more information in the <a href="https://docs.woltlab.com/5.3/package_pip_user-profile-menu.html" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.aclOption.info"><![CDATA[The <kbd>aclOption</kbd> package installation plugin allows setting up permissions for individual objects. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/acl-option/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.acpMenu.info"><![CDATA[The <kbd>acpMenu</kbd> package installation plugin installs new ACP menu items. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/acp-menu/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.acpSearchProvider.info"><![CDATA[The <kbd>acpSearchProvider</kbd> package installation plugin installs new data provider for the admin panel search. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/acp-search-provider/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.bbcode.info"><![CDATA[The <kbd>bbcode</kbd> package installation plugin installs new BBCodes. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/bbcode/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.box.info"><![CDATA[The <kbd>box</kbd> package installation plugin installs new pre-configured boxes. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/box/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.clipboardAction.info"><![CDATA[The <kbd>clipboardAction</kbd> package installation plugin installs new clipboard actions that can be executed for multiple objects at once. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/clipboard-action/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.coreObject.info"><![CDATA[The <kbd>coreObject</kbd> package installation plugin installs new <kbd>wcf\system\SingletonFactory</kbd> objects that can be accessed in templates. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/core-object/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.cronjob.info"><![CDATA[The <kbd>cronjob</kbd> package installation plugin installs new cronjobs that are executed regularly in the background. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/cronjob/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.eventListener.info"><![CDATA[The <kbd>eventListener</kbd> package installation plugin installs new event listeners. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/event-listener/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.language.info"><![CDATA[The <kbd>language</kbd> package installation plugin installs new language items. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/language/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.mediaProvider.info"><![CDATA[The <kbd>mediaProvider</kbd> package installation plugin installs new media providers that automatically convert links to media websites. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/media-provider/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.menu.info"><![CDATA[The <kbd>menu</kbd> package installation plugin installs new menus. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/menu/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.menuItem.info"><![CDATA[The <kbd>menuItem</kbd> package installation plugin installs new menu items for existing menus. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/menu-item/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.objectType.info"><![CDATA[The <kbd>objectType</kbd> package installation plugin installs new object types. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/object-type/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.objectTypeDefinition.info"><![CDATA[The <kbd>objectTypeDefinition</kbd> package installation plugin installs new object type definitions. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/object-type-definition/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.option.info"><![CDATA[The <kbd>option</kbd> package installation plugin installs new options. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/option/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.packageInstallationPlugin.info"><![CDATA[The <kbd>packageInstallationPlugin</kbd> package installation plugin installs new package installation plugins. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/pip/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.page.info"><![CDATA[The <kbd>page</kbd> package installation plugin installs new pages. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/page/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.smiley.info"><![CDATA[The <kbd>smiley</kbd> package installation plugin installs new smileys. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/smiley/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.templateListener.info"><![CDATA[The <kbd>templateListener</kbd> package installation plugin installs new template listeners. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/template-listener/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.userGroupOption.info"><![CDATA[The <kbd>userGroupOption</kbd> package installation plugin installs new user group options. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/user-group-option/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.userMenu.info"><![CDATA[The <kbd>userMenu</kbd> package installation plugin installs new menu items for the user menu. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/user-menu/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.userNotificationEvent.info"><![CDATA[The <kbd>userNotificationEvent</kbd> package installation plugin installs new user notification events. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/user-notification-event/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.userOption.info"><![CDATA[The <kbd>userOption</kbd> package installation plugin installs new user options and profile fields. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/user-option/" class="externalURL">developer documentation</a>.]]></item>
+               <item name="wcf.acp.pip.userProfileMenu.info"><![CDATA[The <kbd>userProfileMenu</kbd> package installation plugin installs new menu items for the user profile menu. You can find more information in the <a href="https://docs.woltlab.com/latest/package/pip/user-profile-menu/" class="externalURL">developer documentation</a>.]]></item>
                <item name="wcf.acp.pip.language.languageItemValue.de.description"><![CDATA[Helpful code fragments: <kbd>{literal}{if LANGUAGE_USE_INFORMAL_VARIANT}{else}{/if}{/literal}</kbd>, <kbd>„“</kbd>]]></item>
                <item name="wcf.acp.pip.language.languageItemValue.en.description"><![CDATA[Helpful code fragments: <kbd>“”</kbd>]]></item>
+               <item name="wcf.acp.pip.option.optionName.error.notLowercase"><![CDATA[The option name may not include uppercase letters.]]></item>
+               <item name="wcf.acp.pip.option.optionName.error.pattern"><![CDATA[The option name must consist of lowercase latin letters, digits and underscores only. The first and last character must be letters.]]></item>
        </category>
        <category name="wcf.acp.reactionType">
-               <item name="wcf.acp.reactionType.delete.confirmMessage"><![CDATA[Do you really want to delete the reaction type <span class="confirmationObject">{$reactionType->getTitle()}</span>?]]></item>
                <item name="wcf.acp.reactionType.type"><![CDATA[Reaction Type]]></item>
                <item name="wcf.acp.reactionType.image"><![CDATA[Reaction File]]></item>
                <item name="wcf.acp.reactionType.showOrder.description"><![CDATA[The reaction type will be shown after the selected reaction type.]]></item>
@@ -2597,6 +2621,9 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.rebuildData.com.woltlab.wcf.activityPointEvent.description"><![CDATA[Recalculates points per activity.]]></item>
                <item name="wcf.acp.rebuildData.com.woltlab.wcf.activityPointItems"><![CDATA[Rebuilds Point Activities]]></item>
                <item name="wcf.acp.rebuildData.com.woltlab.wcf.activityPointItems.description"><![CDATA[Recalculates the number of activities for which users get points and rebuilds user ranks.]]></item>
+               <item name="wcf.acp.rebuildData.com.woltlab.wcf.searchEngineConvertInnoDb.description"><![CDATA[Migrates the search engine tables to the InnoDB storage engine.]]></item>
+               <item name="wcf.acp.rebuildData.com.woltlab.wcf.searchEngineConvertInnoDb"><![CDATA[Migrate Search Index to InnoDB]]></item>
+               <item name="wcf.acp.rebuildData.rebuildAll"><![CDATA[Rebuild All]]></item>
        </category>
        <category name="wcf.acp.rescueMode">
                <item name="wcf.acp.rescueMode"><![CDATA[Rescue Mode]]></item>
@@ -2651,7 +2678,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
 <p>Instructions for submitting the sitemap:</p>
 <ul class="nativeList">
        <li><a href="https://support.google.com/webmasters/answer/7451001" class="externalURL">Google</a></li>
-       <li><a href="https://www.bing.com/webmaster/help/how-to-submit-sitemaps-82a15bd4" class="externalURL">Bing</a></li>
+       <li><a href="https://www.bing.com/webmasters/help/sitemaps-3b5cf6ed" class="externalURL">Bing</a></li>
 </ul>]]></item>
                <item name="wcf.acp.sitemap.objectType.com.woltlab.wcf.sitemap.object.user"><![CDATA[Users]]></item>
                <item name="wcf.acp.sitemap.objectType.com.woltlab.wcf.sitemap.object.articleCategory"><![CDATA[Article categories]]></item>
@@ -2699,12 +2726,12 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.systemCheck.php.version"><![CDATA[Version]]></item>
                <item name="wcf.acp.systemCheck.php.version.description"><![CDATA[PHP {$phpVersions[minimum]} or newer is required, the following PHP series are strongly recommended: {implode from=$phpVersions[recommended] item=$recommended}{$recommended}{/implode}.]]></item>
                <item name="wcf.acp.systemCheck.mysql.version"><![CDATA[MySQL]]></item>
-               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[MySQL {$mysqlVersions[mysql][5]} or MySQL {$mysqlVersions[mysql][8]} or MariaDB {$mysqlVersions[mariadb][5]} or MariaDB {$mysqlVersions[mariadb][10]} are required at minimum, but it’s strongly recommended to always use the latest available version.]]></item>
+               <item name="wcf.acp.systemCheck.mysql.version.description"><![CDATA[MySQL {$mysqlVersions[mysql][5]} or MySQL {$mysqlVersions[mysql][8]} or MariaDB {$mysqlVersions[mariadb][10]} are required at minimum, but it’s strongly recommended to always use the latest available version.]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys"><![CDATA[Foreign Keys]]></item>
                <item name="wcf.acp.systemCheck.mysql.foreignKeys.description"><![CDATA[Foreign Keys are created with the installation and are required for the software to work.]]></item>
                <item name="wcf.acp.systemCheck.mysql.searchEngine"><![CDATA[Search]]></item>
-               <item name="wcf.acp.systemCheck.mysql.searchEngine.description"><![CDATA[All tables used for the search must be configured with the MyISAM storage engine.]]></item>
-               <item name="wcf.acp.systemCheck.mysql.searchEngine.incorrect"><![CDATA[The following tables using an incorrect storage engine (expected storage engine <code>MyISAM</code>): {implode from=$results[mysql][searchEngine][incorrectTables] key=tableName item=engine glue=", "}<code>{$tableName}</code> (<code>{$engine}</code>){/implode}.]]></item>
+               <item name="wcf.acp.systemCheck.mysql.searchEngine.description"><![CDATA[All tables used for the search must be configured with the InnoDB storage engine.]]></item>
+               <item name="wcf.acp.systemCheck.mysql.searchEngine.incorrect"><![CDATA[The following tables using an incorrect storage engine (expected storage engine <code>InnoDB</code>): {implode from=$results[mysql][searchEngine][incorrectTables] key=tableName item=engine glue=", "}<code>{$tableName}</code> (<code>{$engine}</code>){/implode}. Use the <a href="{link controller='RebuildData'}{/link}">Rebuild Data Page</a> to migrate to the correct storage engine.]]></item>
                <item name="wcf.acp.systemCheck.php.extension"><![CDATA[Extensions]]></item>
                <item name="wcf.acp.systemCheck.php.extension.description"><![CDATA[The official PHP extensions provide additional capabilities and features that are required for the software to work.]]></item>
                <item name="wcf.acp.systemCheck.php.memoryLimit"><![CDATA[Available Memory (“memory_limit”)]]></item>
@@ -2716,11 +2743,10 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.systemCheck.directories.writable"><![CDATA[Writable Directories]]></item>
                <item name="wcf.acp.systemCheck.directories.writable.description"><![CDATA[Some directories are being written to during the normal operation. The user that runs the PHP process must have write access.]]></item>
                <item name="wcf.acp.systemCheck.php.gd"><![CDATA[Supported formats of the GD library]]></item>
-               <item name="wcf.acp.systemCheck.php.gd.description"><![CDATA[The GD library must be installed with support for the formats “jpeg” and “png”.]]></item>
+               <item name="wcf.acp.systemCheck.php.gd.description"><![CDATA[The GD library must be installed with support for the formats “jpeg”, “png” and “webp”.]]></item>
        </category>
        <category name="wcf.acp.updateServer">
                <item name="wcf.acp.updateServer.add"><![CDATA[Add Server]]></item>
-               <item name="wcf.acp.updateServer.delete.sure"><![CDATA[Do you really want to delete the server <span class="confirmationObject">{$updateServer->serverURL}</span>?]]></item>
                <item name="wcf.acp.updateServer.edit"><![CDATA[Edit Server]]></item>
                <item name="wcf.acp.updateServer.errorMessage"><![CDATA[Error Message]]></item>
                <item name="wcf.acp.updateServer.list"><![CDATA[Package Servers]]></item>
@@ -2734,7 +2760,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.updateServer.serverURL"><![CDATA[Address]]></item>
                <item name="wcf.acp.updateServer.serverURL.error.invalid"><![CDATA[The address is invalid.]]></item>
                <item name="wcf.acp.updateServer.serverURL.error.woltlab"><![CDATA[The official servers are already set up and correctly configured.]]></item>
-               <item name="wcf.acp.updateServer.serverURL.error.duplicate"><![CDATA[The given server already exists. You can <a href="{link controller="PackageUpdateServerEdit" id=$errorType[duplicate]->packageUpdateServerID}{/link}"><strong>edit this server instead</strong></a>.]]></item>
+               <item name="wcf.acp.updateServer.serverURL.error.duplicate"><![CDATA[The entered server already exists. You can <a href="{link controller="PackageUpdateServerEdit" id=$errorType[duplicate]->packageUpdateServerID}{/link}"><strong>edit this server instead</strong></a>.]]></item>
                <item name="wcf.acp.updateServer.status"><![CDATA[Status]]></item>
                <item name="wcf.acp.updateServer.lastUpdateTime"><![CDATA[Last Access]]></item>
        </category>
@@ -2751,7 +2777,6 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
        </category>
        <category name="wcf.acp.smiley">
                <item name="wcf.acp.smiley.list"><![CDATA[Smilies]]></item>
-               <item name="wcf.acp.smiley.delete.sure"><![CDATA[Do you really want to delete the smiley <span class="confirmationObject">{$smiley->getTitle()}</span>?]]></item>
                <item name="wcf.acp.smiley.add"><![CDATA[Add Smiley]]></item>
                <item name="wcf.acp.smiley.edit"><![CDATA[Edit Smiley]]></item>
                <item name="wcf.acp.smiley.title"><![CDATA[Title]]></item>
@@ -2767,7 +2792,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.smiley.aliases.error.notUnique"><![CDATA[At least one alternative smiley code is already in use by another smiley.]]></item>
                <item name="wcf.acp.smiley.smileyPath"><![CDATA[Smiley Path]]></item>
                <item name="wcf.acp.smiley.smileyPath.description"><![CDATA[The smiley path is relative to “{$__wcf->getPath()}”.]]></item>
-               <item name="wcf.acp.smiley.smileyPath.error.notFound"><![CDATA[Unable to find a file on given path.]]></item>
+               <item name="wcf.acp.smiley.smileyPath.error.notFound"><![CDATA[Unable to find a file on entered path.]]></item>
                <item name="wcf.acp.smiley.smileyFile"><![CDATA[Smiley File]]></item>
                <item name="wcf.acp.smiley.smileyFile2x"><![CDATA[Smiley File (HD)]]></item>
                <item name="wcf.acp.smiley.smileyFile2x.description"><![CDATA[Optional image used for display on high resolution displays such as Apple Retina or 4K/UHD-displays. Image must be double times the dimensions of the normal image to work.]]></item>
@@ -2828,7 +2853,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.style.copyStyle.confirmMessage"><![CDATA[Do you really want to duplicate the style <span class="confirmationObject">{$style->styleName}</span>?]]></item>
                <item name="wcf.acp.style.coverPhoto"><![CDATA[Default Cover Photo]]></item>
                <item name="wcf.acp.style.coverPhoto.delete.confirmMessage"><![CDATA[Do you really want to delete the default cover photo? Once deleted, the global default photo will be used instead.]]></item>
-               <item name="wcf.acp.style.coverPhoto.description"><![CDATA[The image must be at least {$coverPhotoMinWidth}×{$coverPhotoMinHeight} pixels large, acceptable image types are GIF, JPG, JPEG and PNG.]]></item>
+               <item name="wcf.acp.style.coverPhoto.description"><![CDATA[The image must be at least {$coverPhotoMinWidth}×{$coverPhotoMinHeight} pixels large, acceptable image types are GIF, JPG, JPEG, PNG and WEBP.]]></item>
                <item name="wcf.acp.style.customAssets"><![CDATA[Additional Images]]></item>
                <item name="wcf.acp.style.customAssets.description"><![CDATA[{literal}The uploaded images will be stored with the same file name within the <kbd>custom/</kbd> folder in the style’s image folder. You can retrieve the folder’s path within the CSS by using <kbd>#{$style_image_path}custom/</kbd>.{/literal}]]></item>
                <item name="wcf.acp.style.delete.confirmMessage"><![CDATA[Do you really want to delete the style <span class="confirmationObject">{$style->styleName}</span>?]]></item>
@@ -2904,8 +2929,8 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.style.globals.fontSizeTitle"><![CDATA[Font Size (Page Title)]]></item>
                <item name="wcf.acp.style.globals.fontFamilyGoogle"><![CDATA[Font Face]]></item>
                <item name="wcf.acp.style.globals.fontFamilyGoogle.description"><![CDATA[The selected font face will be downloaded when saving the style and afterwards will be delivered as a web font to your users without connecting to external services.]]></item>
-               <item name="wcf.acp.style.globals.fontFamilyGoogle.error.downloadFailed"><![CDATA[Downloading the given font face failed.]]></item>
-               <item name="wcf.acp.style.globals.fontFamilyGoogle.error.downloadFailed.notFound"><![CDATA[The given font face could not be found.]]></item>
+               <item name="wcf.acp.style.globals.fontFamilyGoogle.error.downloadFailed"><![CDATA[Downloading the entered font face failed.]]></item>
+               <item name="wcf.acp.style.globals.fontFamilyGoogle.error.downloadFailed.notFound"><![CDATA[The entered font face could not be found.]]></item>
                <item name="wcf.acp.style.globals.fontFamilyFallback"><![CDATA[Font Face (Fallback)]]></item>
                <item name="wcf.acp.style.favicon"><![CDATA[Individual Favicon]]></item>
                <item name="wcf.acp.style.favicon.description"><![CDATA[Upload an 256×256 pixels image, acceptable image types are JPG and PNG. The uploaded image will be used to derive all required favicon sizes.]]></item>
@@ -2914,7 +2939,6 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
        <category name="wcf.acp.tag">
                <item name="wcf.acp.tag.add"><![CDATA[Add Tag]]></item>
                <item name="wcf.acp.tag.edit"><![CDATA[Edit Tag]]></item>
-               <item name="wcf.acp.tag.delete.sure"><![CDATA[Do you really want to delete the tag <span class="confirmationObject">{$tag}</span>?]]></item>
                <item name="wcf.acp.tag.error.languageID.notFound"><![CDATA[Selected language is invalid.]]></item>
                <item name="wcf.acp.tag.languageID"><![CDATA[Language]]></item>
                <item name="wcf.acp.tag.list"><![CDATA[Tags]]></item>
@@ -2945,6 +2969,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.template.group.copy"><![CDATA[Copy Template Group]]></item>
                <item name="wcf.acp.template.group.edit"><![CDATA[Edit Template Group]]></item>
                <item name="wcf.acp.template.group.templates"><![CDATA[Templates]]></item>
+               <item name="wcf.acp.template.group.styles"><![CDATA[Styles]]></item>
                <item name="wcf.acp.template.error.noGroups"><![CDATA[You must create a <a href="{link controller='TemplateGroupAdd'}{/link}">template group</a> first.]]></item>
                <item name="wcf.acp.template.group.folderName"><![CDATA[Directory]]></item>
                <item name="wcf.acp.template.group.parentTemplateGroup"><![CDATA[Parent Template Group]]></item>
@@ -2952,11 +2977,9 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.template.group.folderName.error.invalid"><![CDATA[The specified directory is invalid.]]></item>
                <item name="wcf.acp.template.group.folderName.error.notUnique"><![CDATA[The specified directory is already in use by another template group.]]></item>
                <item name="wcf.acp.template.group.parentTemplateGroupID.error.invalid"><![CDATA[The specified Parent Template Group is invalid.]]></item>
-               <item name="wcf.acp.template.group.delete.sure"><![CDATA[Do you really want to remove the template group <span class="confirmationObject">{$templateGroup->getName()}</span>?]]></item>
                <item name="wcf.acp.template.source"><![CDATA[Template Source Code]]></item>
                <item name="wcf.acp.template.name.error.notUnique"><![CDATA[This name is already taken by a different template.]]></item>
                <item name="wcf.acp.template.name.error.invalid"><![CDATA[The specified name is invalid.]]></item>
-               <item name="wcf.acp.template.delete.sure"><![CDATA[Do you really want to delete the template <span class="confirmationObject">{$template->templateName}</span>?]]></item>
        </category>
        <category name="wcf.acp.user">
                <item name="wcf.acp.user.add"><![CDATA[Add User]]></item>
@@ -2973,7 +2996,6 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.user.ban"><![CDATA[Ban]]></item>
                <item name="wcf.acp.user.unban"><![CDATA[Unban]]></item>
                <item name="wcf.acp.user.ban.sure"><![CDATA[Do you really want to ban this user?]]></item>
-               <item name="wcf.acp.user.delete.sure"><![CDATA[Do you really want to delete the user <span class="confirmationObject">{$user->username}</span>?]]></item>
                <item name="wcf.acp.user.edit"><![CDATA[Edit User]]></item>
                <item name="wcf.acp.user.edit.warning.selfEdit"><![CDATA[Warning! You are editing your user account, any changes could result in yourself being locked out of the Administration Control Panel.]]></item>
                <item name="wcf.acp.user.exportEmailAddress"><![CDATA[Export Email Addresses]]></item>
@@ -2996,7 +3018,7 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                <item name="wcf.acp.user.merge.warning"><![CDATA[The process to merge users does not update all counters and references due to technical limitations. You’re required to manually run the rebuild data tasks in the maintenance section afterwards in order to solve any conflicts or inconsistencies.]]></item>
                <item name="wcf.acp.user.revertChanges"><![CDATA[Revert Changes To Contents]]></item>
                <item name="wcf.acp.user.revertChanges.timeframe"><![CDATA[Time Period]]></item>
-               <item name="wcf.acp.user.revertChanges.timeframe.description"><![CDATA[Changes made in the previous days will be reverted to the newest version, that is either older than the given number of days or made by an unrelated user.]]></item>
+               <item name="wcf.acp.user.revertChanges.timeframe.description"><![CDATA[Changes made in the previous days will be reverted to the newest version, that is either older than the entered number of days or made by an unrelated user.]]></item>
                <item name="wcf.acp.user.revertChanges.markedUsers"><![CDATA[Revert changes by the following users]]></item>
                <item name="wcf.acp.user.search"><![CDATA[Search Users]]></item>
                <item name="wcf.acp.user.search.conditions.profile"><![CDATA[Profile]]></item>
@@ -3027,14 +3049,12 @@ You can define the default sender in “Configuration » Options » General » E
                <item name="wcf.acp.user.option.access"><![CDATA[Access]]></item>
                <item name="wcf.acp.user.option.add"><![CDATA[Add Custom User Field]]></item>
                <item name="wcf.acp.user.option.category.add"><![CDATA[Add Custom User Field Category]]></item>
-               <item name="wcf.acp.user.option.category.delete.sure"><![CDATA[Do you really want to delete the category <span class="confirmationObject">{$category->getTitle()}</span>?]]></item>
                <item name="wcf.acp.user.option.category.edit"><![CDATA[Edit Custom User Field Category]]></item>
                <item name="wcf.acp.user.option.category.options"><![CDATA[Fields]]></item>
                <item name="wcf.acp.user.option.category.list"><![CDATA[Custom User Field Categories]]></item>
                <item name="wcf.acp.user.option.categoryName"><![CDATA[Category]]></item>
                <item name="wcf.acp.user.option.defaultValue"><![CDATA[Default Value]]></item>
                <item name="wcf.acp.user.option.defaultValue.description"><![CDATA[Default option value suggested on first edit.]]></item>
-               <item name="wcf.acp.user.option.delete.sure"><![CDATA[Do you really want to delete the field <span class="confirmationObject">{$option->getTitle()}</span>?]]></item>
                <item name="wcf.acp.user.option.description"><![CDATA[Description]]></item>
                <item name="wcf.acp.user.option.edit"><![CDATA[Edit Custom User Field]]></item>
                <item name="wcf.acp.user.option.editable"><![CDATA[Editable by]]></item>
@@ -3042,6 +3062,9 @@ You can define the default sender in “Configuration » Options » General » E
                <item name="wcf.acp.user.option.editable.2"><![CDATA[Administrator]]></item>
                <item name="wcf.acp.user.option.editable.3"><![CDATA[Owner and Administrator]]></item>
                <item name="wcf.acp.user.option.editable.6"><![CDATA[Owner during registration and Administrator]]></item>
+               <item name="wcf.acp.user.option.labeledUrl"><![CDATA[URL]]></item>
+               <item name="wcf.acp.user.option.labeledUrl.description"><![CDATA[If the field type is “labeledUrl”, the URL to be linked to must be entered here. Use <span class="inlineCode">%s</span> as placeholder for the user input.]]></item>
+               <item name="wcf.acp.user.option.labeledUrl.error.invalid"><![CDATA[The URL does not contain the placeholder <span class="inlineCode">%s</span>.]]></item>
                <item name="wcf.acp.user.option.optionType"><![CDATA[Option Type]]></item>
                <item name="wcf.acp.user.option.optionType.description"><![CDATA[The option names usually equal the HTML-tag used as input element.]]></item>
                <item name="wcf.acp.user.option.askDuringRegistration"><![CDATA[Field will be visible during registration]]></item>
@@ -3079,14 +3102,12 @@ You can define the default sender in “Configuration » Options » General » E
                <item name="wcf.acp.user.rank.cssClassName.description"><![CDATA[You can select a predefined appearance or provide your own <abbr title="Cascading Style Sheets">CSS</abbr> class name.]]></item>
                <item name="wcf.acp.user.rank.cssClassName.error.invalid"><![CDATA[The entered CSS class name is invalid.]]></item>
                <item name="wcf.acp.user.rank.currentImage"><![CDATA[Current Rank Image]]></item>
-               <item name="wcf.acp.user.rank.delete.sure"><![CDATA[Do you really want to delete the user rank <span class="confirmationObject">{$userRank->getTitle()}</span>?]]></item>
                <item name="wcf.acp.user.rank.edit"><![CDATA[Edit User Rank]]></item>
                <item name="wcf.acp.user.rank.hideTitle"><![CDATA[Hide title]]></item>
                <item name="wcf.acp.user.rank.hideTitle.description"><![CDATA[Hides the title of this rank. Does not work for users that have an individual title set.]]></item>
                <item name="wcf.acp.user.rank.hideTitle.error.rankImage"><![CDATA[This option requires a valid rank image.]]></item>
                <item name="wcf.acp.user.rank.image"><![CDATA[Rank Image]]></item>
                <item name="wcf.acp.user.rank.list"><![CDATA[User Ranks]]></item>
-               <item name="wcf.acp.user.rank.rankImage.description"><![CDATA[The path must be either relative to WCF’s directory or absolute.]]></item>
                <item name="wcf.acp.user.rank.requiredGender.description"><![CDATA[The rank can be restricted to a specific gender.]]></item>
                <item name="wcf.acp.user.rank.requiredPoints"><![CDATA[Points]]></item>
                <item name="wcf.acp.user.rank.requiredPoints.description"><![CDATA[The required number of activity points to obtain this rank.]]></item>
@@ -3144,8 +3165,13 @@ the lost password form <a href="{link controller='LostPassword' isHtmlEmail=true
                <item name="wcf.acp.user.authentication.failure.environment.user"><![CDATA[User]]></item>
                <item name="wcf.acp.user.authentication.failure.environment.admin"><![CDATA[Administration]]></item>
                <item name="wcf.acp.user.authentication.failure.time"><![CDATA[Date]]></item>
+               <item name="wcf.acp.user.authentication.failure.time.start"><![CDATA[Date from]]></item>
+               <item name="wcf.acp.user.authentication.failure.time.end"><![CDATA[Date to]]></item>
                <item name="wcf.acp.user.authentication.failure.password"><![CDATA[Invalid Password]]></item>
                <item name="wcf.acp.user.authentication.failure.username"><![CDATA[Unknown Username]]></item>
+               <item name="wcf.acp.user.authentication.failure.validationError"><![CDATA[Error]]></item>
+               <item name="wcf.acp.user.authentication.failure.validationError.invalidPassword"><![CDATA[Incorrect password]]></item>
+               <item name="wcf.acp.user.authentication.failure.validationError.invalidUsername"><![CDATA[Unknown user]]></item>
                <item name="wcf.acp.user.activation.mail.subject"><![CDATA[Your account on the website: {@PAGE_TITLE|language} has been approved]]></item>
                <item name="wcf.acp.user.activation.mail.html.headline"><![CDATA[Dear {$mailbox->getUser()->username},]]></item>
                <item name="wcf.acp.user.activation.mail.html.text"><![CDATA[
@@ -3167,7 +3193,7 @@ Your account on the website: {@PAGE_TITLE|language} [URL:{link isEmail=true}{/li
                <item name="wcf.acp.user.bulkProcessing.removeFromUserGroups"><![CDATA[Remove from User Groups]]></item>
                <item name="wcf.acp.user.bulkProcessing.sendMail"><![CDATA[Send Email to Users]]></item>
                <item name="wcf.acp.user.bulkProcessing.success"><![CDATA[The selected action has been executed and affected {#$affectedObjectCount} user{if $affectedObjectCount != 1}s{/if}.]]></item>
-               <item name="wcf.acp.user.bulkProcessing.warning"><![CDATA[Heads up! The bulk processing executes all actions below on all users matching the selected conditions without any further confirmation prompt!]]></item>
+               <item name="wcf.acp.user.bulkProcessing.warning"><![CDATA[<strong>Attention</strong>: The bulk processing executes all actions below on all users matching the selected conditions without any further confirmation prompt!]]></item>
                <item name="wcf.acp.user.profileMenu.sort"><![CDATA[User Profile Menu Show Order]]></item>
                <item name="wcf.acp.user.action.sendMail"><![CDATA[Send Email]]></item>
                <item name="wcf.acp.user.action.sendNewPassword"><![CDATA[Send New Password]]></item>
@@ -3176,6 +3202,12 @@ Your account on the website: {@PAGE_TITLE|language} [URL:{link isEmail=true}{/li
                <item name="wcf.acp.user.action.unconfirmEmail"><![CDATA[Unconfirm Email Address]]></item>
                <item name="wcf.acp.user.exportGdpr"><![CDATA[Export Personal Data (GDPR)]]></item>
                <item name="wcf.acp.user.coverPhoto.description"><![CDATA[You can upload a cover photo on their user profile page.]]></item>
+               <item name="wcf.acp.user.security.multifactor"><![CDATA[Multi-factor authentication]]></item>
+               <item name="wcf.acp.user.security.multifactor.active"><![CDATA[Active]]></item>
+               <item name="wcf.acp.user.security.multifactor.active.description"><![CDATA[This user account is protected by a second factor.]]></item>
+               <item name="wcf.acp.user.security.multifactor.disable"><![CDATA[Completely Disable Multi-factor Authentication]]></item>
+               <item name="wcf.acp.user.security.multifactor.disable.description"><![CDATA[Completely disables multi-factor authentication for the account <strong>{$user->username}</strong>. The user will need to setup up multi-factor authentication from scratch if this checkbox is checked.<br>
+<strong>Attention</strong>: Multi-factor authentication is actively set up by users to better protect their accounts. Please make sure to properly authenticate the user before disabling multi-factor authentication for their account.]]></item>
        </category>
        <category name="wcf.acp.worker">
                <item name="wcf.acp.worker.abort.confirmMessage"><![CDATA[Do you really want to terminate the execution?]]></item>
@@ -3224,10 +3256,13 @@ Your account on the website: {@PAGE_TITLE|language} [URL:{link isEmail=true}{/li
                <item name="wcf.article.like.notification.title.stacked"><![CDATA[{#$count} users reacted to your article]]></item>
                <item name="wcf.article.like.notification.message"><![CDATA[<strong>{$author}</strong> reacted to your article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
                <item name="wcf.article.like.notification.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} reacted to article <strong>{$article->getTitle()}</strong> ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
+               <item name="wcf.article.bbcode.type"><![CDATA[Article]]></item>
        </category>
        <category name="wcf.attachment">
-               <item name="wcf.attachment.file.info"><![CDATA[({@$attachment->filesize|filesize}, downloaded <strong>{#$attachment->downloads}</strong> times{if $attachment->downloads > 0}, last: {@$attachment->lastDownloadTime|time}{/if})]]></item>
+               <item name="wcf.attachment.file.info"><![CDATA[{@$attachment->filesize|filesize} – {plural value=$attachment->downloads 1="1 Download" other="# Downloads"}]]></item>
+               <item name="wcf.attachment.file.title"><![CDATA[Download file “{$attachment->filename}”]]></item>
                <item name="wcf.attachment.image.info"><![CDATA[{@$attachment->filesize|filesize}, {#$attachment->width}×{#$attachment->height}, viewed {#$attachment->downloads} times]]></item>
+               <item name="wcf.attachment.image.title"><![CDATA[View image “{$attachment->filename}”]]></item>
                <item name="wcf.attachment.files"><![CDATA[Files]]></item>
                <item name="wcf.attachment.images"><![CDATA[Images]]></item>
                <item name="wcf.attachment.attachments"><![CDATA[Attachments]]></item>
@@ -3274,13 +3309,16 @@ Allowed extensions: {', '|implode:$attachmentHandler->getFormattedAllowedExtensi
                <item name="wcf.bbcode.spoiler.text"><![CDATA[(Hidden Content)]]></item>
                <item name="wcf.bbcode.spoiler.simplified"><![CDATA[(Hidden Content)]]></item>
        </category>
+       <category name="wcf.button">
+               <item name="wcf.button.delete.confirmMessage"><![CDATA[Do you really want to delete <strong>{$objectTitle}</strong>?]]></item>
+       </category>
        <category name="wcf.captcha">
                <item name="wcf.captcha.useNoCaptcha"><![CDATA[(No Captcha)]]></item>
                <item name="wcf.captcha.com.woltlab.wcf.recaptcha"><![CDATA[reCAPTCHA]]></item>
                <item name="wcf.captcha.com.woltlab.wcf.captchaQuestion"><![CDATA[Question]]></item>
        </category>
        <category name="wcf.captcha.question">
-               <item name="wcf.captcha.question.answer.error.false"><![CDATA[You have entered an incorrect answer.]]></item>
+               <item name="wcf.captcha.question.answer.error.false"><![CDATA[The entered answer is incorrect.]]></item>
                <item name="wcf.captcha.question.captcha"><![CDATA[Question]]></item>
                <item name="wcf.captcha.question.captcha.description"><![CDATA[Please answer the question respectively to solve the problem below.]]></item>
        </category>
@@ -3308,7 +3346,7 @@ Allowed extensions: {', '|implode:$attachmentHandler->getFormattedAllowedExtensi
        </category>
        <category name="wcf.cli">
                <item name="wcf.cli.help.noLongHelp"><![CDATA[There is no long help for the parameter "{$topic}".]]></item>
-               <item name="wcf.cli.help.language"><![CDATA[Forces the language with the given language code.]]></item>
+               <item name="wcf.cli.help.language"><![CDATA[Forces the language with the entered language code.]]></item>
                <item name="wcf.cli.help.version"><![CDATA[Displays the version number and exits.]]></item>
                <item name="wcf.cli.help.help"><![CDATA[Displays this help and exits.]]></item>
                <item name="wcf.cli.help.q"><![CDATA[Quiet: Display less information.]]></item>
@@ -3325,7 +3363,7 @@ Errors are:
                <item name="wcf.cli.worker.threads"><![CDATA[Requested number of parallel processes.]]></item>
                <item name="wcf.cli.worker.threads.windows"><![CDATA[Parallel processing using --threads is not available on Windows.]]></item>
                <item name="wcf.cli.worker.threadId"><![CDATA[Specifies the thread id when processing in parallel. Used internally when --threads is given.]]></item>
-               <item name="wcf.cli.worker.threadId.invalid"><![CDATA[The given thread id is not valid.]]></item>
+               <item name="wcf.cli.worker.threadId.invalid"><![CDATA[The entered thread id is not valid.]]></item>
                <item name="wcf.cli.error.help.noArguments"><![CDATA[The command "{$command}" does not support any parameters.]]></item>
                <item name="wcf.cli.error.language.notFound"><![CDATA[The language with the language code "{$languageCode}" could not be found.]]></item>
                <item name="wcf.cli.error.command.notFound"><![CDATA[The command "{$command}" could not be found. Type in "commands" to list available commands.]]></item>
@@ -3363,10 +3401,17 @@ Errors are:
                <item name="wcf.clipboard.item.com.woltlab.wcf.user.sendNewPassword.confirmMessage"><![CDATA[Do you really want to send a new password to {#$count} user{if $count != 1}s{/if}?]]></item>
                <item name="wcf.clipboard.item.com.woltlab.wcf.user.confirmEmail"><![CDATA[Confirm Email Address ({#$count})]]></item>
                <item name="wcf.clipboard.item.com.woltlab.wcf.user.unconfirmEmail"><![CDATA[Unconfirm Email Address ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.user.deleteUserContent"><![CDATA[Delete User Contents ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.moderation.queue.assignUserByClipboard"><![CDATA[Change Assigned User ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.moderation.queue.enableContent"><![CDATA[Approve Content ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.moderation.queue.removeActivationContent"><![CDATA[Delete Pending Content ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.moderation.queue.removeReport"><![CDATA[Close Report ({#$count})]]></item>
+               <item name="wcf.clipboard.item.com.woltlab.wcf.moderation.queue.removeReportContent"><![CDATA[Delete Reported Content ({#$count})]]></item>
                <item name="wcf.clipboard.label.com.woltlab.wcf.article.marked"><![CDATA[{if $count == 1}One Article{else}{#$count} Articles{/if}]]></item>
                <item name="wcf.clipboard.label.com.woltlab.wcf.media.marked"><![CDATA[{if $count == 1}One File{else}{#$count} Files{/if}]]></item>
                <item name="wcf.clipboard.label.com.woltlab.wcf.tag.marked"><![CDATA[{if $count == 1}One Tag{else}{#$count} Tags{/if}]]></item>
                <item name="wcf.clipboard.label.com.woltlab.wcf.user.marked"><![CDATA[{if $count == 1}One User{else}{#$count} Users{/if}]]></item>
+               <item name="wcf.clipboard.label.com.woltlab.wcf.moderation.queue.marked"><![CDATA[{plural value=$count 1='One Moderation Item' other='# Moderation Items'}]]></item>
        </category>
        <category name="wcf.comment">
                <item name="wcf.comment.add"><![CDATA[Write a comment …]]></item>
@@ -3402,7 +3447,7 @@ Errors are:
                <item name="wcf.contact.mail.subject"><![CDATA[New message via the contact form]]></item>
                <item name="wcf.contact.mail.plaintext"><![CDATA[Hello,
 
\80\9e{@$name}â\80\9c sent you a message on {@PAGE_TITLE|language} via the contact form:
\80\9c{@$name}â\80\9d sent you a message on {@PAGE_TITLE|language} via the contact form:
 
 Email: {@$emailAddress} {* this line ends with a space *}
 {foreach from=$options item=option}
@@ -3419,7 +3464,7 @@ Attachments:
 {/if}]]></item>
                <item name="wcf.contact.mail.html"><![CDATA[<h2>Hello,</h2>
 
-<p>â\80\9e{$name}â\80\9c sent you a message on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|language}</a> via the contact form:</p>
+<p>â\80\9c{$name}â\80\9d sent you a message on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|language}</a> via the contact form:</p>
 <p><br></p>
 <p>Email: <a href="mailto:{$emailAddress}">{$emailAddress}</a></p>
 {foreach from=$options item=option}
@@ -3454,7 +3499,6 @@ Attachments:
                <item name="wcf.acp.contact.option.edit"><![CDATA[Edit Input Field]]></item>
                <item name="wcf.acp.contact.recipients"><![CDATA[Recipients]]></item>
                <item name="wcf.acp.contact.recipient.add"><![CDATA[Add Recipient]]></item>
-               <item name="wcf.acp.contact.recipient.delete.confirmMessage"><![CDATA[Do you really want to delete the recipient <span class="confirmationObject">{$recipient}</span>?]]></item>
                <item name="wcf.acp.contact.recipient.edit"><![CDATA[Edit Recipient]]></item>
                <item name="wcf.acp.contact.recipient.isDisabled"><![CDATA[Disable recipient]]></item>
                <item name="wcf.acp.contact.recipient.name"><![CDATA[Display Name]]></item>
@@ -3463,8 +3507,8 @@ Attachments:
        <category name="wcf.acp.content">
                <item name="wcf.acp.content.removeContent"><![CDATA[Delete User’s Content]]></item>
                <item name="wcf.acp.content.provider.removeContentSectionTitle"><![CDATA[Content]]></item>
-               <item name="wcf.acp.content.provider.removeContentInfo"><![CDATA[Select which types of content created by “<a href="{link controller='UserEdit' id=$user->userID}{/link}">{$user->username}</a>” should be deleted.]]></item>
-               <item name="wcf.acp.content.provider.removeContentWarning"><![CDATA[<strong>Heads up</strong>: The content will be deleted irrevocably and without any further confirmation prompt!]]></item>
+               <item name="wcf.acp.content.provider.removeContentInfo"><![CDATA[Select which types of content created by {if $users|count == 1}“<a href="{link controller='UserEdit' id=$user->userID}{/link}">{$user->username}</a>”{else}{#$users|count} users{/if} should be deleted.]]></item>
+               <item name="wcf.acp.content.provider.removeContentWarning"><![CDATA[<strong>Attention</strong>: The content will be deleted irrevocably and without any further confirmation prompt!]]></item>
                <item name="wcf.acp.content.provider.com.woltlab.wcf.comment"><![CDATA[Comments]]></item>
                <item name="wcf.acp.content.provider.com.woltlab.wcf.commentResponse"><![CDATA[Comment Responses]]></item>
                <item name="wcf.acp.content.provider.com.woltlab.wcf.article"><![CDATA[Articles]]></item>
@@ -3746,17 +3790,17 @@ Attachments:
                <item name="wcf.editor.image.edit"><![CDATA[Edit Image]]></item>
                <item name="wcf.editor.image.insert"><![CDATA[Insert Image]]></item>
                <item name="wcf.editor.image.link"><![CDATA[Link]]></item>
-               <item name="wcf.editor.image.link.error.invalid"><![CDATA[You have entered an invalid link.]]></item>
+               <item name="wcf.editor.image.link.error.invalid"><![CDATA[The entered link is invalid.]]></item>
                <item name="wcf.editor.image.float"><![CDATA[Float]]></item>
                <item name="wcf.editor.image.float.left"><![CDATA[Left]]></item>
                <item name="wcf.editor.image.float.right"><![CDATA[Right]]></item>
                <item name="wcf.editor.image.source"><![CDATA[Source]]></item>
                <item name="wcf.editor.image.source.error.blocked"><![CDATA[Images from external sources have been disabled, please use the file attachment function.]]></item>
                <item name="wcf.editor.image.source.error.insecure"><![CDATA[Insecure sources (“http://”) for images have been disabled, please use secure sources only (“https://”).]]></item>
-               <item name="wcf.editor.image.source.error.invalid"><![CDATA[You have entered an invalid link.]]></item>
+               <item name="wcf.editor.image.source.error.invalid"><![CDATA[The entered link is invalid.]]></item>
                <item name="wcf.editor.link.add"><![CDATA[Insert Link]]></item>
                <item name="wcf.editor.link.edit"><![CDATA[Edit Link]]></item>
-               <item name="wcf.editor.link.error.invalid"><![CDATA[You have entered an invalid link.]]></item>
+               <item name="wcf.editor.link.error.invalid"><![CDATA[The entered link is invalid.]]></item>
                <item name="wcf.editor.link.unlink"><![CDATA[Unlink]]></item>
                <item name="wcf.editor.link.url"><![CDATA[Link]]></item>
                <item name="wcf.editor.link.text"><![CDATA[Text]]></item>
@@ -3767,7 +3811,7 @@ Attachments:
                <item name="wcf.editor.quote.title"><![CDATA[{if $author}Quote from {@$author}{else}Quote{/if}]]></item>
                <item name="wcf.editor.quote.url"><![CDATA[Link]]></item>
                <item name="wcf.editor.quote.url.description"><![CDATA[Optional: Specify the link to the source.]]></item>
-               <item name="wcf.editor.quote.url.error.invalid"><![CDATA[You have entered an invalid link.]]></item>
+               <item name="wcf.editor.quote.url.error.invalid"><![CDATA[The entered link is invalid.]]></item>
                <item name="wcf.editor.source.error.active"><![CDATA[Please return to the normal view before submitting.]]></item>
                <item name="wcf.editor.spoiler.label"><![CDATA[Label]]></item>
                <item name="wcf.editor.spoiler.label.description"><![CDATA[Optional: Specify the label for the spoiler toggle button.]]></item>
@@ -3895,6 +3939,11 @@ Attachments:
                <item name="wcf.global.button.showSidebarRight"><![CDATA[Sidebar Right]]></item>
                <item name="wcf.global.button.showMenu"><![CDATA[Show Menu]]></item>
                <item name="wcf.global.button.hideMenu"><![CDATA[Hide Menu]]></item>
+               <item name="wcf.global.rss.copy"><![CDATA[Copy Link]]></item>
+               <item name="wcf.global.rss.copy.success"><![CDATA[The link has been copied successfully.]]></item>
+               <item name="wcf.global.rss.accessToken.info"><![CDATA[The link to the anonymous RSS feed only contains contents that guests can access. The link to the personalized RSS feed contains all contents that you can access.]]></item>
+               <item name="wcf.global.rss.withAccessToken"><![CDATA[Personalized RSS Feed]]></item>
+               <item name="wcf.global.rss.withoutAccessToken"><![CDATA[Anonymous RSS Feed]]></item>
        </category>
        <category name="wcf.global.form">
                <item name="wcf.global.form.boolean.no"><![CDATA[No]]></item>
@@ -3913,6 +3962,8 @@ Attachments:
                <item name="wcf.global.form.error.lessThan.javaScript"><![CDATA[{literal}The entered value has to be less than {#$lessThan}.{/literal}]]></item>
                <!-- /deprecated since 2.1 -->
                <item name="wcf.global.form.required"><![CDATA[Required fields]]></item>
+               <item name="wcf.global.form.password.button.hide"><![CDATA[Hide]]></item>
+               <item name="wcf.global.form.password.button.show"><![CDATA[Show]]></item>
        </category>
        <category name="wcf.form">
                <item name="wcf.form.field.className"><![CDATA[Class]]></item>
@@ -3953,9 +4004,9 @@ Attachments:
                <item name="wcf.form.field.email.error.invalidEmail"><![CDATA[The entered text is no valid email address.]]></item>
                <item name="wcf.form.field.email.error.maximumLength"><![CDATA[The entered email address{if $language|isset} for language “{$language}”{/if} contains {#$length} character{if $length !== 1}s{/if} but it may not be longer than {#$maximumLength} character{if $maximumLength !== 1}s{/if}.]]></item>
                <item name="wcf.form.field.upload.error.maximumFilesize"><![CDATA[The file “{$file->getFilename()}” may have a maximum size of {$maximumFilesize|filesize}.]]></item>
-               <item name="wcf.form.field.upload.error.minimumImageWidth"><![CDATA[The file â\80\9e{$file->getFilename()}â\80\9c may have a minimum width of {#$minimumImageWidth} pixels.]]></item>
+               <item name="wcf.form.field.upload.error.minimumImageWidth"><![CDATA[The file â\80\9c{$file->getFilename()}â\80\9d may have a minimum width of {#$minimumImageWidth} pixels.]]></item>
                <item name="wcf.form.field.upload.error.maximumImageWidth"><![CDATA[The file “{$file->getFilename()}” may have a maximum width of {#$maximumImageWidth} pixels.]]></item>
-               <item name="wcf.form.field.upload.error.minimumImageHeight"><![CDATA[The file â\80\9e{$file->getFilename()}â\80\9c may have a minimum height of {#$minimumImageHeight} pixels.]]></item>
+               <item name="wcf.form.field.upload.error.minimumImageHeight"><![CDATA[The file â\80\9c{$file->getFilename()}â\80\9d may have a minimum height of {#$minimumImageHeight} pixels.]]></item>
                <item name="wcf.form.field.upload.error.maximumImageHeight"><![CDATA[The file “{$file->getFilename()}” may have a maximum height of {#$maximumImageHeight} pixels.]]></item>
                <item name="wcf.form.field.upload.error.minimum"><![CDATA[You must upload at least {if $minimum > 1}{#$minimum} files{else}one file{/if}.]]></item>
                <item name="wcf.form.field.upload.error.maximum"><![CDATA[You can upload a maximum of {if $maximum > 1}{#$maximum} files{else}one file{/if}.]]></item>
@@ -3975,7 +4026,7 @@ Attachments:
                <item name="wcf.image.coverPhoto.upload.error.minWidth"><![CDATA[The image is too small.]]></item>
                <item name="wcf.image.coverPhoto.upload.error.uploadFailed"><![CDATA[An unknown error occurred during the upload.]]></item>
                <item name="wcf.image.coverPhoto.upload.error.invalidExtension"><![CDATA[The file extension is invalid.]]></item>
-               <item name="wcf.image.coverPhoto.upload.limits"><![CDATA[Minimum Image Size: {$coverPhotoDimensions.min.width}×{$coverPhotoDimensions.min.height} pixels<br>Maximum Image Size: {$coverPhotoDimensions.max.width}×{$coverPhotoDimensions.max.height} pixels<br>Allowed File Extensions: gif, jpg, jpeg, png<br>Maximum Filesize: {$__wcf->session->getPermission($coverPhotoPermissionMaxSize)|filesize}]]></item>
+               <item name="wcf.image.coverPhoto.upload.limits"><![CDATA[Minimum Image Size: {$coverPhotoDimensions.min.width}×{$coverPhotoDimensions.min.height} pixels<br>Maximum Image Size: {$coverPhotoDimensions.max.width}×{$coverPhotoDimensions.max.height} pixels<br>Allowed File Extensions: gif, jpg, jpeg, png, webp<br>Maximum Filesize: {$__wcf->session->getPermission($coverPhotoPermissionMaxSize)|filesize}]]></item>
        </category>
        <category name="wcf.imageViewer">
                <item name="wcf.imageViewer.button.enlarge"><![CDATA[Full Screen Mode]]></item>
@@ -4127,6 +4178,10 @@ Attachments:
                <item name="wcf.message.share.linkedIn"><![CDATA[LinkedIn]]></item>
                <item name="wcf.message.share.pinterest"><![CDATA[Pinterest]]></item>
                <item name="wcf.message.share.xing"><![CDATA[XING]]></item>
+               <item name="wcf.message.share.socialMedia"><![CDATA[Social Media]]></item>
+               <item name="wcf.message.share.copy"><![CDATA[Copy Code]]></item>
+               <item name="wcf.message.share.copy.success"><![CDATA[The code has been successfully copied.]]></item>
+               <item name="wcf.message.share.nativeShare"><![CDATA[More Options]]></item>
                <item name="wcf.message.smilies"><![CDATA[Smilies]]></item>
                <item name="wcf.message.button.extendedReply"><![CDATA[More Options]]></item>
                <item name="wcf.message.button.extendedEdit"><![CDATA[More Options]]></item>
@@ -4174,14 +4229,14 @@ Attachments:
                <item name="wcf.moderation.notification.comment.title.stacked"><![CDATA[{#$timesTriggered} new comments (Moderation)]]></item>
                <item name="wcf.moderation.notification.comment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on the moderation entry <strong>{$moderationQueue}</strong>.]]></item>
                <item name="wcf.moderation.notification.comment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on the moderation entry <strong>{$moderationQueue}</strong>.]]></item>
-               <item name="wcf.moderation.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on the moderation entry {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the moderation entry <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.moderation.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on the moderation entry {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the moderation entry <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a>:</p>]]></item>
                <item name="wcf.moderation.notification.commentResponse.title"><![CDATA[New reply (Moderation)]]></item>
                <item name="wcf.moderation.notification.commentResponse.title.stacked"><![CDATA[{#$timesTriggered} new replies (Moderation)]]></item>
                <item name="wcf.moderation.notification.commentResponse.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment by <strong>{$commentAuthor}</strong> on the moderation entry <strong>{$moderationQueue}</strong>.]]></item>
                <item name="wcf.moderation.notification.commentResponse.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to comments on the moderation entry <strong>{$moderationQueue}</strong>.]]></item>
-               <item name="wcf.moderation.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s{if $notificationContent[variables][commentAuthor]->userID} [URL:{link controller='User' object=$notificationContent[variables][commentAuthor] isEmail=true}{/link}]{/if} comment on the moderation entry {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to {if $notificationContent[variables][commentAuthor]->userID}<a href="{link controller='User' object=$notificationContent[variables][commentAuthor] isHtmlEmail=true}{/link}">{$notificationContent[variables][commentAuthor]->username}</a>{else}{$notificationContent[variables][commentAuthor]->username}{/if}’s comment on the moderation entry <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.moderation.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on the moderation entry {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to <strong>{$commentAuthor}</strong>’s comment on the moderation entry <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a>:</p>]]></item>
                <item name="wcf.moderation.status"><![CDATA[Status]]></item>
                <item name="wcf.moderation.status.outstanding"><![CDATA[Pending]]></item>
                <item name="wcf.moderation.status.processing"><![CDATA[In Progress]]></item>
@@ -4218,21 +4273,21 @@ Attachments:
                <item name="wcf.moderation.activation.details"><![CDATA[Information]]></item>
                <item name="wcf.moderation.activation.content"><![CDATA[Content awaiting approval]]></item>
                <item name="wcf.moderation.activation.enableContent"><![CDATA[Approve]]></item>
-               <item name="wcf.moderation.activation.enableContent.confirmMessage"><![CDATA[Do you really want to approve this content?]]></item>
+               <item name="wcf.moderation.activation.enableContent.confirmMessage"><![CDATA[Do you really want to approve {if !$moderationQueueCount|isset || $moderationQueueCount == 1}this content{else}these contents{/if}?]]></item>
                <item name="wcf.moderation.activation.notification.comment.title"><![CDATA[New comment (Approval)]]></item>
                <item name="wcf.moderation.activation.notification.comment.title.stacked"><![CDATA[{#$timesTriggered} new comments (Approval)]]></item>
                <item name="wcf.moderation.activation.notification.comment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on <strong>{$moderationQueue}</strong> waiting for approval.]]></item>
                <item name="wcf.moderation.activation.notification.comment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on <strong>{$moderationQueue}</strong> waiting for approval.]]></item>
-               <item name="wcf.moderation.activation.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}] waiting for approval{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.activation.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the moderation entry <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a> waiting for approval:</p>]]></item>
+               <item name="wcf.moderation.activation.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}] waiting for approval{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.activation.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the moderation entry <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a> waiting for approval:</p>]]></item>
                <item name="wcf.moderation.activation.notification.commentResponse.title"><![CDATA[New reply (Approval)]]></item>
                <item name="wcf.moderation.activation.notification.commentResponse.title.stacked"><![CDATA[{#$timesTriggered} new replies (Approval)]]></item>
                <item name="wcf.moderation.activation.notification.commentResponse.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment by <strong>{$commentAuthor}</strong> on <strong>{$moderationQueue}</strong> waiting for approval.]]></item>
                <item name="wcf.moderation.activation.notification.commentResponse.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to comments on <strong>{$moderationQueue}</strong> waiting for approval.]]></item>
-               <item name="wcf.moderation.activation.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s{if $notificationContent[variables][commentAuthor]->userID} [URL:{link controller='User' object=$notificationContent[variables][commentAuthor] isEmail=true}{/link}]{/if} comment on {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}] waiting for approval{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.activation.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to {if $notificationContent[variables][commentAuthor]->userID}<a href="{link controller='User' object=$notificationContent[variables][commentAuthor] isHtmlEmail=true}{/link}">{$notificationContent[variables][commentAuthor]->username}</a>{else}{$notificationContent[variables][commentAuthor]->username}{/if}’s comment on <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a>  waiting for approval:</p>]]></item>
+               <item name="wcf.moderation.activation.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}] waiting for approval{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.activation.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to <strong>{$commentAuthor}</strong>’s comment on <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a>  waiting for approval:</p>]]></item>
                <item name="wcf.moderation.activation.removeContent"><![CDATA[Delete Content]]></item>
-               <item name="wcf.moderation.activation.removeContent.confirmMessage"><![CDATA[Do you really want to delete this content?]]></item>
+               <item name="wcf.moderation.activation.removeContent.confirmMessage"><![CDATA[Do you really want to delete {if !$moderationQueueCount|isset || $moderationQueueCount == 1}this content{else}these contents{/if}?]]></item>
        </category>
        <category name="wcf.moderation.report">
                <item name="wcf.moderation.report"><![CDATA[Report]]></item>
@@ -4242,26 +4297,29 @@ Attachments:
                <item name="wcf.moderation.report.notification.comment.title.stacked"><![CDATA[{#$timesTriggered} new comments (Report)]]></item>
                <item name="wcf.moderation.report.notification.comment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on the report <strong>{$moderationQueue}</strong>.]]></item>
                <item name="wcf.moderation.report.notification.comment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on the report <strong>{$moderationQueue}</strong>.]]></item>
-               <item name="wcf.moderation.report.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on the report {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.report.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the report <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.moderation.report.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on the report {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.report.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on the report <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a>:</p>]]></item>
                <item name="wcf.moderation.report.notification.commentResponse.title"><![CDATA[New reply (Report)]]></item>
                <item name="wcf.moderation.report.notification.commentResponse.title.stacked"><![CDATA[{#$timesTriggered} new replies (Report)]]></item>
                <item name="wcf.moderation.report.notification.commentResponse.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment by <strong>{$commentAuthor->username}</strong> on the report <strong>{$moderationQueue}</strong>.]]></item>
                <item name="wcf.moderation.report.notification.commentResponse.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to comments on the report <strong>{$moderationQueue->getTitle()}</strong>.]]></item>
-               <item name="wcf.moderation.report.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s{if $notificationContent[variables][commentAuthor]->userID} [URL:{link controller='User' object=$notificationContent[variables][commentAuthor] isEmail=true}{/link}]{/if} comment on the report {@$notificationContent[variables][moderationQueue]->getTitle()} [URL:{@$notificationContent[variables][moderationQueue]->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.moderation.report.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to {if $notificationContent[variables][commentAuthor]->userID}<a href="{link controller='User' object=$notificationContent[variables][commentAuthor] isHtmlEmail=true}{/link}">{$notificationContent[variables][commentAuthor]->username}</a>{else}{$notificationContent[variables][commentAuthor]->username}{/if}’s comment on the report <a href="{$notificationContent[variables][moderationQueue]->getLink()}">{$notificationContent[variables][moderationQueue]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.moderation.report.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on the report {@$moderationQueue->getTitle()} [URL:{@$moderationQueue->getLink()}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.moderation.report.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to <strong>{$commentAuthor}</strong>’s comment on the report <a href="{$moderationQueue->getLink()}">{$moderationQueue->getTitle()}</a>:</p>]]></item>
                <item name="wcf.moderation.report.reason"><![CDATA[Reason]]></item>
                <item name="wcf.moderation.report.reason.description"><![CDATA[This function is reserved for: spam, advertisement and other questionable (racism, glorification of violence, offending, or sexist) content.]]></item>
                <item name="wcf.moderation.report.removeContent"><![CDATA[Delete Content]]></item>
-               <item name="wcf.moderation.report.removeContent.confirmMessage"><![CDATA[Do you really want to delete the reported content?]]></item>
+               <item name="wcf.moderation.report.removeContent.confirmMessage"><![CDATA[Do you really want to delete the reported content{if $moderationQueueCount|isset && $moderationQueueCount > 1}s{/if}?]]></item>
                <item name="wcf.moderation.report.removeContent.reason"><![CDATA[Reason (optional)]]></item>
                <item name="wcf.moderation.report.removeReport"><![CDATA[Close Report]]></item>
-               <item name="wcf.moderation.report.removeReport.confirmMessage"><![CDATA[Do you really want to close this report?]]></item>
+               <item name="wcf.moderation.report.removeReport.confirmMessage"><![CDATA[Do you really want to close {if !$moderationQueueCount|isset || $moderationQueueCount == 1}this report{else}these reports{/if}?]]></item>
                <item name="wcf.moderation.report.removeReport.markAsJustified"><![CDATA[Also mark report as “Justified”]]></item>
                <item name="wcf.moderation.report.reportContent"><![CDATA[Report Content]]></item>
                <item name="wcf.moderation.report.reportedBy"><![CDATA[Reported by]]></item>
                <item name="wcf.moderation.report.reportedContent"><![CDATA[Reported Content]]></item>
                <item name="wcf.moderation.report.success"><![CDATA[The content has been reported.]]></item>
+               <item name="wcf.moderation.report.changeJustifiedStatus"><![CDATA[Change “Justified” status]]></item>
+               <item name="wcf.moderation.report.changeJustifiedStatus.markAsJustified"><![CDATA[Mark report as “Justified”]]></item>
+               <item name="wcf.moderation.report.changeJustifiedStatus.confirmMessage"><![CDATA[Do you really want to change the “Justified” status of this report?]]></item>
        </category>
        <category name="wcf.notice">
                <item name="wcf.notice.button.dismiss"><![CDATA[Permanently dismiss this notice]]></item>
@@ -4338,7 +4396,6 @@ Attachments:
                <item name="wcf.acp.page.customURL"><![CDATA[Custom URL]]></item>
                <item name="wcf.acp.page.customURL.error.invalid"><![CDATA[URL is invalid. You may use letters a-z/A-Z, numbers, dashes, underscores and forward slashes.]]></item>
                <item name="wcf.acp.page.customURL.error.notUnique"><![CDATA[URL is already in use.]]></item>
-               <item name="wcf.acp.page.delete.confirmMessage"><![CDATA[Do you really want to delete the page <span class="confirmationObject">{$page->name}</span>?]]></item>
                <item name="wcf.acp.page.edit"><![CDATA[Edit Page]]></item>
                <item name="wcf.acp.page.i18n"><![CDATA[Multilingualism]]></item>
                <item name="wcf.acp.page.i18n.i18n"><![CDATA[Multilingual page]]></item>
@@ -4350,7 +4407,6 @@ Attachments:
                <item name="wcf.acp.page.lastUpdateTime"><![CDATA[Last Change]]></item>
                <item name="wcf.acp.page.list"><![CDATA[Pages]]></item>
                <item name="wcf.acp.page.metaDescription"><![CDATA[Meta Description]]></item>
-               <item name="wcf.acp.page.metaKeywords"><![CDATA[Meta Keywords]]></item>
                <item name="wcf.acp.page.name.error.notUnique"><![CDATA[Name is already in use.]]></item>
                <item name="wcf.acp.page.page"><![CDATA[Page]]></item>
                <item name="wcf.acp.page.parentPage"><![CDATA[Parent Page]]></item>
@@ -4401,7 +4457,7 @@ Attachments:
                <item name="wcf.poll.button.showVote"><![CDATA[Vote]]></item>
                <item name="wcf.poll.button.vote"><![CDATA[Vote]]></item>
                <item name="wcf.poll.endTime"><![CDATA[Poll Ends (optional)]]></item>
-               <item name="wcf.poll.endTime.error.invalid"><![CDATA[You have entered an invalid date.]]></item>
+               <item name="wcf.poll.endTime.error.invalid"><![CDATA[The entered date is invalid.]]></item>
                <item name="wcf.poll.isChangeable"><![CDATA[Votes can be changed]]></item>
                <item name="wcf.poll.isPublic"><![CDATA[Publicize participants]]></item>
                <item name="wcf.poll.management"><![CDATA[Poll]]></item>
@@ -4440,7 +4496,7 @@ Attachments:
                <item name="wcf.recaptcha.audio"><![CDATA[Audio Version]]></item>
                <item name="wcf.recaptcha.image"><![CDATA[Image Version]]></item>
                <item name="wcf.recaptcha.help"><![CDATA[Help]]></item>
-               <item name="wcf.recaptcha.error.recaptchaString.false"><![CDATA[You have entered the security code incorrectly. Please try again.]]></item>
+               <item name="wcf.recaptcha.error.recaptchaString.false"><![CDATA[The entered security code is incorrect. Please try again.]]></item>
        </category>
        <category name="wcf.search">
                <item name="wcf.search.author"><![CDATA[Search by Author]]></item>
@@ -4544,11 +4600,10 @@ Attachments:
                <item name="wcf.user.username.error.3rdParty"><![CDATA[Account is connected with a 3rd party website, password cannot be requested.]]></item>
                <item name="wcf.user.username.error.3rdParty.redirect"><![CDATA[Account is connected with {$provider}, password cannot be requested. You will now be redirected to the login with {$provider}.]]></item>
                <item name="wcf.user.loginOrRegister"><![CDATA[Login{if !REGISTER_DISABLED} or register{/if}]]></item>
-               <item name="wcf.user.useCookies"><![CDATA[Remain logged in]]></item>
                <item name="wcf.user.usernameOrEmail"><![CDATA[Username or Email Address]]></item>
                <item name="wcf.user.gender.male"><![CDATA[Male]]></item>
                <item name="wcf.user.gender.female"><![CDATA[Female]]></item>
-               <item name="wcf.user.gender.other"><![CDATA[Other]]></item>
+               <item name="wcf.user.gender.other"><![CDATA[Non-Binary]]></item>
                <item name="wcf.user.members"><![CDATA[Members]]></item>
                <item name="wcf.user.members.filter"><![CDATA[Filter Members]]></item>
                <item name="wcf.user.members.noMembers"><![CDATA[No members matched your criteria. <a href="{link controller='MembersList'}{/link}">Reset the applied filters.</a>]]></item>
@@ -4604,6 +4659,7 @@ Attachments:
                <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>
                <item name="wcf.user.lostPassword.error.tooManyRequests"><![CDATA[The password has been requested at least once in the past 24 hours. For security reasons you must wait at least {#$hours} hour{if $hours != 1}s{/if} before requesting it again.]]></item>
+               <item name="wcf.user.lostPassword.error.flood"><![CDATA[You have requested too many passwords. The function has therefore been temporarily deactivated for security reasons. Please try again later.]]></item>
                <item name="wcf.user.lostPassword.mail.subject"><![CDATA[Lost Password for Website: {@PAGE_TITLE|language}]]></item>
                <item name="wcf.user.lostPassword.mail.plaintext"><![CDATA[Dear {@$mailbox->getUser()->username},
 
@@ -4766,6 +4822,15 @@ not register with us.]]></item>
                <item name="wcf.user.status.banned"><![CDATA[The user has been banned.]]></item>
                <item name="wcf.user.status.isDisabled"><![CDATA[The user has not been approved yet.]]></item>
                <item name="wcf.user.status.blacklistMatches"><![CDATA[The user has been automatically disabled because of matches in the “Stop Forum Spam” database (Matches: {implode glue=', ' from=$user->getBlacklistMatchesTitle() item=matchLabel}{$matchLabel}{/implode}).]]></item>
+               <item name="wcf.user.reauthentication"><![CDATA[Re-authentication]]></item>
+               <item name="wcf.user.reauthentication.explanation"><![CDATA[You are entering a security-sensitive area. For security reasons it is required that you re-authenticate yourself by entering your password.]]></item>
+               <item name="wcf.user.reauthentication.loginAs"><![CDATA[Logged in as]]></item>
+               <item name="wcf.user.reauthentication.logoutAndChangeUser"><![CDATA[Not {$__wcf->user->username}? <a href="{link controller='FullLogout' application='wcf'}t={csrfToken type='url'}{/link}">Logout and change user</a>.]]></item>
+               <item name="wcf.user.ignore.type"><![CDATA[Block User]]></item>
+               <item name="wcf.user.ignore.type.noIgnore"><![CDATA[Do Not Block]]></item>
+               <item name="wcf.user.ignore.type.blockDirectContact"><![CDATA[Block Direct Contact]]></item>
+               <item name="wcf.user.ignore.type.hideMessages"><![CDATA[Block Direct Contact and Hide Created Messages]]></item>
+               <item name="wcf.user.ignore.error.cannotBeIgnored"><![CDATA[The user cannot be blocked.]]></item>
        </category>
        <category name="wcf.user.menu">
                <item name="wcf.user.menu.community"><![CDATA[Community]]></item>
@@ -4774,6 +4839,7 @@ not register with us.]]></item>
                <item name="wcf.user.menu.community.ignoredUsers"><![CDATA[Blocked Users]]></item>
                <item name="wcf.user.menu.profile"><![CDATA[User Account]]></item>
                <item name="wcf.user.menu.profile.accountManagement"><![CDATA[Account Management]]></item>
+               <item name="wcf.user.menu.profile.security"><![CDATA[Security]]></item>
                <item name="wcf.user.menu.profile.avatar"><![CDATA[Avatar]]></item>
                <item name="wcf.user.menu.profile.signature"><![CDATA[Signature]]></item>
                <item name="wcf.user.menu.settings"><![CDATA[Settings]]></item>
@@ -4851,6 +4917,131 @@ Open the link below to access the user profile:
 <p><small><em>Source: <a href="http://www.mustervorlage.net/disclaimer-muster" class="externalURL">Mustervorlage.net</a></em></small></p>]]></item>
                <item name="wcf.user.register.error.blacklistMatches"><![CDATA[The registration could not be completed due to active restrictions, please contact the site administrator.]]></item>
        </category>
+       <category name="wcf.user.security">
+               <item name="wcf.user.security.activeSessions"><![CDATA[Active Sessions]]></item>
+               <item name="wcf.user.security.activeSessions.description"><![CDATA[You are currently logged into your account in the listed web browsers. Revoke sessions you no longer need or that you do not recognize. You can change your password within the <a href="{link controller='AccountManagement'}{/link}">Account Management Form</a>.]]></item>
+               <item name="wcf.user.security.currentSession"><![CDATA[Current Session]]></item>
+               <item name="wcf.user.security.deleteSession"><![CDATA[Revoke Session]]></item>
+               <item name="wcf.user.security.deleteSession.confirmMessage"><![CDATA[Do you really want to revoke the session?]]></item>
+               <item name="wcf.user.security.ipAddress"><![CDATA[IP Address]]></item>
+               <item name="wcf.user.security.lastActivity"><![CDATA[Last active]]></item>
+               <item name="wcf.user.security.multifactor"><![CDATA[Multi-factor Authentication]]></item>
+               <item name="wcf.user.security.multifactor.active"><![CDATA[Active]]></item>
+               <item name="wcf.user.security.multifactor.authentication"><![CDATA[Multi-factor Authentication]]></item>
+               <item name="wcf.user.security.multifactor.authentication.description"><![CDATA[This user account is protected by a second factor.]]></item>
+               <item name="wcf.user.security.multifactor.authentication.loginAs"><![CDATA[Log in as]]></item>
+               <item name="wcf.user.security.multifactor.authentication.noPendingUserChange"><![CDATA[The multi-factor authentication was not completed in time. The incomplete login process was aborted for security reasons. Please <a href="{link controller='Login'}{/link}">Login</a> once again.]]></item>
+               <item name="wcf.user.security.multifactor.authentication.noSetup"><![CDATA[The account <strong>{$user->username}</strong> is protected by multi-factor authentication, but no methods are set up. Please contact the administrator for support.]]></item>
+               <item name="wcf.user.security.multifactor.backup.authenticationEmail.body.html"><![CDATA[<h2>Dear {$setup->getUser()->username},</h2>
+
+<p>You used the emergency code <code>{$usedCode[identifier]}</code> for multi-factor authentication. This code no longer is valid. {plural value=$remaining 0='<b>You don't have any remaining codes.</b>' 1='You have one remaining code.' other='You have # remaining codes.'}</p>
+
+<p>You can manage multi-factor authentication within the <a href="{link controller='AccountSecurity' isHtmlEmail=true}#section_multifactor{/link}">Account Security</a> page. Within account security you can generate new emergency codes or disable multi-factor authentication.</p>]]></item>
+               <item name="wcf.user.security.multifactor.backup.authenticationEmail.body.plain"><![CDATA[Dear {$setup->getUser()->username},
+
+You used the emergency code “{$usedCode[identifier]}” for multi-factor authentication. This code no longer is valid. {plural value=$remaining 0='**You don't have any remaining codes.**' 1='You have one remaining code.' other='You have # remaining codes.'} {* this line ends with a space *}
+
+You can manage multi-factor authentication within the Account Security page [URL:{link controller='AccountSecurity' isEmail=true}#section_multifactor{/link}]. Within account security you can generate new emergency codes or disable multi-factor authentication.]]></item>
+               <item name="wcf.user.security.multifactor.backup.authenticationEmail.subject"><![CDATA[Authentication using emergency code on {@PAGE_TITLE|language}]]></item>
+               <item name="wcf.user.security.multifactor.backup.code"><![CDATA[Emergency Code]]></item>
+               <item name="wcf.user.security.multifactor.backup.code.description"><![CDATA[An emergency code consists of 20 digits and may only be used once.]]></item>
+               <item name="wcf.user.security.multifactor.backup.error.flood"><![CDATA[Please try again later.]]></item>
+               <item name="wcf.user.security.multifactor.backup.existingCodes"><![CDATA[Active Emergency Codes]]></item>
+               <item name="wcf.user.security.multifactor.backup.existingCodes.description"><![CDATA[<p>You can find the latest set of emergency codes for use with the multi-factor authentication below. Codes that are striked out have been used and are no longer valid. Use the bold identifier to compare the list to your notes. Please generate a new set of codes if the listed codes do not match your notes.</p>]]></item>
+               <item name="wcf.user.security.multifactor.backup.generateCodes"><![CDATA[Generate Codes]]></item>
+               <item name="wcf.user.security.multifactor.backup.regenerateCodes"><![CDATA[Generate New Emergency Codes]]></item>
+               <item name="wcf.user.security.multifactor.backup.regenerateCodes.description"><![CDATA[<p>Generate new emergency codes if you lost or used up your existing set. Generating new emergency codes will invalidate all existing codes.</p>]]></item>
+               <item name="wcf.user.security.multifactor.backup.status"><![CDATA[<ul class="inlineList small dotSeparated">
+<li>{plural value=$count 0="No codes remaining" 1="One code remaining" other="# codes remaining"}</li>
+{if $lastUsed}<li>Last used on {@$lastUsed|plainTime}</li>{/if}
+</ul>]]></item>
+               <item name="wcf.user.security.multifactor.backup.success"><![CDATA[New Codes were generated successfully. Any existing codes are no longer valid. Please carefully note down the codes.]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.backup"><![CDATA[Emergency Codes]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.backup.manage"><![CDATA[Manage Emergency Codes]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.email"><![CDATA[Code via Email]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.email.description"><![CDATA[<small>You will receive a one time code via email after logging in.</small>]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.email.manage"><![CDATA[Code via Email]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.totp"><![CDATA[Smartphone App]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.totp.description"><![CDATA[<small>Generate one time codes with an app on your smartphone.</small>]]></item>
+               <item name="wcf.user.security.multifactor.com.woltlab.wcf.multifactor.totp.manage"><![CDATA[Manage Smartphone App]]></item>
+               <item name="wcf.user.security.multifactor.description"><![CDATA[Protect your account by requiring authentication with a second factor for every login.]]></item>
+               <item name="wcf.user.security.multifactor.disable"><![CDATA[Disable]]></item>
+               <item name="wcf.user.security.multifactor.disable.confirm"><![CDATA[{if $remaining|empty}Completely Disable Multi-factor Authentication{else}Disable <strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong>{/if}]]></item>
+               <item name="wcf.user.security.multifactor.disable.confirm.required"><![CDATA[Please confirm that you read the explanation and that you would like to proceed.]]></item>
+               <item name="wcf.user.security.multifactor.disable.explanation"><![CDATA[<p>By submitting this form the <strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong> method for multi-factor authentication will be disabled. You will no longer be able to use this method to authenticate yourself.</p>
+{if !$remaining|empty}
+<p>After disabling <strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong> the following methods will still be available for multi-factor authentication.</p>
+<ul class="nativeList">
+{foreach from=$remaining item='method'}
+<li><a href="{link controller='MultifactorManage' object=$method->getObjectType()}{/link}">{lang}wcf.user.security.multifactor.{$method->getObjectType()->objectType}{/lang}</a></li>
+{/foreach}
+</ul>
+{else}
+<p>Disabling <strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong> will fully disable the use of multi-factor authentication for your account as it is the only active method.</p>
+{/if}]]></item>
+               <item name="wcf.user.security.multifactor.disable.requireMultifactor"><![CDATA[<p>You are a member of a user group that is required to use multi-factor authentication. For this reason you are not allowed to disable your last multi-factor method (<strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong>).</p>]]></item>
+               <item name="wcf.user.security.multifactor.disable.success"><![CDATA[The <strong>{lang}wcf.user.security.multifactor.{$setup->getObjectType()->objectType}{/lang}</strong> method has successfully been disabled.]]></item>
+               <item name="wcf.user.security.multifactor.disable.success.full"><![CDATA[The multi-factor authentication has successfully been disabled.]]></item>
+               <item name="wcf.user.security.multifactor.email.body.html"><![CDATA[Your one time code is: <pre>{$code}</pre>]]></item>
+               <item name="wcf.user.security.multifactor.email.body.plain"><![CDATA[Your one time code is: {$code}]]></item>
+               <item name="wcf.user.security.multifactor.email.code"><![CDATA[One Time Code]]></item>
+               <item name="wcf.user.security.multifactor.email.code.description"><![CDATA[The one time code was sent at <strong>{$lastCode|date:'g:i:s a'}</strong> to your email address at <strong>{$emailDomain}</strong>.]]></item>
+               <item name="wcf.user.security.multifactor.email.enable"><![CDATA[Enable confirmation via email]]></item>
+               <item name="wcf.user.security.multifactor.email.enable.description"><![CDATA[<p>With enabled confirmation via email you will receive a one time code via email whenever you login. You will need to have access to your email inbox to be able to login successfully.</p>]]></item>
+               <item name="wcf.user.security.multifactor.email.enabled"><![CDATA[Emails Enabled]]></item>
+               <item name="wcf.user.security.multifactor.email.enabled.description"><![CDATA[<p>Multi-factor authentication via email is enabled for your account. You will receive a one time code via email whenever you login.</p>
+<p>Use the <a href="{link controller='AccountSecurity'}#section_multifactor{/link}">Overview in Account Security</a> if you want to disable multi-factor authentication.</p>]]></item>
+               <item name="wcf.user.security.multifactor.email.subject"><![CDATA[{$code} is your one time code for {@PAGE_TITLE|language}]]></item>
+               <item name="wcf.user.security.multifactor.email.success"><![CDATA[The additional authentication via email has successfully been enabled.]]></item>
+               <item name="wcf.user.security.multifactor.error.invalidCode"><![CDATA[The entered code is invalid.]]></item>
+               <item name="wcf.user.security.multifactor.error.setupAllocationFailed"><![CDATA[Enabling this method failed. Please try again.]]></item>
+               <item name="wcf.user.security.multifactor.initialBackup"><![CDATA[<p>The multi-factor authentication is enabled for your account starting now. Going forward you will need to have your second factor handy for every login.</p>
+<p><br></p>
+<p>In addition we generated emergency codes for you. They will allow you to gain access to your account in case your second factor becomes unavailable.</p>
+<p><br></p>
+<p>Please carefully note or save the emergency codes shown below. An example of a secure storage could be a piece of paper within a filing cabinet.</p>]]></item>
+               <item name="wcf.user.security.multifactor.manage"><![CDATA[Manage]]></item>
+               <item name="wcf.user.security.multifactor.methods"><![CDATA[Method]]></item>
+               <item name="wcf.user.security.multifactor.setup"><![CDATA[Set Up]]></item>
+               <item name="wcf.user.security.multifactor.setupEmail.body.html"><![CDATA[<h2>Dear {$user->username},</h2>
+
+<p>You successfully enabled multi-factor authentication using the <b>{lang}wcf.user.security.multifactor.{$method->objectType}{/lang}</b> method. Going forward you will need to have your second factor handy for every login.</p>
+
+<p>You also received a list of emergency codes to use when your second factor becomes unavailable. <b>Did you store these emergency codes securely?</b> If you forgot you can do now by generating new codes in the <a href="{link controller='MultifactorManage' object=$backupMethod isHtmlEmail=true}{/link}">Emergency Code Management</a>.</p>]]></item>
+               <item name="wcf.user.security.multifactor.setupEmail.body.plain"><![CDATA[Dear {$user->username},
+
+You successfully enabled multi-factor authentication using the “{lang}wcf.user.security.multifactor.{$method->objectType}{/lang}” method. Going forward you will need to have your second factor handy for every login.
+
+You also received a list of emergency codes to use when your second factor becomes unavailable. **Did you store these emergency codes securely?** If you forgot you can do now by generating new codes in the Emergency Code Management [URL:{link controller='MultifactorManage' object=$backupMethod isEmail=true}{/link}].]]></item>
+               <item name="wcf.user.security.multifactor.setupEmail.subject"><![CDATA[Multi-factor Authentication Enabled on {@PAGE_TITLE|language}]]></item>
+               <item name="wcf.user.security.multifactor.totp.code"><![CDATA[One Time Code]]></item>
+               <item name="wcf.user.security.multifactor.totp.code.description"><![CDATA[The 6-digit one time code generated by the smartphone app.]]></item>
+               <item name="wcf.user.security.multifactor.totp.createTime"><![CDATA[Set Up]]></item>
+               <item name="wcf.user.security.multifactor.totp.deviceName"><![CDATA[Device Name]]></item>
+               <item name="wcf.user.security.multifactor.totp.deviceName.description.auth"><![CDATA[The device that generated the used one time code.]]></item>
+               <item name="wcf.user.security.multifactor.totp.deviceName.description.setup"><![CDATA[An arbitrary name identifying this device.]]></item>
+               <item name="wcf.user.security.multifactor.totp.deviceName.placeholder"><![CDATA[{$__wcf->user->username}’s Smartphone]]></item>
+               <item name="wcf.user.security.multifactor.totp.devices"><![CDATA[Active Smartphones]]></item>
+               <item name="wcf.user.security.multifactor.totp.error.flood"><![CDATA[Please try again later.]]></item>
+               <item name="wcf.user.security.multifactor.totp.lastDevice"><![CDATA[Please add your new device before removing your last device <strong>{$deviceName}</strong> if you want to switch phones. Use the <a href="{link controller='AccountSecurity'}#section_multifactor{/link}">Overview in Account Security</a> if you want to disable multi-factor authentication.]]></item>
+               <item name="wcf.user.security.multifactor.totp.lastDevice.title"><![CDATA[Last Device]]></item>
+               <item name="wcf.user.security.multifactor.totp.newDevice"><![CDATA[Add Smartphone]]></item>
+               <item name="wcf.user.security.multifactor.totp.newDevice.description"><![CDATA[<p>Authenticate using an app on your smartphone.</p>
+<ol class="nativeList">
+<li>Install an authentication app such as Google Authenticator (<a href="https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2" class="externalURL">Android</a>, <a href="https://apps.apple.com/app/google-authenticator/id388497605" class="externalURL">iOS</a>) or Authy (<a href="https://play.google.com/store/apps/details?id=com.authy.authy" class="externalURL">Android</a>, <a href="https://apps.apple.com/app/authy/id494168017" class="externalURL">iOS</a>).</li>
+<li>Scan the QR code within the app.</li>
+<li>Enter the 6 digit one time code generated by the app.</li>
+</ol>]]></item>
+               <item name="wcf.user.security.multifactor.totp.status"><![CDATA[<ul class="inlineList small dotSeparated">
+<li>{plural value=$count 0="Not set up" 1="One device set up" other="# devices set up"}</li>
+{if $lastUsed}<li>Last used on {@$lastUsed|plainTime}</li>{/if}
+</ul>]]></item>
+               <item name="wcf.user.security.multifactor.totp.success.add"><![CDATA[Your smartphone <strong>{$deviceName}</strong> has successfully been added.]]></item>
+               <item name="wcf.user.security.multifactor.totp.success.delete"><![CDATA[Your smartphone <strong>{$deviceName}</strong> has successfully been removed.]]></item>
+               <item name="wcf.user.security.multifactor.totp.useTime"><![CDATA[Last Used]]></item>
+               <item name="wcf.user.security.requiresMultifactor"><![CDATA[You are a member of a user group that is required to use multi-factor authentication. Before you may access this page you must <a href="{link controller='AccountSecurity' forceFrontend=true}#section_multifactor{/link}">enable multi-factor authentication</a>.]]></item>
+               <item name="wcf.user.security.sessionName"><![CDATA[{if $session->getUserAgent()->getBrowser()}{$session->getUserAgent()->getBrowser()}{if $session->getUserAgent()->getOS()} on {$session->getUserAgent()->getOS()}{/if}{else}Unknown Device{/if}]]></item>
+       </category>
        <category name="wcf.user.trophy">
                <item name="wcf.user.trophy.trophyPoints"><![CDATA[Trophies]]></item>
                <item name="wcf.user.trophy.showTrophies"><![CDATA[Display Trophies of {$user->username}]]></item>
@@ -4888,7 +5079,6 @@ Open the link below to access the user profile:
                <item name="wcf.acp.trophy.conditions"><![CDATA[Conditions]]></item>
                <item name="wcf.acp.trophy.conditions.description"><![CDATA[The users need to fulfill the following conditions to automatically be awarded with the trophy.]]></item>
                <item name="wcf.acp.trophy.conditions.error.noConditions"><![CDATA[You have not provided any conditions yet.]]></item>
-               <item name="wcf.acp.trophy.delete.confirmMessage"><![CDATA[Do you really want to delete the trophy <span class="confirmationObject">{$trophy->getTitle()}</span>?]]></item>
                <item name="wcf.acp.trophy.userTrophy.user"><![CDATA[User]]></item>
                <item name="wcf.acp.trophy.userTrophy.user.description"><![CDATA[Enter the names of the users who should be awarded the trophy.]]></item>
                <item name="wcf.acp.trophy.userTrophy.user.error.notFound"><![CDATA[The username “{$errorData[username]}” does not exist.]]></item>
@@ -4942,18 +5132,21 @@ Open the link below to access the user profile:
        </category>
        <category name="wcf.user.3rdparty">
                <item name="wcf.user.3rdparty"><![CDATA[Third-Party Login]]></item>
+               <item name="wcf.user.3rdparty.login.error.access_denied"><![CDATA[Access to your external account has been rejected.]]></item>
+               <item name="wcf.user.3rdparty.login.error.denied"><![CDATA[Access to your external account has been rejected.]]></item>
+               <item name="wcf.user.3rdparty.login.error.httpError"><![CDATA[Unable to communicate with the external service. Internal error code: <code>{$exceptionID}</code>.]]></item>
+               <item name="wcf.user.3rdparty.login.error.genericException"><![CDATA[An error occurred while processing your authentication request. Please contact the administrator for help. Internal error code: <code>{$exceptionID}</code>.]]></item>
+               <item name="wcf.user.3rdparty.login.error.stateValidation"><![CDATA[Unable to find the authentication request. Maybe your session expired.]]></item>
                <item name="wcf.user.3rdparty.github"><![CDATA[GitHub]]></item>
                <item name="wcf.user.3rdparty.github.login"><![CDATA[Login with GitHub]]></item>
-               <item name="wcf.user.3rdparty.github.login.error.access_denied"><![CDATA[Access to your GitHub account has been rejected.]]></item>
                <item name="wcf.user.3rdparty.github.register"><![CDATA[You are creating an account through <span class="icon icon16 fa-github"></span>&nbsp;GitHub. The username and your email address have therefore already been entered.]]></item>
-               <item name="wcf.user.3rdparty.github.connect"><![CDATA[Connect with your GitHub account{if $__wcf->session->getVar('__githubUsername')} “<a href="https://github.com/{$__wcf->session->getVar('__githubUsername')}"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>{$__wcf->session->getVar('__githubUsername')}</a>”{/if}.]]></item>
+               <item name="wcf.user.3rdparty.github.connect"><![CDATA[Connect with your GitHub account{if $__wcf->session->getVar('__3rdPartyProvider') === 'github'} “<a href="https://github.com/{$__wcf->session->getVar('__oauthUser')->getUsername()}"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>{$__wcf->session->getVar('__oauthUser')->getUsername()}</a>”{/if}.]]></item>
                <item name="wcf.user.3rdparty.github.connect.success"><![CDATA[Your user account has been connected with GitHub.]]></item>
                <item name="wcf.user.3rdparty.github.connect.error.inuse"><![CDATA[Your GitHub account is already connected to a different user.]]></item>
                <item name="wcf.user.3rdparty.github.disconnect"><![CDATA[Cancel connection with GitHub]]></item>
                <item name="wcf.user.3rdparty.github.disconnect.success"><![CDATA[Your account is no longer connected with GitHub.]]></item>
                <item name="wcf.user.3rdparty.twitter"><![CDATA[Twitter]]></item>
                <item name="wcf.user.3rdparty.twitter.login"><![CDATA[Login with Twitter]]></item>
-               <item name="wcf.user.3rdparty.twitter.login.error.denied"><![CDATA[Access to your Twitter account has been rejected.]]></item>
                <item name="wcf.user.3rdparty.twitter.register"><![CDATA[You are creating an account through <span class="icon icon16 fa-twitter"></span>&nbsp;Twitter. The username has therefore already been entered. Now enter your email address and you can start right away!]]></item>
                <item name="wcf.user.3rdparty.twitter.connect"><![CDATA[Connect with your Twitter account{if $__wcf->session->getVar('__twitterUsername')} “<a href="https://twitter.com/{$__wcf->session->getVar('__twitterUsername')}"{if EXTERNAL_LINK_TARGET_BLANK} target="_blank"{/if}>{$__wcf->session->getVar('__twitterUsername')}</a>”{/if}.]]></item>
                <item name="wcf.user.3rdparty.twitter.connect.success"><![CDATA[Your user account has been connected with Twitter.]]></item>
@@ -4962,18 +5155,16 @@ Open the link below to access the user profile:
                <item name="wcf.user.3rdparty.twitter.disconnect.success"><![CDATA[Your account is no longer connected with Twitter.]]></item>
                <item name="wcf.user.3rdparty.facebook"><![CDATA[Facebook]]></item>
                <item name="wcf.user.3rdparty.facebook.login"><![CDATA[Login with Facebook]]></item>
-               <item name="wcf.user.3rdparty.facebook.login.error.access_denied"><![CDATA[Access to your Facebook account has been rejected.]]></item>
                <item name="wcf.user.3rdparty.facebook.register"><![CDATA[You are creating an account through <span class="icon icon16 fa-facebook"></span>&nbsp;Facebook. The username and your email address have therefore already been entered.]]></item>
-               <item name="wcf.user.3rdparty.facebook.connect"><![CDATA[Connect with your Facebook account{if $__wcf->session->getVar('__facebookUsername')} “{$__wcf->session->getVar('__facebookUsername')}”{/if}.]]></item>
+               <item name="wcf.user.3rdparty.facebook.connect"><![CDATA[Connect with your Facebook account{if $__wcf->session->getVar('__3rdPartyProvider') === 'facebook'} “{$__wcf->session->getVar('__oauthUser')->getUsername()}”{/if}.]]></item>
                <item name="wcf.user.3rdparty.facebook.connect.success"><![CDATA[Your user account has been connected with Facebook.]]></item>
                <item name="wcf.user.3rdparty.facebook.connect.error.inuse"><![CDATA[Your Facebook account is already connected to a different user.]]></item>
                <item name="wcf.user.3rdparty.facebook.disconnect"><![CDATA[Cancel connection with Facebook]]></item>
                <item name="wcf.user.3rdparty.facebook.disconnect.success"><![CDATA[Your account is no longer connected with Facebook.]]></item>
                <item name="wcf.user.3rdparty.google"><![CDATA[Google]]></item>
                <item name="wcf.user.3rdparty.google.login"><![CDATA[Login with Google]]></item>
-               <item name="wcf.user.3rdparty.google.login.error.access_denied"><![CDATA[Access to your Google account has been rejected.]]></item>
                <item name="wcf.user.3rdparty.google.register"><![CDATA[You are creating an account through <span class="icon icon16 fa-google"></span>&nbsp;Google. The username and your email address have therefore already been entered.]]></item>
-               <item name="wcf.user.3rdparty.google.connect"><![CDATA[Connect with your Google account{if $__wcf->session->getVar('__googleUsername')} “{$__wcf->session->getVar('__googleUsername')}”{/if}.]]></item>
+               <item name="wcf.user.3rdparty.google.connect"><![CDATA[Connect with your Google account{if $__wcf->session->getVar('__3rdPartyProvider') === 'google'} “{$__wcf->session->getVar('__oauthUser')->getUsername()}”{/if}.]]></item>
                <item name="wcf.user.3rdparty.google.connect.success"><![CDATA[Your user account has been connected with Google.]]></item>
                <item name="wcf.user.3rdparty.google.connect.error.inuse"><![CDATA[Your Google account is already connected to a different user.]]></item>
                <item name="wcf.user.3rdparty.google.disconnect"><![CDATA[Cancel connection with Google]]></item>
@@ -5016,6 +5207,10 @@ Open the link below to access the user profile:
                <item name="wcf.user.condition.mobileBrowser.usesMobileBrowser"><![CDATA[Uses mobile device]]></item>
                <item name="wcf.user.condition.mobileBrowser.usesMobileBrowser.error.conflict"><![CDATA[You cannot simultaneously select “Uses mobile device” and “Uses desktop”.]]></item>
                <item name="wcf.user.condition.mobileBrowser.usesNoMobileBrowser"><![CDATA[Uses desktop]]></item>
+               <item name="wcf.user.condition.multifactor"><![CDATA[Multi-factor Authentication]]></item>
+               <item name="wcf.user.condition.multifactor.multifactorActive"><![CDATA[Multi-factor Authentication active]]></item>
+               <item name="wcf.user.condition.multifactor.multifactorActive.error.conflict"><![CDATA[You cannot simultaneously select “Multi-factor Authentication active” and “Multi-factor Authentication not active”.]]></item>
+               <item name="wcf.user.condition.multifactor.multifactorNotActive"><![CDATA[Multi-factor Authentication not active]]></item>
                <item name="wcf.user.condition.notGroupIDs"><![CDATA[User Not in User Group(s)]]></item>
                <item name="wcf.user.condition.notGroupIDs.description"><![CDATA[User is not a member of the selected user group(s).]]></item>
                <item name="wcf.user.condition.notGroupIDs.error.groupIDsIntersection"><![CDATA[The selected user group(s) in “User in User Group(s)” and “User Not in User Group(s)” are conflicting.]]></item>
@@ -5056,7 +5251,7 @@ Open the link below to access the user profile:
                <item name="wcf.user.coverPhoto.error.disabled"><![CDATA[The administrators {if $__wcf->user->coverPhotoHash}have banned your cover photo and {/if}disallowed you from using a cover photo{if $__wcf->user->disableCoverPhotoReason}: {$__wcf->user->disableCoverPhotoReason}{/if}.]]></item>
                <item name="wcf.user.coverPhoto.noImage"><![CDATA[The user has not yet uploaded a cover photo.]]></item>
                <item name="wcf.user.coverPhoto.upload"><![CDATA[Upload Cover Photo]]></item>
-               <item name="wcf.user.coverPhoto.upload.description"><![CDATA[Minimum Image Size: {$coverPhotoDimensions.min.width}×{$coverPhotoDimensions.min.height} pixels<br>Maximum Image Size: {$coverPhotoDimensions.max.width}×{$coverPhotoDimensions.max.height} pixels<br>Allowed File Extensions: gif, jpg, jpeg, png<br>Maximum Filesize: {$__wcf->session->getPermission('user.profile.coverPhoto.maxSize')|filesize}]]></item>
+               <item name="wcf.user.coverPhoto.upload.description"><![CDATA[Minimum Image Size: {$coverPhotoDimensions.min.width}×{$coverPhotoDimensions.min.height} pixels<br>Maximum Image Size: {$coverPhotoDimensions.max.width}×{$coverPhotoDimensions.max.height} pixels<br>Allowed File Extensions: gif, jpg, jpeg, png, webp<br>Maximum Filesize: {$__wcf->session->getPermission('user.profile.coverPhoto.maxSize')|filesize}]]></item>
                <item name="wcf.user.coverPhoto.upload.error.badImage"><![CDATA[The uploaded file is not an image.]]></item>
                <item name="wcf.user.coverPhoto.upload.error.fileExtension"><![CDATA[The file has an invalid extension.]]></item>
                <item name="wcf.user.coverPhoto.upload.error.maxHeight"><![CDATA[The image is too tall.]]></item>
@@ -5148,8 +5343,8 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
                <item name="wcf.user.notification.comment.title.stacked"><![CDATA[{#$timesTriggered} new comments (Wall)]]></item>
                <item name="wcf.user.notification.comment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on your wall.]]></item>
                <item name="wcf.user.notification.comment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on your wall.]]></item>
-               <item name="wcf.user.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on your wall [URL:{link controller='User' object=$notificationContent[variables][owner] isEmail=true}#wall/comment{@$commentID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on <a href="{link controller='User' object=$notificationContent[variables][owner] isHtmlEmail=true}#wall/comment{@$commentID}{/link}">your wall</a>:</p>]]></item>
+               <item name="wcf.user.notification.comment.mail.plaintext"><![CDATA[{@$authorList} commented on your wall [URL:{@$owner->getLink()}#wall/comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.comment.mail.html"><![CDATA[<p>{@$authorList} commented on <a href="{$owner->getLink()}#wall/comment{@$commentID}">your wall</a>:</p>]]></item>
                <item name="wcf.user.notification.comment.like.title"><![CDATA[Reaction to a comment (Wall)]]></item>
                <item name="wcf.user.notification.comment.like.title.stacked"><![CDATA[{#$count} users reacted to your comment (Wall)]]></item>
                <item name="wcf.user.notification.comment.like.message"><![CDATA[<strong>{$author}</strong> reacted to your comment on {if $owner === null}your wall{else}<strong>{$owner}</strong>’s</a>{/if} ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
@@ -5158,8 +5353,8 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
                <item name="wcf.user.notification.commentResponse.title.stacked"><![CDATA[{#$timesTriggered} new replies (Wall)]]></item>
                <item name="wcf.user.notification.commentResponse.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to your comment on {if $owner->userID == $__wcf->getUser()->userID}your{else}<strong>{$owner}</strong>’s{/if} wall.]]></item>
                <item name="wcf.user.notification.commentResponse.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to your comment on {if $owner->userID == $__wcf->getUser()->userID}your{else}<strong>{$owner}</strong>’s{/if} wall.]]></item>
-               <item name="wcf.user.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on {if $mailbox->getUser()->userID == $notificationContent[variables][owner]->userID}your{else}{@$notificationContent[variables][owner]->username}’s{/if} wall [URL:{link controller='User' object=$notificationContent[variables][owner] isEmail=true}#wall/comment{@$commentID}/response{@$responseID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on <a href="{link controller='User' object=$notificationContent[variables][owner] isHtmlEmail=true}#wall/comment{@$commentID}/response{@$responseID}{/link}">{if $mailbox->getUser()->userID == $notificationContent[variables][owner]->userID}your{else}{$notificationContent[variables][owner]->username}’s{/if} wall</a>:</p>]]></item>
+               <item name="wcf.user.notification.commentResponse.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on {if $mailbox->getUser()->userID == $owner->userID}your{else}{@$owner}’s{/if} wall [URL:{@$owner->getLink()}#wall/comment{@$commentID}/response{@$responseID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.commentResponse.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on <a href="{$owner->getLink()}#wall/comment{@$commentID}/response{@$responseID}">{if $mailbox->getUser()->userID == $owner->userID}your{else}{$owner}’s{/if} wall</a>:</p>]]></item>
                <item name="wcf.user.notification.commentResponse.like.title"><![CDATA[Likes your reply to a comment (Wall)]]></item>
                <item name="wcf.user.notification.commentResponse.like.title.stacked"><![CDATA[{#$count} users reacted to your reply to a comment (Wall)]]></item>
                <item name="wcf.user.notification.commentResponse.like.message"><![CDATA[<strong>{$author}</strong> reacted to your reply to a comment on {if $owner === null}your wall{else}<strong>{$owner}</strong>’s wall{/if} ({@$__wcf->getReactionHandler()->renderInlineList($reactions)}).]]></item>
@@ -5168,8 +5363,8 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
                <item name="wcf.user.notification.commentResponseOwner.title.stacked"><![CDATA[{#$timesTriggered} new replies (Wall)]]></item>
                <item name="wcf.user.notification.commentResponseOwner.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to <strong>{$commentAuthor}</strong>’s comment on your wall.]]></item>
                <item name="wcf.user.notification.commentResponseOwner.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to the comment by <strong>{$author}</strong> on your wall.]]></item>
-               <item name="wcf.user.notification.commentResponseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s{if $notificationContent[variables][commentAuthor]->userID} [URL:{link controller='User' object=$notificationContent[variables][commentAuthor] isEmail=true}{/link}]{/if} comment on your wall [URL:{link controller='User' object=$notificationContent[variables][owner] isEmail=true}#wall/comment{@$commentID}/response{@$responseID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.commentResponseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to {if $notificationContent[variables][commentAuthor]->userID}<a href="{link controller='User' object=$notificationContent[variables][commentAuthor] isHtmlEmail=true}{/link}">{$notificationContent[variables][commentAuthor]->username}</a>{else}{$notificationContent[variables][commentAuthor]->username}{/if}’s comment on <a href="{link controller='User' object=$notificationContent[variables][owner] isHtmlEmail=true}#wall/comment{@$commentID}/response{@$responseID}{/link}">your wall</a>:</p>]]></item>
+               <item name="wcf.user.notification.commentResponseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on your wall [URL:{@$owner->getLink()}#wall/comment{@$commentID}/response{@$responseID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.commentResponseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to <strong>{$commentAuthor}</strong>’s comment on <a href="{$owner->getLink()}#wall/comment{@$commentID}/response{@$responseID}">your wall</a>:</p>]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.notification.comment"><![CDATA[Notify me of new comments on my wall]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponse"><![CDATA[Notify me of new replies to my comments]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.user.profileComment.response.notification.commentResponseOwner"><![CDATA[Notify me of new replies to comments on my wall]]></item>
@@ -5193,20 +5388,20 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
                <item name="wcf.user.notification.pageComment.title.stacked"><![CDATA[{#$timesTriggered} new comments (Page)]]></item>
                <item name="wcf.user.notification.pageComment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on the page <strong>{$page->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.pageComment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on the page <strong>{$page->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.pageComment.mail.plaintext"><![CDATA[{@$authorList} commented on the page “{@$notificationContent[variables][page]->getTitle()}” [URL:{@$notificationContent[variables][page]->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.pageComment.mail.html"><![CDATA[<p>{@$authorList} commented on the page <a href="{$notificationContent[variables][page]->getLink()}#comment{@$commentID}">{$notificationContent[variables][page]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.pageComment.mail.plaintext"><![CDATA[{@$authorList} commented on the page “{@$page->getTitle()}” [URL:{@$page->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.pageComment.mail.html"><![CDATA[<p>{@$authorList} commented on the page <a href="{$page->getLink()}#comment{@$commentID}">{$page->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.pageComment.response.title"><![CDATA[New Reply (Page)]]></item>
                <item name="wcf.user.notification.pageComment.response.title.stacked"><![CDATA[{#$timesTriggered} new replies (Page)]]></item>
                <item name="wcf.user.notification.pageComment.response.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to <strong>{$commentAuthor}</strong>’s comment on the page {$page->getTitle()}.]]></item>
                <item name="wcf.user.notification.pageComment.response.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to <strong>{$commentAuthor}</strong>’s comment on the page {$page->getTitle()}.]]></item>
-               <item name="wcf.user.notification.pageComment.response.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s comment on the page “{@$notificationContent[variables][page]->getTitle()}” [URL:{@$notificationContent[variables][page]->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.pageComment.response.mail.html"><![CDATA[<p>{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s comment on the page <a href="{$notificationContent[variables][page]->getLink()}#comment{@$commentID}">{$notificationContent[variables][page]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.pageComment.response.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on the page “{@$page->getTitle()}” [URL:{@$page->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.pageComment.response.mail.html"><![CDATA[<p>{@$authorList} replied to {$commentAuthor}’s comment on the page <a href="{$page->getLink()}#comment{@$commentID}">{$page->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.pageComment.response.title"><![CDATA[New Reply (Page)]]></item>
                <item name="wcf.user.notification.pageComment.responseOwner.title.stacked"><![CDATA[{#$timesTriggered} new replies (Page)]]></item>
                <item name="wcf.user.notification.pageComment.responseOwner.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to your comment on the page <strong>{$page->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.pageComment.responseOwner.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to your comment on the page <strong>{$page->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.pageComment.responseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on the page “{@$notificationContent[variables][page]->getTitle()}” [URL:{@$notificationContent[variables][page]->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.pageComment.responseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on the page <a href="{$notificationContent[variables][page]->getLink()}#comment{@$commentID}">{$notificationContent[variables][page]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.pageComment.responseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on the page “{@$page->getTitle()}” [URL:{@$page->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.pageComment.responseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on the page <a href="{$page->getLink()}#comment{@$commentID}">{$page->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.article.comment.notification.comment"><![CDATA[Notify me of new comments on my articles]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.article.comment.response.notification.commentResponse"><![CDATA[Notify me of new replies to my comments]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.article.comment.response.notification.commentResponseOwner"><![CDATA[Notify me of new replies to comments on my articles]]></item>
@@ -5214,25 +5409,25 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
                <item name="wcf.user.notification.articleComment.title.stacked"><![CDATA[{#$timesTriggered} new Comments (Article)]]></item>
                <item name="wcf.user.notification.articleComment.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} commented on your article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} commented on your article <strong>{$article->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.articleComment.mail.plaintext"><![CDATA[{@$authorList} commented on your article “{@$article->getTitle()}” [URL:{link controller='Article' object=$article isEmail=true}#comment{@$commentID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.articleComment.mail.html"><![CDATA[<p>{@$authorList} commented on your article <a href="{link controller='Article' object=$article isHtmlEmail=true}#comments/comment{@$commentID}{/link}">{$article->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.mail.plaintext"><![CDATA[{@$authorList} commented on your article “{@$article->getTitle()}” [URL:{@$article->getLink()}#comment{@$commentID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.articleComment.mail.html"><![CDATA[<p>{@$authorList} commented on your article <a href="{$article->getLink()}#comments/comment{@$commentID}">{$article->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.articleComment.response.title"><![CDATA[New Reply (Article)]]></item>
                <item name="wcf.user.notification.articleComment.response.title.stacked"><![CDATA[{#$timesTriggered} new Replies (Article)]]></item>
                <item name="wcf.user.notification.articleComment.response.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to your comment on the article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.response.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to your comment on the article <strong>{$article->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.articleComment.response.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on the article “{@$article->getTitle()}” [URL:{link controller='Article' object=$article isEmail=true}#comments/comment{@$commentID}/response{@$responseID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.articleComment.response.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on the article <a href="{link controller='Article' object=$article isHtmlEmail=true}#comments/comment{@$commentID}/response{@$responseID}{/link}">{$article->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.response.mail.plaintext"><![CDATA[{@$authorList} replied to your comment on the article “{@$article->getTitle()}” [URL:{@$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.articleComment.response.mail.html"><![CDATA[<p>{@$authorList} replied to your comment on the article <a href="{$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title"><![CDATA[New Reply (Article)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.title.stacked"><![CDATA[{#$timesTriggered} new Replies (Article)]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} replied to a comment by <strong>{$commentAuthor}</strong> on your article <strong>{$article->getTitle()}</strong>.]]></item>
                <item name="wcf.user.notification.articleComment.responseOwner.message.stacked"><![CDATA[{@'wcf.user.notification.stacked.authorList'|language} replied to a comment by <strong>{$commentAuthor}</strong> on your article <strong>{$article->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.articleComment.responseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to {@$notificationContent[variables][commentAuthor]->username}’s{if $notificationContent[variables][commentAuthor]->userID} [URL:{link controller='User' object=$notificationContent[variables][commentAuthor] isEmail=true}{/link}]{/if} comment on your article “{@$article->getTitle()}” [URL:{link controller='Article' object=$article isEmail=true}#comments/comment{@$commentID}/response{@$responseID}{/link}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
-               <item name="wcf.user.notification.articleComment.responseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to {if $notificationContent[variables][commentAuthor]->userID}<a href="{link controller='User' object=$notificationContent[variables][commentAuthor] isHtmlEmail=true}{/link}">{$notificationContent[variables][commentAuthor]->username}</a>{else}{$notificationContent[variables][commentAuthor]->username}{/if}’s comment on your article <a href="{link controller='Article' object=$article isHtmlEmail=true}#comments/comment{@$commentID}/response{@$responseID}{/link}">{$article->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.articleComment.responseOwner.mail.plaintext"><![CDATA[{@$authorList} replied to {@$commentAuthor}’s comment on your article “{@$article->getTitle()}” [URL:{@$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}]{if $count == 1 && !$guestTimesTriggered}:{else}.{/if}]]></item>
+               <item name="wcf.user.notification.articleComment.responseOwner.mail.html"><![CDATA[<p>{@$authorList} replied to <strong>{$commentAuthor}</strong>’s comment on your article <a href="{$article->getLink()}#comments/comment{@$commentID}/response{@$responseID}">{$article->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.article.notification.article"><![CDATA[Notify me of new articles in watched categories]]></item>
                <item name="wcf.user.notification.article.title"><![CDATA[New Article]]></item>
                <item name="wcf.user.notification.article.message"><![CDATA[{if $author->userID}<strong>{$author}</strong>{else}A guest{/if} wrote the article <strong>{$article->getTitle()}</strong>.]]></item>
-               <item name="wcf.user.notification.article.mail.plaintext"><![CDATA[{if $event->getAuthor()->userID}{@$event->getAuthor()->username} [URL:{link controller='User' object=$event->getAuthor() isEmail=true}{/link}]{else}A guest{/if} wrote the article “{@$notificationContent[variables][articleContent]->getTitle()}” [URL:{link controller='Article' object=$notificationContent[variables][articleContent] isEmail=true}{/link}]:]]></item>
-               <item name="wcf.user.notification.article.mail.html"><![CDATA[<p>{if $event->getAuthor()->userID}<a href="{link controller='User' object=$event->getAuthor() isHtmlEmail=true}{/link}">{$event->getAuthor()->username}</a>{else}A guest{/if} wrote the article <a href="{link controller='Article' object=$notificationContent[variables][articleContent] isHtmlEmail=true}{/link}">{$notificationContent[variables][articleContent]->getTitle()}</a>:</p>]]></item>
+               <item name="wcf.user.notification.article.mail.plaintext"><![CDATA[{@$author} wrote the article “{@$articleContent->getTitle()}” [URL:{@$articleContent->getLink()}]:]]></item>
+               <item name="wcf.user.notification.article.mail.html"><![CDATA[<p><strong>{$author}</strong> wrote the article <a href="{$articleContent->getLink()}">{$articleContent->getTitle()}</a>:</p>]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponseOwner"><![CDATA[Notify me of new replies to comments on my articles]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.response.notification.commentResponse"><![CDATA[Notify me of new replies to my comments]]></item>
                <item name="wcf.user.notification.com.woltlab.wcf.articleComment.notification.comment"><![CDATA[Notify me of new comments on my articles]]></item>
@@ -5325,7 +5520,7 @@ your notifications on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|langu
 {@$message}]]></item>
                <item name="wcf.user.mail.mail.html"><![CDATA[<h2>Dear {$mailbox->getUser()->username},</h2>
 
-<p>â\80\9e{$username}â\80\9c sent you a message on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|language}</a>:</p>
+<p>â\80\9c{$username}â\80\9d sent you a message on <a href="{link isHtmlEmail=true}{/link}">{PAGE_TITLE|language}</a>:</p>
 
 <p>{@$message|newlineToBreak}</p>]]></item>
        </category>