diff --git a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties
index f9977098623d3e2558b6ed4a2c67bcb085c767a1..77f0cb56d70a47072af53f4b7eeff3790beab119 100644
--- a/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/user/imp/_i18n/LocalStrings_de.properties
@@ -11,7 +11,7 @@ error.lengthorformat=Fehler auf Zeile {0} in Spalte {1}\: {2}
 error.login=Fehler auf Zeile {0}\: {1}
 error.login.douplicate=Fehler auf Zeile {0}\: Der Benutzername "{1}" ist mehrfach in der Liste vorhanden, sollte jedoch einmalig sein.
 error.mandatory=Fehler auf Zeile {0}\: die Angabe von "{1}" ist obligatorisch.
-error.pwd=Fehler auf Zeile {0}\: Das Password ist nicht g\u00FCltig.{1}
+error.pwd=Fehler auf Zeile {0}\: Das Passwort ist nicht g\u00FCltig.{1}
 error.shibbolet.name.inuse=Fehler auf Zeile {0}\: dieser Shibboleth-Identifikator "{1}" wird bereits in einem bestehenden Konto benutzt.
 form.importdata=Kopierte Zeilen aus Excel
 form.pwd.intro=Das neue Passwort muss folgende Kriterien erf\u00FCllen:
diff --git a/src/main/java/org/olat/core/commons/services/sms/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/commons/services/sms/ui/_i18n/LocalStrings_de.properties
index 7770a224b45c9113566b8eac7c7cbd800cbd0bea..a11522e0fc4ef4510929d2a25768f99446d1d865 100644
--- a/src/main/java/org/olat/core/commons/services/sms/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/commons/services/sms/ui/_i18n/LocalStrings_de.properties
@@ -17,7 +17,7 @@ no.service.provider=Kein Provider angew\u00E4hlt
 on=ein
 on.first.login=Fehlende SMS Telefonnummer bei erstem Login konfigurieren
 on.sms=mit SMS Code
-reset.password=Password zur\u00FCcksetzen
+reset.password=Passwort zur\u00FCcksetzen
 service=Dienst
 sms.phone.number=Telephon Mobil
 sms.phone.number.example=Sie m\u00FCssen Ihre Telefonnummer im internationalen Format angeben (+41 12 345 67 89).
diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties
index 43a68812fbed05f35b53843193fb683197e58030..53d21ad8ce6d88f9a6329f0cc85ee56eadc37734 100644
--- a/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/login/_i18n/LocalStrings_de.properties
@@ -90,12 +90,18 @@ max.age.administrator=... Administrator
 max.age.sysadmin=... Systemadministrator
 password.change.valid.until.gui=G\u00FCltigkeitsdauer Passwort\u00E4nderung in Stunden (GUI)
 password.change.valid.until.rest=G\u00FCltigkeitsdauer Passwort\u00E4nderung in Stunden (REST)
-password.rule.at.least.digits=Das Password muss mindestens {0} Ziffern beinhalten.
-password.rule.at.least.digits.specials=Das Password muss mindestens {0} Ziffern oder Sonderzeichen beinhalten.
-password.rule.at.least.letters=Das Password muss mindestens {0} Buchstaben beinhalten.
-password.rule.at.least.letters.lowercase=Das Password muss mindestens {0} Kleinbuchstaben beinhalten.
-password.rule.at.least.letters.uppercase=Das Password muss mindestens {0} Grossbuchstaben beinhalten.
-password.rule.at.least.specials=Das Password muss mindestens {0} Sonderzeichen beinhalten.
+password.rule.at.least.digits=Das Passwort muss mindestens {0} Ziffern beinhalten.
+password.rule.at.least.digit=Das Passwort muss mindestens {0} Ziffer beinhalten.
+password.rule.at.least.digits.specials=Das Passwort muss mindestens {0} Ziffern oder Sonderzeichen beinhalten.
+password.rule.at.least.digit.special=Das Passwort muss mindestens {0} Ziffer oder Sonderzeichen beinhalten.
+password.rule.at.least.letters=Das Passwort muss mindestens {0} Buchstaben beinhalten.
+password.rule.at.least.letter=Das Passwort muss mindestens {0} Buchstabe beinhalten.
+password.rule.at.least.letters.lowercase=Das Passwort muss mindestens {0} Kleinbuchstaben beinhalten.
+password.rule.at.least.letter.lowercase=Das Passwort muss mindestens {0} Kleinbuchstabe beinhalten.
+password.rule.at.least.letters.uppercase=Das Passwort muss mindestens {0} Grossbuchstaben beinhalten.
+password.rule.at.least.letter.uppercase=Das Passwort muss mindestens {0} Grossbuchstabe beinhalten.
+password.rule.at.least.special=Das Passwort muss mindestens {0} Sonderzeichen beinhalten.
+password.rule.at.least.specials=Das Passwort muss mindestens {0} Sonderzeichen beinhalten.
 password.rule.forbidden.digits=Das Passwort darf keine Ziffern beinhalten.
 password.rule.forbidden.digits.specials=Das Passwort darf keine Ziffern und keine Sonderzeichen beinhalten.
 password.rule.forbidden.letters=Das Passwort darf keine Buchstaben beinhalten.
@@ -106,7 +112,7 @@ password.rule.forbidden.username=Das Passwort darf nicht den Benutzernamen beinh
 password.rule.forbidden.user.firstname=Das Passwort darf nicht den Vornamen beinhalten.
 password.rule.forbidden.user.lastname=Das Passwort darf nicht den Nachnamen beinhalten.
 password.rule.history=Sie d\u00FCrfen nicht ein Passwort, das Sie schon hatten, wieder verwenden.
-password.rule.length=Das Password muss insgesamt zwischen {0} und {1} Zeichen lang sein.
+password.rule.length=Das Passwort muss insgesamt zwischen {0} und {1} Zeichen lang sein.
 password.rule.permitted.digits.specials=Ziffern und Sonderzeichen sind zul\u00E4ssig.
 password.rule.permitted.digits=Ziffern sind zul\u00E4ssig.
 password.rule.permitted.letters.lowercase=Kleinbuchstaben sind zul\u00E4ssig.
diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties
index 76e2645d912718bee44245bdd79b67afa1b15c80..d415de0fd679ed20305c97593a586991e233262b 100644
--- a/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/login/_i18n/LocalStrings_en.properties
@@ -91,10 +91,16 @@ max.age.sysadmin=... for system administrator
 password.change.valid.until.gui=Password change validity period in hours (GUI)
 password.change.valid.until.rest=Password change validity period in hours (REST)
 password.rule.at.least.digits.specials=The password has to contain at least {0} digits or special signs.
+password.rule.at.least.digit.special=The password has to contain at least {0} digit or special sign.
 password.rule.at.least.digits=The password has to contain at least {0} digits.
+password.rule.at.least.digit=The password has to contain at least {0} digit.
+password.rule.at.least.letter.lowercase=The password has to contain at least {0} lowercase letter.
 password.rule.at.least.letters.lowercase=The password has to contain at least {0} lowercase letters.
+password.rule.at.least.letter.uppercase=The password has to contain at least {0} uppercase letter.
 password.rule.at.least.letters.uppercase=The password has to contain at least {0} uppercase letters.
 password.rule.at.least.letters=The password has to contain at least {0} letters.
+password.rule.at.least.letter=The password has to contain at least {0} letter.
+password.rule.at.least.special=The password has to contain at least {0} special sign.
 password.rule.at.least.specials=The password has to contain at least {0} special signs.
 password.rule.forbidden.digits.specials=The password must not contain any digits or special characters.
 password.rule.forbidden.digits=The password must not contain any digits.
diff --git a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties
index 82959639dcb848e8759b2a00f4186d2cceefcb41..2e80cac387ebc10211ee79b716345da0014b5954 100644
--- a/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/login/_i18n/LocalStrings_fr.properties
@@ -162,11 +162,17 @@ password.after=pour {0} changements
 password.change.valid.until.gui=Dur\u00E9e de validit\u00E9 des mots de passes (UI)
 password.change.valid.until.rest=Dur\u00E9e de validit\u00E9 des mots de passes (REST)
 password.history=Pr\u00E9venir la r\u00E9utilisation des mots de passes pr\u00E9c\u00E9dants
+password.rule.at.least.digit=Le mot de passe doit contenir au moins {0} chiffre.
 password.rule.at.least.digits=Le mot de passe doit contenir au moins {0} chiffres.
+password.rule.at.least.digit.special=Le mot de passe doit contenir au moins {0} chiffre ou caract\u00E8re sp\u00E9cial.
 password.rule.at.least.digits.specials=Le mot de passe doit contenir au moins {0} chiffres ou caract\u00E8res sp\u00E9ciaux.
 password.rule.at.least.letters=Le mot de passe doit contenir au moins {0} caract\u00E8res.
+password.rule.at.least.letter=Le mot de passe doit contenir au moins {0} caract\u00E8re.
+password.rule.at.least.letter.lowercase=Le mot de passe doit contenir au moins {0} caract\u00E8re en minuscule.
 password.rule.at.least.letters.lowercase=Le mot de passe doit contenir au moins {0} caract\u00E8res en minuscule.
+password.rule.at.least.letter.uppercase=Le mot de passe doit contenir au moins {0} caract\u00E8re majuscule.
 password.rule.at.least.letters.uppercase=Le mot de passe doit contenir au moins {0} caract\u00E8res majuscules.
+password.rule.at.least.special=Le mot de passe doit contenir au moins {0} caract\u00E8re sp\u00E9cial.
 password.rule.at.least.specials=Le mot de passe doit contenir au moins {0} caract\u00E8res sp\u00E9ciaux.
 password.rule.forbidden.digits=Le mot de passe ne doit pas contenir de chiffres.
 password.rule.forbidden.digits.specials=Le mot de passe ne doit contenir aucuns chiffres ou caract\u00E8res sp\u00E9ciaux.
diff --git a/src/main/java/org/olat/login/validation/PasswordValidationRuleFactory.java b/src/main/java/org/olat/login/validation/PasswordValidationRuleFactory.java
index 26a238f5ec3d028876c787ab78fcfae386e278d6..af7d319d57cc9545c83f34892cae35c2221b50cf 100644
--- a/src/main/java/org/olat/login/validation/PasswordValidationRuleFactory.java
+++ b/src/main/java/org/olat/login/validation/PasswordValidationRuleFactory.java
@@ -49,27 +49,32 @@ public class PasswordValidationRuleFactory {
 	}
 	
 	public ValidationRule createAtLeastLettersRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.letters", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.letters" : "password.rule.at.least.letter";
+		ValidationDescription description = createDescription(i18nKey, min);
 		return new AtLeastCharacterRule(description, Character::isLetter, min);
 	}
 	
 	public ValidationRule createAtLeastLettersUppercaseRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.letters.uppercase", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.letters.uppercase" : "password.rule.at.least.letter.uppercase";
+		ValidationDescription description = createDescription(i18nKey, min);
 		return new AtLeastCharacterRule(description, Character::isUpperCase, min);
 	}
 	
 	public ValidationRule createAtLeastLettersLowercaseRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.letters.lowercase", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.letters.lowercase" : "password.rule.at.least.letter.lowercase";
+		ValidationDescription description = createDescription(i18nKey, min);
 		return new AtLeastCharacterRule(description, Character::isLowerCase, min);
 	}
 	
 	public ValidationRule createAtLeastDigitsRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.digits", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.digits" : "password.rule.at.least.digit";
+		ValidationDescription description = createDescription(i18nKey, min);
 		return new AtLeastCharacterRule(description, Character::isDigit, min);
 	}
 	
 	public ValidationRule createAtLeastSpecialSignsRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.specials", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.specials" : "password.rule.at.least.special";
+		ValidationDescription description = createDescription(i18nKey, min);
 		// at least 2: .*\\W.*\\W.*
 		String regex = Stream.generate(() -> ".*").limit(min + 1).collect(Collectors.joining("[_|\\W]"));
 		Pattern pattern = Pattern.compile(regex, UNICODE_CHARACTER_CLASS);
@@ -77,7 +82,8 @@ public class PasswordValidationRuleFactory {
 	}
 	
 	public ValidationRule createAtLeastDigitsOrSpecialSignsRule(int min) {
-		ValidationDescription description = createDescription("password.rule.at.least.digits.specials", min);
+		String i18nKey = min > 1 ? "password.rule.at.least.digits.specials" : "password.rule.at.least.digit.special";
+		ValidationDescription description = createDescription(i18nKey, min);
 		String regex = Stream.generate(() -> ".*").limit(min + 1).collect(Collectors.joining("[_|\\d|\\W]"));
 		Pattern pattern = Pattern.compile(regex, UNICODE_CHARACTER_CLASS);
 		return new RegexRule(description, pattern);
diff --git a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
index e2560073d58169227c65f3d22cbdf1c5568c20f9..48b6bbed3645348e59a89ee8c9c3cc73bda272a0 100644
--- a/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/user/_i18n/LocalStrings_de.properties
@@ -23,7 +23,7 @@ error.change.email.time=Dieser Aktivierungs-Link hat eine G\u00FCltigkeitsdauer
 error.change.email.unexpected=Ihre E-Mail Adresse konnte nicht ge\u00C4ndert werden. Ein unerwarteter Fehler ist aufgetreten.
 error.no.props.found=Es wurden keine Properties f\u00FCr diesen Benutzer gefunden
 error.password.empty=Geben Sie Ihr bisheriges Passwort an
-error.password.invalid=Das Password ist nicht g\u00FCltig.{0}
+error.password.invalid=Das Passwort ist nicht g\u00FCltig.{0}
 error.password.noauth=Ihr bisheriges Passwort ist nicht korrekt
 error.password.nomatch=Die beiden neuen Passw\u00F6rter stimmen nicht \u00FCberein.
 error.user.logged.in=Diese \u00C4nderung kann nicht vorgenommen werden da der Benutzer {0} zur Zeit eingeloggt ist. Warten Sie bis der Benutzer sich ausloggt und versuchen Sie es erneut.