keycloak-aplcache

i18n for code.ftl i18n for login-oauth-grant.ftl i18n

3/20/2015 6:36:42 AM

Changes

Details

diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/AdvancedMessageFormatterMethod.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/AdvancedMessageFormatterMethod.java
new file mode 100644
index 0000000..007d445
--- /dev/null
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/AdvancedMessageFormatterMethod.java
@@ -0,0 +1,36 @@
+package org.keycloak.freemarker.beans;
+
+import freemarker.template.TemplateMethodModelEx;
+import freemarker.template.TemplateModelException;
+
+import java.text.MessageFormat;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+
+/**
+ * @author <a href="mailto:gerbermichi@me.com">Michael Gerber</a>
+ */
+public class AdvancedMessageFormatterMethod implements TemplateMethodModelEx {
+    private final Properties messages;
+    private final Locale locale;
+
+    public AdvancedMessageFormatterMethod(Locale locale, Properties messages) {
+        this.locale = locale;
+        this.messages = messages;
+    }
+
+    @Override
+    public Object exec(List list) throws TemplateModelException {
+        if (list.size() >= 1) {
+            String key = list.get(0).toString();
+            if (key.startsWith("${") && key.endsWith("}")) {
+                key = key.substring(2, key.length() - 1);
+                return new MessageFormat(messages.getProperty(key, key), locale).format(list.subList(1, list.size()).toArray());
+            } else {
+                return key;
+            }
+        }
+        return null;
+    }
+}
diff --git a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/MessageFormatterMethod.java b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/MessageFormatterMethod.java
index 37bfc56..db57676 100644
--- a/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/MessageFormatterMethod.java
+++ b/forms/common-freemarker/src/main/java/org/keycloak/freemarker/beans/MessageFormatterMethod.java
@@ -22,8 +22,8 @@ public class MessageFormatterMethod implements TemplateMethodModelEx {
 
     @Override
     public Object exec(List list) throws TemplateModelException {
-        String key = list.get(0).toString();
         if (list.size() >= 1) {
+            String key = list.get(0).toString();
             return new MessageFormat(messages.getProperty(key,key),locale).format(list.subList(1, list.size()).toArray());
         } else {
             return null;
diff --git a/forms/common-themes/src/main/resources/theme/account/base/account.ftl b/forms/common-themes/src/main/resources/theme/account/base/account.ftl
index 34487d7..8a65599 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/account.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/account.ftl
@@ -3,10 +3,10 @@
 
     <div class="row">
         <div class="col-md-10">
-            <h2>Edit Account</h2>
+            <h2>${msg("editAccountHtmlTtile")}</h2>
         </div>
         <div class="col-md-2 subtitle">
-            <span class="subtitle"><span class="required">*</span> Required fields</span>
+            <span class="subtitle"><span class="required">*</span> ${msg("requiredFields")}</span>
         </div>
     </div>
 
@@ -104,9 +104,9 @@
         <div class="form-group">
             <div id="kc-form-buttons" class="col-md-offset-2 col-md-10 submit">
                 <div class="">
-                    <#if url.referrerURI??><a href="${url.referrerURI}">Back to application</a></#if>
-                    <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">Save</button>
-                    <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">Cancel</button>
+                    <#if url.referrerURI??><a href="${url.referrerURI}">${msg("backToApplication")}/a></#if>
+                    <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">${msg("doSave")}</button>
+                    <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">${msg("doCancel")}</button>
                 </div>
             </div>
         </div>
diff --git a/forms/common-themes/src/main/resources/theme/account/base/federatedIdentity.ftl b/forms/common-themes/src/main/resources/theme/account/base/federatedIdentity.ftl
index d15ba10..a9cf321 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/federatedIdentity.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/federatedIdentity.ftl
@@ -3,7 +3,7 @@
 
     <div class="row">
         <div class="col-md-10">
-            <h2>Federated Identities</h2>
+            <h2>${msg("federatedIdentitiesHtmlTitle")}</h2>
         </div>
     </div>
 
@@ -19,10 +19,10 @@
                 <div class="col-sm-5 col-md-5">
                     <#if identity.connected>
                         <#if federatedIdentity.removeLinkPossible>
-                            <a href="${identity.actionUrl}" type="submit" id="remove-${identity.providerId!}" class="btn btn-primary btn-lg">Remove ${identity.providerName!}</a>
+                            <a href="${identity.actionUrl}" type="submit" id="remove-${identity.providerId!}" class="btn btn-primary btn-lg">${msg("doRemove")}</a>
                         </#if>
                     <#else>
-                        <a href="${identity.actionUrl}" type="submit" id="add-${identity.providerId!}" class="btn btn-primary btn-lg">Add ${identity.providerName!}</a>
+                        <a href="${identity.actionUrl}" type="submit" id="add-${identity.providerId!}" class="btn btn-primary btn-lg">${msg("doAdd")}</a>
                     </#if>
                 </div>
             </div>
diff --git a/forms/common-themes/src/main/resources/theme/account/base/log.ftl b/forms/common-themes/src/main/resources/theme/account/base/log.ftl
index 8f64736..29046cf 100644
--- a/forms/common-themes/src/main/resources/theme/account/base/log.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/log.ftl
@@ -3,18 +3,18 @@
 
     <div class="row">
         <div class="col-md-10">
-            <h2>Account Log</h2>
+            <h2>${msg("accountLogHtmlTitle")}</h2>
         </div>
     </div>
 
     <table class="table table-striped table-bordered">
         <thead>
         <tr>
-            <td>Date</td>
-            <td>Event</td>
-            <td>IP</td>
-            <td>Client</td>
-            <td>Details</td>
+            <td>${msg("date")}</td>
+            <td>${msg("event")}</td>
+            <td>${msg("ip")}</td>
+            <td>${msg("client")}</td>
+            <td>${msg("details")}</td>
         </tr>
         </thead>
 
diff --git a/forms/common-themes/src/main/resources/theme/account/base/messages/messages_de.properties b/forms/common-themes/src/main/resources/theme/account/base/messages/messages_de.properties
index 4d3e4b3..79bc9ef 100644
--- a/forms/common-themes/src/main/resources/theme/account/base/messages/messages_de.properties
+++ b/forms/common-themes/src/main/resources/theme/account/base/messages/messages_de.properties
@@ -1,9 +1,24 @@
+doLogOutAllSessions=Alle Sessionen abmelden
+doSave=Speichern
+doCancel=Abbrechen
+doRemove=Entfernen
+doAdd=Hinzuf�gen
+doSignOut=Abmelden
+
+editAccountHtmlTtile=Benutzerkonto Bearbeiten
+federatedIdentitiesHtmlTitle=Federated Identities
+accountLogHtmlTitle=Benutzerkonto Log
+changePasswordHtmlTitle=Passwort �ndern
+sessionsHtmlTitle=Sessions
+accountManagementTitle=Keycloak Benutzerkontoverwaltung
+authenticatorTitle=Authenticator
+
 authenticatorCode=One-time code
 email=E-Mail
 firstName=Vorname
 lastName=Nachname
 password=Passwort
-passwordConfirm=Passwort best�tigung
+passwordConfirm=Passwortbest�tigung
 passwordNew=Neues Passwort
 username=Benutzernamen
 street=Strasse
@@ -12,6 +27,36 @@ postal_code=PLZ
 locality=Stadt oder Ortschaft
 country=Land
 
+requiredFields=Erforderliche Felder
+allFieldsRequired=Alle Felder sind Erforderlich
+
+backToApplication=&laquo; Zur�ck zur Applikation
+backTo=Zur�ck zu {0}
+
+date=Datum
+event=Ereignis
+ip=IP
+client=Client
+clients=Clients
+details=Details
+started=Startdatum
+lastAccess=Letzter Zugriff
+expires=Ablaufdatum
+applications=
+
+account=Benutzerkonto
+federatedIdentity=Federated Identity
+authenticator=Authenticator
+sessions=Sessions
+log=Log
+
+configureAuthenticators=Authenticators konfigurieren
+mobile=Mobile
+totpStep1=Installieren Sie <a href="https://fedorahosted.org/freeotp/" target="_blank">FreeOTP</a> oder <a href="http://code.google.com/p/google-authenticator/" target="_blank">Google Authenticator</a> auf Ihrem Smartphone.
+totpStep2=�ffnen Sie die Applikation und scannen Sie den Barcode oder geben sie den Code ein.
+totpStep3=Geben Sie den One-time Code welcher die Applikation generiert hat ein und klicken Sie auf Speichern.
+
+
 missingFirstNameMessage=Bitte geben Sie einen Vornamen ein.
 missingEmailMessage=Bitte geben Sie eine E-Mail Adresse ein.
 missingLastNameMessage=Bitte geben Sie einen Nachnamen ein.
@@ -20,7 +65,7 @@ notMatchPasswordMessage=Passw�rter sind nicht identisch.
 
 missingTotpMessage=Bitte geben Sie den One-time Code ein.
 invalidPasswordExistingMessage=Das aktuelle Passwort is ung�ltig.
-invalidPasswordConfirmMessage=Die Passwort best�tigung ist nicht identisch.
+invalidPasswordConfirmMessage=Die Passwortbest�tigung ist nicht identisch.
 invalidTotpMessage=Ung�ltiger One-time Code.
 invalidEmailMessage=Ung�ltige E-Mail Adresse.
 
@@ -37,15 +82,13 @@ missingIdentityProviderMessage=Identity Provider nicht angegeben.
 invalidFederatedIdentityActionMessage=Ung�ltige oder fehlende Aktion.
 identityProviderNotFoundMessage=Angegebener Identity Provider nicht gefunden.
 federatedIdentityLinkNotActiveMessage=Diese Identit�t ist nicht mehr aktiv.
-federatedIdentityRemovingLastProviderMessage=Sie k�nnen den letzen Eintrag nicht enfernen, da Sie kein Passwort haben.
-identityProviderRedirectErrorMessage=Fehler bei der Weiterleitung zum Identity Proivder.
+federatedIdentityRemovingLastProviderMessage=Sie k�nnen den letzen Eintrag nicht entfernen, da Sie kein Passwort haben.
+identityProviderRedirectErrorMessage=Fehler bei der Weiterleitung zum Identity Provider.
 identityProviderRemovedMessage=Identity Provider erfolgreich entfernt.
 
 accountDisabledMessage=Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.
 
-doLogOutAllSessions=Alle Sessionen abmelden
-
-accountTemporarilyDisabledMessage=Benutzerkonto ist tempor�r gespert, bitte kontaktieren Sie den Admin oder versuchen Sie es sp�ter nocheinmal.
+accountTemporarilyDisabledMessage=Benutzerkonto ist tempor�r gesperrt, bitte kontaktieren Sie den Admin oder versuchen Sie es sp�ter noch einmal.
 invalidPasswordMinLengthMessage=Ung�ltiges Passwort: minimum l�nge {0}.
 invalidPasswordMinDigitsMessage=Ung�ltiges Passwort: muss mindestens {0} Zahl(en) beinhalten.
 invalidPasswordMinLowerCaseCharsMessage=Ung�ltiges Passwort: muss mindestens {0} Kleinbuchstaben beinhalten.
diff --git a/forms/common-themes/src/main/resources/theme/account/base/messages/messages_en.properties b/forms/common-themes/src/main/resources/theme/account/base/messages/messages_en.properties
index 7cf27a4..0d995cd 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/messages/messages_en.properties
+++ b/forms/common-themes/src/main/resources/theme/account/base/messages/messages_en.properties
@@ -1,3 +1,18 @@
+doSave=Save
+doCancel=Cancel
+doLogOutAllSessions=Log out all sessions
+doRemove=Remove
+doAdd=Add
+doSignOut=Sign Out
+
+editAccountHtmlTtile=Edit Account
+federatedIdentitiesHtmlTitle=Federated Identities
+accountLogHtmlTitle=Account Log
+changePasswordHtmlTitle=Change Password
+sessionsHtmlTitle=Sessions
+accountManagementTitle=Keycloak Account Management
+authenticatorTitle=Authenticator
+
 authenticatorCode=One-time code
 email=Email
 firstName=First name
@@ -12,6 +27,35 @@ region=State, Province, or Region
 postal_code=Zip or Postal code
 country=Country
 
+requiredFields=Required fields
+allFieldsRequired=All fields required
+
+backToApplication=&laquo; Back to application
+backTo=Back to {0}
+
+date=Date
+event=Event
+ip=IP
+client=Client
+clients=Clients
+details=Details
+started=Started
+lastAccess=Last Access
+expires=Expires
+applications=Applications
+
+account=Account
+federatedIdentity=Federated Identity
+authenticator=Authenticator
+sessions=Sessions
+log=Log
+
+configureAuthenticators=Configured Authenticators
+mobile=Mobile
+totpStep1=Install <a href="https://fedorahosted.org/freeotp/" target="_blank">FreeOTP</a> or <a href="http://code.google.com/p/google-authenticator/" target="_blank">Google Authenticator</a> on your mobile.
+totpStep2=Open the application and scan the barcode or enter the key.
+totpStep3=Enter the one-time code provided by the application and click Save to finish the setup.
+
 missingFirstNameMessage=Please specify first name.
 invalidEmailMessage=Invalid email address.
 missingLastNameMessage=Please specify last name.
@@ -19,39 +63,37 @@ missingEmailMessage=Please specify email.
 missingPasswordMessage=Please specify password.
 notMatchPasswordMessage=Passwords don''t match.
 
-missingTotpMessage=Please specify authenticator code
-invalidPasswordExistingMessage=Invalid existing password
-invalidPasswordConfirmMessage=Password confirmation doesn''t match
-invalidTotpMessage=Invalid authenticator code
+missingTotpMessage=Please specify authenticator code.
+invalidPasswordExistingMessage=Invalid existing password.
+invalidPasswordConfirmMessage=Password confirmation doesn''t match.
+invalidTotpMessage=Invalid authenticator code.
 
-readOnlyUserMessage=You can''t update your account as it is read only
-readOnlyPasswordMessage=You can''t update your password as your account is read only
+readOnlyUserMessage=You can''t update your account as it is read only.
+readOnlyPasswordMessage=You can''t update your password as your account is read only.
 
 successTotpMessage=Mobile authenticator configured.
 successTotpRemovedMessage=Mobile authenticator removed.
 
-accountUpdatedMessage=Your account has been updated
-accountPasswordUpdatedMessage=Your password has been updated
+accountUpdatedMessage=Your account has been updated.
+accountPasswordUpdatedMessage=Your password has been updated.
 
-missingIdentityProviderMessage=Identity provider not specified
-invalidFederatedIdentityActionMessage=Invalid or missing action
-identityProviderNotFoundMessage=Specified identity provider not found
-federatedIdentityLinkNotActiveMessage=This identity is not active anymore
-federatedIdentityRemovingLastProviderMessage=You can''t remove last federated identity as you don''t have password
-identityProviderRedirectErrorMessage=Failed to redirect to identity provider
-identityProviderRemovedMessage=Identity provider removed successfully
+missingIdentityProviderMessage=Identity provider not specified.
+invalidFederatedIdentityActionMessage=Invalid or missing action.
+identityProviderNotFoundMessage=Specified identity provider not found.
+federatedIdentityLinkNotActiveMessage=This identity is not active anymore.
+federatedIdentityRemovingLastProviderMessage=You can''t remove last federated identity as you don''t have password.
+identityProviderRedirectErrorMessage=Failed to redirect to identity provider.
+identityProviderRemovedMessage=Identity provider removed successfully.
 
-accountDisabledMessage=Account is disabled, contact admin
-
-doLogOutAllSessions=Log out all sessions
+accountDisabledMessage=Account is disabled, contact admin.
 
-accountTemporarilyDisabledMessage=Account is temporarily disabled, contact admin or try again later
-invalidPasswordMinLengthMessage=Invalid password: minimum length {0}
-invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters
-invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits
-invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters
-invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters
-invalidPasswordNotUsernameMessage=Invalid password\: must not be equal to the username
+accountTemporarilyDisabledMessage=Account is temporarily disabled, contact admin or try again later.
+invalidPasswordMinLengthMessage=Invalid password: minimum length {0}.
+invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters.
+invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits.
+invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters.
+invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters.
+invalidPasswordNotUsernameMessage=Invalid password\: must not be equal to the username.
 
 locale_de=German
 locale_en=English
diff --git a/forms/common-themes/src/main/resources/theme/account/base/password.ftl b/forms/common-themes/src/main/resources/theme/account/base/password.ftl
index b0a3813..40acc6e 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/password.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/password.ftl
@@ -3,10 +3,10 @@
 
     <div class="row">
         <div class="col-md-10">
-            <h2>Change Password</h2>
+            <h2>${msg("changePasswordHtmlTitle")}</h2>
         </div>
         <div class="col-md-2 subtitle">
-            <span class="subtitle">All fields required</span>
+            <span class="subtitle">${msg("allFieldsRequired")}</span>
         </div>
     </div>
 
@@ -48,8 +48,8 @@
         <div class="form-group">
             <div id="kc-form-buttons" class="col-md-offset-2 col-md-10 submit">
                 <div class="">
-                    <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">Save</button>
-                    <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">Cancel</button>
+                    <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">${msg("doSave")}</button>
+                    <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">${msg("doCancel")}</button>
                 </div>
             </div>
         </div>
diff --git a/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl b/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
index 3010743..c781c79 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/sessions.ftl
@@ -3,19 +3,19 @@
 
     <div class="row">
         <div class="col-md-10">
-            <h2>Sessions</h2>
+            <h2>${msg("sessionsHtmlTitle")}</h2>
         </div>
     </div>
 
     <table class="table table-striped table-bordered">
         <thead>
         <tr>
-            <td>IP</td>
-            <td>Started</td>
-            <td>Last Access</td>
-            <td>Expires</td>
-            <td>Applications</td>
-            <td>Clients</td>
+            <td>${msg("ip")}</td>
+            <td>${msg("started")}</td>
+            <td>${msg("lastAccess")}</td>
+            <td>${msg("expires")}</td>
+            <td>${msg("applications")}</td>
+            <td>${msg("clients")}</td>
         </tr>
         </thead>
 
diff --git a/forms/common-themes/src/main/resources/theme/account/base/template.ftl b/forms/common-themes/src/main/resources/theme/account/base/template.ftl
index adfd52c..22bade4 100644
--- a/forms/common-themes/src/main/resources/theme/account/base/template.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/template.ftl
@@ -3,7 +3,7 @@
 <html>
 <head>
     <meta charset="utf-8">
-    <title>Keycloak Account Management</title>
+    <title>${msg("accountManagementTitle")}</title>
     <link rel="icon" href="${url.resourcesPath}/img/favicon.ico">
     <#if properties.styles?has_content>
         <#list properties.styles?split(' ') as style>
@@ -40,8 +40,8 @@
                                 </div>
                             <li>
                         </#if>
-                        <#if referrer?has_content && referrer.url?has_content><li><a href="${referrer.url}" id="referrer">Back to ${referrer.name}</a></li></#if>
-                        <li><a href="${url.logoutUrl}">Sign Out</a></li>
+                        <#if referrer?has_content && referrer.url?has_content><li><a href="${referrer.url}" id="referrer">${msg("backTo",referrer.name)}</a></li></#if>
+                        <li><a href="${url.logoutUrl}">${msg("doSignOut")}</a></li>
                     </ul>
                 </div>
             </div>
@@ -51,12 +51,12 @@
     <div class="container">
         <div class="bs-sidebar col-sm-3  ng-scope">
             <ul>
-                <li class="<#if active=='account'>active</#if>"><a href="${url.accountUrl}">Account</a></li>
-                <#if features.passwordUpdateSupported><li class="<#if active=='password'>active</#if>"><a href="${url.passwordUrl}">Password</a></li></#if>
-                <li class="<#if active=='totp'>active</#if>"><a href="${url.totpUrl}">Authenticator</a></li>
-                <#if features.identityFederation><li class="<#if active=='social'>active</#if>"><a href="${url.socialUrl}">Federated Identity</a></li></#if>
-                <li class="<#if active=='sessions'>active</#if>"><a href="${url.sessionsUrl}">Sessions</a></li>
-                <#if features.log><li class="<#if active=='log'>active</#if>"><a href="${url.logUrl}">Log</a></li></#if>
+                <li class="<#if active=='account'>active</#if>"><a href="${url.accountUrl}">${msg("account")}</a></li>
+                <#if features.passwordUpdateSupported><li class="<#if active=='password'>active</#if>"><a href="${url.passwordUrl}">${msg("password")}</a></li></#if>
+                <li class="<#if active=='totp'>active</#if>"><a href="${url.totpUrl}">${msg("authenticator")}</a></li>
+                <#if features.identityFederation><li class="<#if active=='social'>active</#if>"><a href="${url.socialUrl}">${msg("federatedIdentity")}</a></li></#if>
+                <li class="<#if active=='sessions'>active</#if>"><a href="${url.sessionsUrl}">${msg("sessions")}</a></li>
+                <#if features.log><li class="<#if active=='log'>active</#if>"><a href="${url.logUrl}">${msg("log")}</a></li></#if>
             </ul>
         </div>
 
diff --git a/forms/common-themes/src/main/resources/theme/account/base/totp.ftl b/forms/common-themes/src/main/resources/theme/account/base/totp.ftl
index 45e7829..9602100 100755
--- a/forms/common-themes/src/main/resources/theme/account/base/totp.ftl
+++ b/forms/common-themes/src/main/resources/theme/account/base/totp.ftl
@@ -2,17 +2,17 @@
 <@layout.mainLayout active='totp' bodyClass='totp'; section>
 
     <#if totp.enabled>
-        <h2>Authenticators</h2>
+        <h2>${msg("authenticatorTitle")}</h2>
 
         <table class="table table-bordered table-striped">
             <thead
                 <tr>
-                   <th colspan="2">Configured Authenticators</th>
+                   <th colspan="2">${msg("configureAuthenticators")}/th>
                 </tr>
             </thead>
             <tbody>
             <tr>
-                <td class="provider">Mobile</td>
+                <td class="provider">${msg("mobile")}</td>
                 <td class="action">
                     <a id="remove-mobile" href="${url.totpRemoveUrl}"><i class="pficon pficon-delete"></i></a>
                 </td>
@@ -20,23 +20,21 @@
             </tbody>
         </table>
     <#else>
-        <h2>Authenticator</h2>
+        <h2>${msg("authenticatorTitle")}</h2>
 
         <hr/>
 
         <ol>
             <li>
-                Install <a href="https://fedorahosted.org/freeotp/" target="_blank">FreeOTP</a> or
-                <a href="http://code.google.com/p/google-authenticator/" target="_blank">Google Authenticator</a>
-                on your mobile
+                <p>${msg("totpStep1")}</p>
             </li>
             <li>
-                Open the application and scan the barcode or enter the key<br/>
+                <p>${msg("totpStep2")}</p>
                 <img src="${totp.totpSecretQrCodeUrl}" alt="Figure: Barcode"><br/>
                 <span class="code">${totp.totpSecretEncoded}</span>
             </li>
             <li>
-                Enter the one-time code provided by the application and click Submit to finish the setup.
+                <p>${msg("totpStep3")}</p>
             </li>
         </ol>
 
@@ -58,8 +56,8 @@
             <div class="form-group">
                 <div id="kc-form-buttons" class="col-md-offset-2 col-md-10 submit">
                     <div class="">
-                        <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">Save</button>
-                        <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">Cancel</button>
+                        <button type="submit" class="btn btn-primary btn-lg" name="submitAction" value="Save">${msg("doSave")}</button>
+                        <button type="submit" class="btn btn-default btn-lg" name="submitAction" value="Cancel">${msg("doCancel")}</button>
                     </div>
                 </div>
             </div>
diff --git a/forms/common-themes/src/main/resources/theme/email/keycloak/messages/messages_de.properties b/forms/common-themes/src/main/resources/theme/email/keycloak/messages/messages_de.properties
index a5a85f9..60228c3 100644
--- a/forms/common-themes/src/main/resources/theme/email/keycloak/messages/messages_de.properties
+++ b/forms/common-themes/src/main/resources/theme/email/keycloak/messages/messages_de.properties
@@ -1,6 +1,6 @@
 emailVerificationSubject=E-Mail verifizieren
 passwordResetSubject=Passwort zur�ckzusetzen
-passwordResetBody=Jemand hat angeforder Ihr Keycloak Passwort zur�ckzusetzen. Falls das Sie waren, dann klicken Sie auf den folgenden Link um das Passwort zur�ckzusetzen.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie das Passwort nicht zur�cksetzen m�chten, dann k�nnen Sie diese E-Mail ignorieren.
+passwordResetBody=Jemand hat angefordert Ihr Keycloak Passwort zur�ckzusetzen. Falls das Sie waren, dann klicken Sie auf den folgenden Link um das Passwort zur�ckzusetzen.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie das Passwort nicht zur�cksetzen m�chten, dann k�nnen Sie diese E-Mail ignorieren.
 emailVerificationBody=Jemand hat ein Keycloak Konto mit dieser E-Mail Adresse erstellt. Fall das Sie waren, dann klicken Sie auf den Link um die E-Mail Adresse zu verifizieren.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie dieses Konto nicht erstellt haben, dann k�nnen sie diese Nachricht ignorieren.
 eventLoginErrorSubject=Fehlgeschlagene Anmeldung
 eventLoginErrorBody=Jemand hat um {0} von {1} versucht sich mit ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.
diff --git a/forms/common-themes/src/main/resources/theme/login/base/code.ftl b/forms/common-themes/src/main/resources/theme/login/base/code.ftl
index eb84d7b..f266bda 100755
--- a/forms/common-themes/src/main/resources/theme/login/base/code.ftl
+++ b/forms/common-themes/src/main/resources/theme/login/base/code.ftl
@@ -2,14 +2,14 @@
 <@layout.registrationLayout; section>
     <#if section = "title">
         <#if code.success>
-            Success code=${code.code}
+            ${msg("codeSuccessTitle")}
         <#else>
-            Error error=${code.error}
+            ${msg("codeErrorTitle", code.error)}
         </#if>
     <#elseif section = "form">
         <div id="kc-code">
             <#if code.success>
-                <p>Please copy this code and paste it into your application:</p>
+                <p>${msg("copyCodeInstruction")}</p>
                 <input id="code" class="${properties.kcTextareaClass!}" value="${code.code}"/>
             <#else>
                 <p id="error">${code.error}</p>
diff --git a/forms/common-themes/src/main/resources/theme/login/base/login-oauth-grant.ftl b/forms/common-themes/src/main/resources/theme/login/base/login-oauth-grant.ftl
index 757a715..9b0637b 100755
--- a/forms/common-themes/src/main/resources/theme/login/base/login-oauth-grant.ftl
+++ b/forms/common-themes/src/main/resources/theme/login/base/login-oauth-grant.ftl
@@ -12,9 +12,9 @@
                 <#if oauth.claimsRequested??>
                     <li>
                         <span>
-                        Personal Info:&nbsp;
+                            ${msg("personalInfo")}&nbsp;
                             <#list oauth.claimsRequested as claim>
-                            ${claim}&nbsp;
+                                ${advancedMsg(claim)}<#if claim_has_next>,&nbsp;</#if>
                             </#list>
                         </span>
                     </li>
@@ -29,7 +29,7 @@
                 <#if oauth.realmRolesRequested??>
                     <#list oauth.realmRolesRequested as role>
                         <li>
-                            <span><#if role.description??>${role.description}<#else>${role.name}</#if></span>
+                            <span><#if role.description??>${advancedMsg(role.description)}<#else>${advancedMsg(role.name)}</#if></span>
                         </li>
                     </#list>
                 </#if>
@@ -37,8 +37,8 @@
                     <#list oauth.resourceRolesRequested?keys as resource>
                         <#list oauth.resourceRolesRequested[resource] as role>
                             <li>
-                                <span class="kc-role"><#if role.description??>${role.description}<#else>${role.name}</#if></span>
-                                <span class="kc-resource">in <strong>${resource}</strong></span>
+                                <span class="kc-role"><#if role.description??>${advancedMsg(role.description)}<#else>${advancedMsg(role.name)}</#if></span>
+                                <span class="kc-resource">${msg("inResource", resource)}</span>
                             </li>
                         </#list>
                     </#list>
diff --git a/forms/common-themes/src/main/resources/theme/login/base/messages/messages_de.properties b/forms/common-themes/src/main/resources/theme/login/base/messages/messages_de.properties
index c4c2bef..dc5acea 100644
--- a/forms/common-themes/src/main/resources/theme/login/base/messages/messages_de.properties
+++ b/forms/common-themes/src/main/resources/theme/login/base/messages/messages_de.properties
@@ -12,16 +12,18 @@ registerWithTitleHtml=Registrierung bei <strong>{0}</strong>
 loginTitle=Anmeldung bei {0}
 loginTitleHtml=Anmeldung bei <strong>{0}</strong>
 loginOauthTitle=Tempor�rer zugriff auf {0}
-loginOauthTitleHtml=Tempor�rer zugriff auf <strong>{0}<strong> angefordert von <strong>{1}</strong>.
+loginOauthTitleHtml=Tempor�rer zugriff auf <strong>{0}</strong> angefordert von <strong>{1}</strong>.
 loginTotpTitle=Mobile Authentifizierung Einrichten
-loginProfileTitle=Benutzer Konto Informatinen aktualisieren
+loginProfileTitle=Benutzerkonto Informationen aktualisieren
 oauthGrantTitle=OAuth gew�hren
-oauthGrantTitleHtml=Tempor�rer zugriff auf <strong>{0}<strong> angefordert von <strong>{1}</strong>.
+oauthGrantTitleHtml=Tempor�rer zugriff auf <strong>{0}</strong> angefordert von <strong>{1}</strong>.
 errorTitle=Es tut uns leid...
 errorTitleHtml=Es tut uns leid...
 emailVerifyTitle=E-Mail verifizieren
 emailForgotTitle=Passwort vergessen?
 updatePasswordTitle=Passwort aktualisieren
+codeSuccessTitle=Erfolgreicher code
+codeErrorTitle=Fehler code\: {0}
 
 noAccount=Neuer Benutzer?
 username=Benutzername
@@ -47,7 +49,8 @@ loginTotpStep2=�ffnen Sie die Applikation und scannen Sie den Barcode oder geben
 loginTotpStep3=Geben Sie den One-time Code welcher die Applikation generiert hat ein und klicken Sie auf Absenden.
 loginTotpOneTime=One-time Code
 
-oauthGrantRequest=Do you grant these access privileges?
+oauthGrantRequest=Wollen Sie diese Zugriffsreche gew�hren?
+inResource=in <strong>{0}</strong>
 
 emailVerifyInstruction1=Ein E-Mail mit weitern Anweisungen wurde an Sie versendet.
 emailVerifyInstruction2=Falls Sie kein E-Mail erhalten haben, dann k�nnen Sie 
@@ -58,10 +61,14 @@ backToApplication=&laquo; Zur�ck zur Applikation
 
 emailInstruction=Geben Sie ihren Benutzernamen oder E-Mail Adresse ein und klicken Sie auf Absenden. Danach werden wir ihnen ein E-Mail mit weiteren Instruktionen zusenden.
 
+copyCodeInstruction=Bitte kopieren sie den folgenden Code und f�gen ihn in die Applikation ein\:
+
+personalInfo=Pers�nliche Informationen:
+
 invalidUserMessage=Ung�ltiger Benutzername oder Passwort.
 invalidEmailMessage=Ung�ltige E-Mail Adresse.
 accountDisabledMessage=Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.
-accountTemporarilyDisabledMessage=Benutzerkonto ist tempor�r gespert, bitte kontaktieren Sie den Admin oder versuchen Sie es sp�ter nocheinmal.
+accountTemporarilyDisabledMessage=Benutzerkonto ist tempor�r gesperrt, bitte kontaktieren Sie den Admin oder versuchen Sie es sp�ter noch einmal.
 expiredCodeMessage=Zeit�berschreitung bei der Anmeldung. Bitter melden Sie sich erneut an.
 
 missingFirstNameMessage=Bitte geben Sie einen Vornamen ein.
@@ -73,14 +80,14 @@ missingTotpMessage=Bitte geben Sie den One-time Code ein.
 notMatchPasswordMessage=Passw�rter sind nicht identisch.
 
 invalidPasswordExistingMessage=Das aktuelle Passwort is ung�ltig.
-invalidPasswordConfirmMessage=Die Passwort best�tigung ist nicht identisch.
+invalidPasswordConfirmMessage=Die Passwortbest�tigung ist nicht identisch.
 invalidTotpMessage=Ung�ltiger One-time Code.
 
-usernameExistsMessage=Benutzermane exisitert bereits.
+usernameExistsMessage=Benutzername existiert bereits.
 emailExistsMessage=E-Mail existiert bereits.
 
-federatedIdentityEmailExistsMessage=Es exisitert bereits ein Benutzer mit dieser E-Mail Adresse. Bitte melden Sie sich bei der Benutzerverwaltung an um das Benutzerkonto zu verkn�pfen.
-federatedIdentityUsernameExistsMessage=Es exisitert bereits ein Benutzer mit diesem Benutzernamen. Bitte melden Sie sich bei der Benutzerverwaltung an um das Benutzerkonto zu verkn�pfen.
+federatedIdentityEmailExistsMessage=Es existiert bereits ein Benutzer mit dieser E-Mail Adresse. Bitte melden Sie sich bei der Benutzerverwaltung an um das Benutzerkonto zu verkn�pfen.
+federatedIdentityUsernameExistsMessage=Es existiert bereits ein Benutzer mit diesem Benutzernamen. Bitte melden Sie sich bei der Benutzerverwaltung an um das Benutzerkonto zu verkn�pfen.
 
 configureTotpMessage=Sie m�ssen eine Mobile Authentifizierung einrichten um das Benutzerkonto zu aktivieren.
 updateProfileMessage=Sie m�ssen ihr Benutzerkonto aktualisieren um das Benutzerkonto zu aktivieren.
@@ -118,28 +125,28 @@ registrationNotAllowedMessage=Registrierung nicht erlaubt.
 permissionNotApprovedMessage=Berechtigung nicht best�tigt.
 noRelayStateInResponseMessage=Kein relay state in der Antwort von dem Identity Provider [{0}].
 identityProviderAlreadyLinkedMessage=Die Identit�t welche von dem Identity Provider [{0}] zur�ckgegeben wurde, ist bereits mit einem anderen Benutzer verkn�pft.
-insufficientPermissionMessage=Nicht gen�gtend Rechte um die Identit�t zu verkn�pfen.
+insufficientPermissionMessage=Nicht gen�gend Rechte um die Identit�t zu verkn�pfen.
 couldNotProceedWithAuthenticationRequestMessage=Konnte den Authentifizierungs Request nicht weiter verarbeiten.
 couldNotObtainTokenMessage=Konnte kein token vom Identity Provider [{0}] entnehmen.
 unexpectedErrorRetrievingTokenMessage=Unerwarteter Fehler w�hrend dem Empfang des Token von dem Identity Provider [{0}].
-unexpectedErrorHandlingResponseMessage=Unerwarteter Fehler w�hrend der bearbeitung des Respons vom Identity Provider [{0}].
+unexpectedErrorHandlingResponseMessage=Unerwarteter Fehler w�hrend der Bearbeitung des Respons vom Identity Provider [{0}].
 identityProviderAuthenticationFailedMessage=Authentifizierung Fehlgeschlagen. Konnte sich mit dem Identity Provider [{0}] nicht authentifizieren.
-couldNotSendAuthenticationRequestMessage=Konnte Authentifizierungs Request nicht an den Identity Provider [{0}] schiken.
-unexpectedErrorHandlingRequestMessage=Unerwarteter Fehler w�hrend der bearbeitung des Requests zum Identity Provider [{0}].
+couldNotSendAuthenticationRequestMessage=Konnte Authentifizierungs Request nicht an den Identity Provider [{0}] schicken.
+unexpectedErrorHandlingRequestMessage=Unerwarteter Fehler w�hrend der Bearbeitung des Requests zum Identity Provider [{0}].
 invalidAccessCodeMessage=Ung�ltiger Access-Code.
 sessionNotActiveMessage=Session nicht aktiv.
 unknownCodeMessage=Unbekannter Code, bitte melden Sie sich erneut �ber die Applikation an.
 invalidCodeMessage=Ung�ltiger Code, bitte melden Sie sich erneut �ber die Applikation an.
 identityProviderUnexpectedErrorMessage=Unerwarteter Fehler w�hrend der Authentifizierung mit dem Identity Provider.
-identityProviderNotFoundMessage=Konnte kein Identity Provider mit der Idenit�t [{0}] finden.
-realmSupportsNoCredentialsMessage=Realm [{0}] unterst�tzt keine Credential Typen..
+identityProviderNotFoundMessage=Konnte kein Identity Provider mit der Identit�t [{0}] finden.
+realmSupportsNoCredentialsMessage=Realm [{0}] unterst�tzt keine Credential Typen.
 identityProviderNotUniqueMessage=Realm [{0}] unterst�tz mehrere Identity Providers.
 
 invalidParameterMessage=Invalid parameter\: {0}
 missingParameterMessage=Missing parameter\: {0}
 clientNotFoundMessage=Client not found.
 
-emailVerifiedMessage=Ihr E-Mail Addresse wurde erfolgreich verifiziert.
+emailVerifiedMessage=Ihr E-Mail Adresse wurde erfolgreich verifiziert.
 
 locale_de=Deutsch
 locale_en=Englisch
diff --git a/forms/common-themes/src/main/resources/theme/login/base/messages/messages_en.properties b/forms/common-themes/src/main/resources/theme/login/base/messages/messages_en.properties
index afbe584..5ed7cec 100755
--- a/forms/common-themes/src/main/resources/theme/login/base/messages/messages_en.properties
+++ b/forms/common-themes/src/main/resources/theme/login/base/messages/messages_en.properties
@@ -12,7 +12,7 @@ registerWithTitleHtml=Register with <strong>{0}</strong>
 loginTitle=Log in to {0}
 loginTitleHtml=Log in to <strong>{0}</strong>
 loginOauthTitle=Temporary access for {0}
-loginOauthTitleHtml=Temporary access for <strong>{0}<strong> requested by <strong>{1}</strong>.
+loginOauthTitleHtml=Temporary access for <strong>{0}</strong> requested by <strong>{1}</strong>.
 loginTotpTitle=Mobile Authenticator Setup
 loginProfileTitle=Update Account Information
 oauthGrantTitle=OAuth Grant
@@ -22,6 +22,8 @@ errorTitleHtml=We''re <strong>sorry</strong> ...
 emailVerifyTitle=Email verification
 emailForgotTitle=Forgot Your Password?
 updatePasswordTitle=Update password
+codeSuccessTitle=Success code
+codeErrorTitle=Error code\: {0}
 
 noAccount=New user?
 username=Username
@@ -48,6 +50,7 @@ loginTotpStep3=Enter the one-time code provided by the application and click Sub
 loginTotpOneTime=One-time code
 
 oauthGrantRequest=Do you grant these access privileges?
+inResource=in <strong>{0}</strong>
 
 emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you.
 emailVerifyInstruction2=Haven''t received a verification code in your email?
@@ -57,6 +60,10 @@ backToLogin=&laquo; Back to Login
 
 emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password.
 
+copyCodeInstruction=Please copy this code and paste it into your application:
+
+personalInfo=Personal Info:
+
 invalidUserMessage=Invalid username or password.
 invalidEmailMessage=Invalid email address.
 accountDisabledMessage=Account is disabled, contact admin.
@@ -87,19 +94,19 @@ updatePasswordMessage=You need to change your password to activate your account.
 verifyEmailMessage=You need to verify your email address to activate your account.
 
 emailSentMessage=You should receive an email shortly with further instructions.
-emailSendErrorMessage=Failed to send email, please try again later
+emailSendErrorMessage=Failed to send email, please try again later.
 
-accountUpdatedMessage=Your account has been updated
-accountPasswordUpdatedMessage=Your password has been updated
+accountUpdatedMessage=Your account has been updated.
+accountPasswordUpdatedMessage=Your password has been updated.
 
 noAccessMessage=No access
 
-invalidPasswordMinLengthMessage=Invalid password: minimum length {0}
-invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits
-invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters
-invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters
-invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters
-invalidPasswordNotUsernameMessage=Invalid password\: must not be equal to the username
+invalidPasswordMinLengthMessage=Invalid password: minimum length {0}.
+invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits.
+invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters.
+invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters.
+invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters.
+invalidPasswordNotUsernameMessage=Invalid password\: must not be equal to the username.
 
 failedToProcessResponseMessage=Failed to process response
 httpsRequiredMessage=HTTPS required
diff --git a/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/FreeMarkerLoginFormsProvider.java b/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/FreeMarkerLoginFormsProvider.java
index 44c8bad..9aca77f 100755
--- a/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/FreeMarkerLoginFormsProvider.java
+++ b/forms/login-freemarker/src/main/java/org/keycloak/login/freemarker/FreeMarkerLoginFormsProvider.java
@@ -6,6 +6,7 @@ import org.keycloak.OAuth2Constants;
 import org.keycloak.email.EmailException;
 import org.keycloak.email.EmailProvider;
 import org.keycloak.freemarker.*;
+import org.keycloak.freemarker.beans.AdvancedMessageFormatterMethod;
 import org.keycloak.freemarker.beans.MessageFormatterMethod;
 import org.keycloak.login.LoginFormsPages;
 import org.keycloak.login.LoginFormsProvider;
@@ -239,6 +240,7 @@ import java.util.concurrent.TimeUnit;
                 break;
             case OAUTH_GRANT:
                 attributes.put("oauth", new OAuthGrantBean(accessCode, clientSession, client, realmRolesRequested, resourceRolesRequested, this.accessRequestMessage));
+                attributes.put("advancedMsg", new AdvancedMessageFormatterMethod(locale, messages));
                 break;
             case CODE:
                 attributes.put(OAuth2Constants.CODE, new CodeBean(accessCode, messageType == MessageType.ERROR ? message : null));
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
index fb78299..00b071e 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/account/AccountTest.java
@@ -207,11 +207,11 @@ public class AccountTest {
 
         changePasswordPage.changePassword("password", "new-password", "new-password2");
 
-        Assert.assertEquals("Password confirmation doesn't match", profilePage.getError());
+        Assert.assertEquals("Password confirmation doesn't match.", profilePage.getError());
 
         changePasswordPage.changePassword("password", "new-password", "new-password");
 
-        Assert.assertEquals("Your password has been updated", profilePage.getSuccess());
+        Assert.assertEquals("Your password has been updated.", profilePage.getSuccess());
 
         events.expectAccount(EventType.UPDATE_PASSWORD).assertEvent();
 
@@ -256,7 +256,7 @@ public class AccountTest {
 
             changePasswordPage.changePassword("password", "new-password", "new-password");
 
-            Assert.assertEquals("Your password has been updated", profilePage.getSuccess());
+            Assert.assertEquals("Your password has been updated.", profilePage.getSuccess());
 
             events.expectAccount(EventType.UPDATE_PASSWORD).assertEvent();
         } finally {
@@ -318,7 +318,7 @@ public class AccountTest {
 
         profilePage.updateProfile("New first", "New last", "new@email.com");
 
-        Assert.assertEquals("Your account has been updated", profilePage.getSuccess());
+        Assert.assertEquals("Your account has been updated.", profilePage.getSuccess());
         Assert.assertEquals("New first", profilePage.getFirstName());
         Assert.assertEquals("New last", profilePage.getLastName());
         Assert.assertEquals("new@email.com", profilePage.getEmail());
@@ -341,7 +341,7 @@ public class AccountTest {
         // Error with false code
         totpPage.configure(totp.generate(totpPage.getTotpSecret() + "123"));
 
-        Assert.assertEquals("Invalid authenticator code", profilePage.getError());
+        Assert.assertEquals("Invalid authenticator code.", profilePage.getError());
 
         totpPage.configure(totp.generate(totpPage.getTotpSecret()));
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/AbstractKerberosTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/AbstractKerberosTest.java
index 9d59ad9..af994f4 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/AbstractKerberosTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/AbstractKerberosTest.java
@@ -146,7 +146,7 @@ public abstract class AbstractKerberosTest {
 
         // Successfully change password now
         changePasswordPage.changePassword("theduke", "newPass", "newPass");
-        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated"));
+        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated."));
         changePasswordPage.logout();
 
         // Login with old password doesn't work, but with new password works
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/FederationProvidersIntegrationTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/FederationProvidersIntegrationTest.java
index 5f484dc..cfaae07 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/FederationProvidersIntegrationTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/FederationProvidersIntegrationTest.java
@@ -209,7 +209,7 @@ public class FederationProvidersIntegrationTest {
         loginPage.login("johnkeycloak", "Password1");
         changePasswordPage.changePassword("Password1", "New-password1", "New-password1");
 
-        Assert.assertEquals("Your password has been updated", profilePage.getSuccess());
+        Assert.assertEquals("Your password has been updated.", profilePage.getSuccess());
 
         changePasswordPage.logout();
 
@@ -224,7 +224,7 @@ public class FederationProvidersIntegrationTest {
         // Change password back to previous value
         changePasswordPage.open();
         changePasswordPage.changePassword("New-password1", "Password1", "Password1");
-        Assert.assertEquals("Your password has been updated", profilePage.getSuccess());
+        Assert.assertEquals("Your password has been updated.", profilePage.getSuccess());
     }
 
     @Test
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/KerberosLdapTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/KerberosLdapTest.java
index 07ca87c..1d94c68 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/KerberosLdapTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/federation/KerberosLdapTest.java
@@ -109,7 +109,7 @@ public class KerberosLdapTest extends AbstractKerberosTest {
 
         // Successfully change password now
         changePasswordPage.changePassword("theduke", "newPass", "newPass");
-        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated"));
+        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated."));
         changePasswordPage.logout();
 
         // Login with old password doesn't work, but with new password works
@@ -136,7 +136,7 @@ public class KerberosLdapTest extends AbstractKerberosTest {
         loginPage.login("jduke", "newPass");
         changePasswordPage.assertCurrent();
         changePasswordPage.changePassword("newPass", "theduke", "theduke");
-        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated"));
+        Assert.assertTrue(driver.getPageSource().contains("Your password has been updated."));
         changePasswordPage.logout();
 
         spnegoResponse.close();
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java
index b2ac90e..13c628a 100644
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/RegisterTest.java
@@ -128,7 +128,7 @@ public class RegisterTest {
             registerPage.register("firstName", "lastName", "registerPasswordPolicy@email", "registerPasswordPolicy", "pass", "pass");
 
             registerPage.assertCurrent();
-            Assert.assertEquals("Invalid password: minimum length 8", registerPage.getError());
+            Assert.assertEquals("Invalid password: minimum length 8.", registerPage.getError());
 
             events.expectRegister("registerPasswordPolicy", "registerPasswordPolicy@email").user((String) null).error("invalid_registration").assertEvent();
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
index a96b660..1b53664 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/forms/ResetPasswordTest.java
@@ -394,7 +394,7 @@ public class ResetPasswordTest {
 
             errorPage.assertCurrent();
 
-            assertEquals("Failed to send email, please try again later", errorPage.getError());
+            assertEquals("Failed to send email, please try again later.", errorPage.getError());
 
             Thread.sleep(1000);
 
@@ -446,7 +446,7 @@ public class ResetPasswordTest {
 
         updatePasswordPage.changePassword("invalid", "invalid");
 
-        assertEquals("Invalid password: minimum length 8", resetPasswordPage.getErrorMessage());
+        assertEquals("Invalid password: minimum length 8.", resetPasswordPage.getErrorMessage());
 
         updatePasswordPage.changePassword("resetPasswordWithPasswordPolicy", "resetPasswordWithPasswordPolicy");
 
@@ -504,7 +504,7 @@ public class ResetPasswordTest {
         events.expectRequiredAction(EventType.UPDATE_PASSWORD).user(userId).session(sessionId).detail(Details.USERNAME, username).assertEvent();
 
         assertTrue(infoPage.isCurrent());
-        assertEquals("Your password has been updated", infoPage.getInfo());
+        assertEquals("Your password has been updated.", infoPage.getInfo());
 
         loginPage.open();
 
diff --git a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AuthorizationCodeTest.java b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AuthorizationCodeTest.java
index 0c56d7a..90a0e29 100755
--- a/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AuthorizationCodeTest.java
+++ b/testsuite/integration/src/test/java/org/keycloak/testsuite/oauth/AuthorizationCodeTest.java
@@ -28,10 +28,8 @@ import org.junit.Test;
 import org.keycloak.OAuth2Constants;
 import org.keycloak.events.Details;
 import org.keycloak.events.Errors;
-import org.keycloak.events.EventType;
 import org.keycloak.models.Constants;
 import org.keycloak.models.RealmModel;
-import org.keycloak.protocol.oidc.OIDCLoginProtocolService;
 import org.keycloak.services.managers.ClientSessionCode;
 import org.keycloak.services.managers.RealmManager;
 import org.keycloak.testsuite.AssertEvents;
@@ -106,7 +104,7 @@ public class AuthorizationCodeTest {
         oauth.doLogin("test-user@localhost", "password");
 
         String title = driver.getTitle();
-        Assert.assertTrue(title.startsWith("Success code="));
+        Assert.assertEquals("Success code", title);
 
         String code = driver.findElement(By.id(OAuth2Constants.CODE)).getAttribute("value");
         keycloakRule.verifyCode(code);
@@ -136,7 +134,7 @@ public class AuthorizationCodeTest {
         driver.findElement(By.name("cancel")).click();
 
         String title = driver.getTitle();
-        Assert.assertTrue(title.equals("Error error=access_denied"));
+        Assert.assertEquals("Error code: access_denied",title);
 
         String error = driver.findElement(By.id(OAuth2Constants.ERROR)).getText();
         assertEquals("access_denied", error);