You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/06/16 15:59:07 UTC
syncope git commit: SYNCOPE-721 i18n added
Repository: syncope
Updated Branches:
refs/heads/master 5de3c430c -> e5eed43a3
SYNCOPE-721 i18n added
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e5eed43a
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e5eed43a
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e5eed43a
Branch: refs/heads/master
Commit: e5eed43a30ac25fda0b9c86e32364522d863c64e
Parents: 5de3c43
Author: Matteo Di Carlo <ma...@tirasa.net>
Authored: Fri May 20 12:43:01 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Thu Jun 16 17:56:59 2016 +0200
----------------------------------------------------------------------
client/enduser/pom.xml | 11 +-
.../enduser/SyncopeEnduserApplication.java | 9 --
.../resources/META-INF/resources/app/index.html | 8 +-
.../resources/META-INF/resources/app/js/app.js | 35 +++---
.../app/js/controllers/LanguageController.js | 9 --
.../app/js/controllers/LoginController.js | 24 ++--
.../angular-translate-loader-static-files.js | 126 +++++++++++++++++++
.../resources/app/languages/de/dynamic.json | 26 ++++
.../resources/app/languages/de/static.json | 42 +++++++
.../resources/app/languages/en/dynamic.json | 24 ++++
.../resources/app/languages/en/static.json | 42 +++++++
.../resources/app/languages/it/dynamic.json | 24 ++++
.../resources/app/languages/it/static.json | 40 ++++++
.../META-INF/resources/app/views/captcha.html | 2 +-
.../app/views/confirmpasswordreset.html | 16 +--
.../app/views/dynamicPlainAttributes.html | 4 +-
.../META-INF/resources/app/views/editUser.html | 25 +---
.../META-INF/resources/app/views/home.html | 4 +-
.../resources/app/views/mustchangepassword.html | 20 +--
.../resources/app/views/navigationButtons.html | 4 +-
.../resources/app/views/passwordreset.html | 12 +-
.../resources/app/views/requiredMessage.html | 2 +-
.../META-INF/resources/app/views/self.html | 65 ++--------
.../resources/app/views/user-credentials.html | 22 ++--
.../app/views/user-derived-schemas.html | 2 +-
.../resources/app/views/user-form-finish.html | 2 +-
.../resources/app/views/user-groups.html | 8 +-
.../resources/app/views/user-plain-schemas.html | 2 +-
.../resources/app/views/user-resources.html | 2 +-
.../app/views/user-virtual-schemas.html | 2 +-
deb/enduser/LICENSE | 6 +-
deb/enduser/NOTICE | 5 +
pom.xml | 13 ++
standalone/LICENSE | 5 +
standalone/NOTICE | 5 +
35 files changed, 462 insertions(+), 186 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/pom.xml
----------------------------------------------------------------------
diff --git a/client/enduser/pom.xml b/client/enduser/pom.xml
index 2195248..ea73ac9 100644
--- a/client/enduser/pom.xml
+++ b/client/enduser/pom.xml
@@ -32,18 +32,15 @@ under the License.
<groupId>org.apache.syncope.client</groupId>
<artifactId>syncope-client-enduser</artifactId>
<packaging>jar</packaging>
-
<properties>
<rootpom.basedir>${basedir}/../..</rootpom.basedir>
</properties>
-
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
-
<dependency>
<groupId>org.apache.wicket</groupId>
<artifactId>wicket</artifactId>
@@ -89,6 +86,14 @@ under the License.
</dependency>
<dependency>
<groupId>org.webjars.bower</groupId>
+ <artifactId>angular-translate</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.webjars.bower</groupId>
+ <artifactId>angular-translate-loader-partial</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.webjars.bower</groupId>
<artifactId>ng-password-strength</artifactId>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserApplication.java
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserApplication.java b/client/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserApplication.java
index 4383f95..71de4db 100644
--- a/client/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserApplication.java
+++ b/client/enduser/src/main/java/org/apache/syncope/client/enduser/SyncopeEnduserApplication.java
@@ -22,10 +22,6 @@ import org.apache.syncope.client.enduser.resources.UserSelfIsLogged;
import java.io.File;
import java.io.Serializable;
import org.apache.syncope.client.enduser.pages.HomePage;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
import java.util.Properties;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.BooleanUtils;
@@ -62,11 +58,6 @@ public class SyncopeEnduserApplication extends WebApplication implements Seriali
private static final String ENDUSER_PROPERTIES = "enduser.properties";
- public static final List<Locale> SUPPORTED_LOCALES = Collections.unmodifiableList(Arrays.asList(
- new Locale[] {
- Locale.ENGLISH, Locale.ITALIAN, new Locale("pt", "BR")
- }));
-
public static SyncopeEnduserApplication get() {
return (SyncopeEnduserApplication) WebApplication.get();
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/index.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/index.html b/client/enduser/src/main/resources/META-INF/resources/app/index.html
index ebba78a..7f00f85 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/index.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/index.html
@@ -26,9 +26,9 @@ under the License.
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta name="description" content=""/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
-
+
<title>Apache Syncope - EndUser</title>
-
+
<link rel="shortcut icon" href="img/favicon.png" type="image/png"/>
<link href="css/login.css" rel="stylesheet" type="text/css"/>
@@ -54,7 +54,7 @@ under the License.
<![endif]-->
<span id="notifications" kendo-notification="notifications"></span>
-
+
<treasure-overlay-spinner active='spinner.active'>
<div ui-view ng-cloak ng-controller="ApplicationController" ng-init="initApplication()">
</div>
@@ -77,6 +77,8 @@ under the License.
<script type="text/javascript" src="../webjars/bootstrap-select/${bootstrap-select.version}/js/bootstrap-select.min.js"></script>
<script src="../webjars/FileSaver.js/${fileSaver.version}/FileSaver.js"></script>
<script src="../webjars/lodash/${lodash.version}/lodash.min.js"></script>
+ <script src="../webjars/angular-translate/${angular-translate.version}/angular-translate.js"></script>
+ <script src="../webjars/angular-translate-loader-partial/${angular-translate-loader-partial.version}/angular-translate-loader-partial.js"></script>
<!--main angular application-->
<script src="js/app.js"></script>
<!--services-->
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
index 3f356c9..cd2247a 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/app.js
@@ -18,13 +18,11 @@
**/
'use strict';
-
angular.module('home', []);
angular.module('login', []);
angular.module('language', []);
angular.module('self', []);
angular.module('info', []);
-
// Declare app level module which depends on views, and components
var app = angular.module('SyncopeEnduserApp', [
'ui.router',
@@ -41,11 +39,21 @@ var app = angular.module('SyncopeEnduserApp', [
'login',
'language',
'self',
- 'info'
+ 'info',
+ 'pascalprecht.translate'
]);
-app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider',
- function ($stateProvider, $urlRouterProvider, $httpProvider) {
+app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', '$translateProvider', '$translatePartialLoaderProvider',
+ function ($stateProvider, $urlRouterProvider, $httpProvider, $translateProvider, $translatePartialLoaderProvider) {
+
+ // translate provider configuration
+ $translatePartialLoaderProvider.addPart('static')
+ .addPart('dynamic');
+ $translateProvider.useLoader('$translatePartialLoader', {
+ urlTemplate: 'languages/{lang}/{part}.json'
+ })
+ .preferredLanguage('en');
+
// route configuration
$stateProvider
.state('home', {
@@ -63,7 +71,7 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider',
resolve: {
'authenticated': ['AuthService',
function (AuthService) {
- return AuthService.islogged()
+ return AuthService.islogged();
}]
}
})
@@ -197,19 +205,15 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider',
url: '/mustchangepassword',
templateUrl: 'views/mustchangepassword.html'
});
-
// catch all other routes
// send users to the home page
$urlRouterProvider.otherwise('/');
-
// HTTP service configuration
$httpProvider.defaults.withCredentials = true;
$httpProvider.defaults.xsrfCookieName = 'XSRF-TOKEN';
$httpProvider.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';
-
//SYNCOPE-780
$httpProvider.defaults.headers.common["If-Modified-Since"] = "0";
-
$httpProvider.interceptors.push(function ($q, $rootScope, $location) {
return {
'request': function (config, a, b) {
@@ -219,7 +223,6 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider',
var separator = config.url.indexOf('?') === -1 ? '?' : '&';
config.url = config.url + separator + 'noCache=' + new Date().getTime();
}
-
$rootScope.spinner.on();
return config || $q.when(config);
},
@@ -246,9 +249,7 @@ app.config(['$stateProvider', '$urlRouterProvider', '$httpProvider',
}
};
});
-
}]);
-
app.run(['$rootScope', '$location', '$cookies', '$state', 'AuthService',
function ($rootScope, $location, $cookies, $state, AuthService) {
// main program
@@ -259,14 +260,11 @@ app.run(['$rootScope', '$location', '$cookies', '$state', 'AuthService',
$location.path('/self');
}
});
-
$rootScope.$on('$stateChangeSuccess', function (event, toState) {
if (toState.name === 'create') {
$state.go('create.credentials');
-
} else if (toState.name === 'update') {
$state.go('update.credentials');
-
} else if (toState.name.indexOf("update") > -1) {
AuthService.islogged().then(function (response) {
if (response === "true") {
@@ -279,7 +277,6 @@ app.run(['$rootScope', '$location', '$cookies', '$state', 'AuthService',
$state.go('self');
}
);
-
} else if (toState.name === 'home' || toState.name === 'self') {
AuthService.islogged().then(function (response) {
if (response === "true") {
@@ -296,7 +293,6 @@ app.run(['$rootScope', '$location', '$cookies', '$state', 'AuthService',
$state.go(toState);
}
});
-
$rootScope.spinner = {
active: false,
on: function () {
@@ -307,7 +303,6 @@ app.run(['$rootScope', '$location', '$cookies', '$state', 'AuthService',
}
};
}]);
-
app.controller('ApplicationController', ['$scope', '$rootScope', 'InfoService', function ($scope, $rootScope,
InfoService) {
// get syncope info and set cookie, first call
@@ -331,7 +326,6 @@ app.controller('ApplicationController', ['$scope', '$rootScope', 'InfoService',
function (response) {
console.error("Something went wrong while accessing info resource", response);
});
-
$rootScope.isSelfRegAllowed = function () {
return $rootScope.selfRegAllowed === true;
};
@@ -341,7 +335,6 @@ app.controller('ApplicationController', ['$scope', '$rootScope', 'InfoService',
$rootScope.getVersion = function () {
return $rootScope.version;
};
-
//Notification management
$scope.notification = $('#notifications').kendoNotification().data("kendoNotification");
$scope.notification.setOptions({stacking: "down"});
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LanguageController.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LanguageController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LanguageController.js
index 621b5d0..14e3acc 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LanguageController.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LanguageController.js
@@ -22,15 +22,6 @@
angular.module('language')
.controller('LanguageController', function ($scope) {
- $scope.languages = {
- availableLanguages: [
- {id: '1', name: 'Italiano'},
- {id: '2', name: 'English'},
- {id: '3', name: 'Portugese'}
- ],
- selectedLanguage: {id: '2', name: 'English'}
- };
-
$scope.init = function () {
// MainService.settings().then(function (response) {
// $scope.mainSettings = response;
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LoginController.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LoginController.js b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LoginController.js
index a5418d8..41228c2 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LoginController.js
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/controllers/LoginController.js
@@ -18,16 +18,23 @@
*/
'use strict';
-
angular.module("login").controller("LoginController", ['$scope', '$rootScope', '$http', '$location', '$cookies',
- 'AuthService', function ($scope, $rootScope, $http, $location, $cookies, AuthService) {
+ 'AuthService', '$translate', '$translatePartialLoader', function ($scope, $rootScope, $http,
+ $location, $cookies, AuthService, $translate) {
$scope.credentials = {
username: '',
password: '',
errorMessage: ''
};
-
+ $scope.languages = {
+ availableLanguages: [
+ {id: '1', name: 'Italiano', code: 'it'},
+ {id: '2', name: 'English', code: 'en'},
+ {id: '3', name: 'Deutsch', code: 'de'}
+ ],
+ selectedLanguage: {id: '2', name: 'English', code: 'en'}
+ };
$scope.login = function (credentials) {
AuthService.login($scope.credentials).then(function (user) {
@@ -48,7 +55,6 @@ angular.module("login").controller("LoginController", ['$scope', '$rootScope', '
$scope.showError($scope.credentials.errorMessage, $scope.notification);
});
};
-
$scope.logout = function () {
AuthService.logout().then(function (response) {
console.info("Logout successfully");
@@ -56,7 +62,6 @@ angular.module("login").controller("LoginController", ['$scope', '$rootScope', '
console.info("Logout failed: ", response);
});
};
-
$scope.islogged = function () {
AuthService.islogged().then(function (response) {
console.debug("user login status detected", response);
@@ -65,30 +70,29 @@ angular.module("login").controller("LoginController", ['$scope', '$rootScope', '
console.error("error retrieving user login status", response);
});
};
-
$scope.selfCreate = function () {
$location.path("/self/create");
};
-
$scope.passwordReset = function () {
$location.path("/passwordreset");
};
-
$scope.errorAPI = function () {
$http.get("/syncope-enduser/api/error").success(function (data) {
console.debug("errorAPI response: ", data);
});
};
-
$scope.sampleAPI = function () {
$http.get("/syncope-enduser/api/user-self").success(function (data) {
console.debug("sampleAPI response: ", data);
});
};
-
$scope.schemaAPI = function () {
$http.get("/syncope-enduser/api/schema").success(function (data) {
console.debug("schemaAPI response: ", data);
});
};
+ $scope.switchLanguage = function () {
+ console.log('$scope.languages.selectedLanguage', $scope.languages.selectedLanguage.code);
+ $translate.use($scope.languages.selectedLanguage.code);
+ };
}]);
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/js/lib/angular-translate-loader-static-files.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/js/lib/angular-translate-loader-static-files.js b/client/enduser/src/main/resources/META-INF/resources/app/js/lib/angular-translate-loader-static-files.js
new file mode 100644
index 0000000..8b22fb7
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/js/lib/angular-translate-loader-static-files.js
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/*!
+ * angular-translate - v2.11.0 - 2016-03-20
+ *
+ * Copyright (c) 2016 The angular-translate team, Pascal Precht; Licensed MIT
+ */
+(function (root, factory) {
+ if (typeof define === 'function' && define.amd) {
+ // AMD. Register as an anonymous module unless amdModuleId is set
+ define([], function () {
+ return (factory());
+ });
+ } else if (typeof exports === 'object') {
+ // Node. Does not work with strict CommonJS, but
+ // only CommonJS-like environments that support module.exports,
+ // like Node.
+ module.exports = factory();
+ } else {
+ factory();
+ }
+}(this, function () {
+
+$translateStaticFilesLoader.$inject = ['$q', '$http'];
+angular.module('pascalprecht.translate')
+/**
+ * @ngdoc object
+ * @name pascalprecht.translate.$translateStaticFilesLoader
+ * @requires $q
+ * @requires $http
+ *
+ * @description
+ * Creates a loading function for a typical static file url pattern:
+ * "lang-en_US.json", "lang-de_DE.json", etc. Using this builder,
+ * the response of these urls must be an object of key-value pairs.
+ *
+ * @param {object} options Options object, which gets prefix, suffix and key.
+ */
+.factory('$translateStaticFilesLoader', $translateStaticFilesLoader);
+
+function $translateStaticFilesLoader($q, $http) {
+
+ 'use strict';
+
+ return function (options) {
+
+ if (!options || (!angular.isArray(options.files) && (!angular.isString(options.prefix) || !angular.isString(options.suffix)))) {
+ throw new Error('Couldn\'t load static files, no files and prefix or suffix specified!');
+ }
+
+ if (!options.files) {
+ options.files = [{
+ prefix: options.prefix,
+ suffix: options.suffix
+ }];
+ }
+
+ var load = function (file) {
+ if (!file || (!angular.isString(file.prefix) || !angular.isString(file.suffix))) {
+ throw new Error('Couldn\'t load static file, no prefix or suffix specified!');
+ }
+
+ return $http(angular.extend({
+ url: [
+ file.prefix,
+ options.key,
+ file.suffix
+ ].join(''),
+ method: 'GET',
+ params: ''
+ }, options.$http))
+ .then(function(result) {
+ return result.data;
+ }, function () {
+ return $q.reject(options.key);
+ });
+ };
+
+ var promises = [],
+ length = options.files.length;
+
+ for (var i = 0; i < length; i++) {
+ promises.push(load({
+ prefix: options.files[i].prefix,
+ key: options.key,
+ suffix: options.files[i].suffix
+ }));
+ }
+
+ return $q.all(promises)
+ .then(function (data) {
+ var length = data.length,
+ mergedData = {};
+
+ for (var i = 0; i < length; i++) {
+ for (var key in data[i]) {
+ mergedData[key] = data[i][key];
+ }
+ }
+
+ return mergedData;
+ });
+ };
+}
+
+$translateStaticFilesLoader.displayName = '$translateStaticFilesLoader';
+return 'pascalprecht.translate';
+
+}));
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/de/dynamic.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/de/dynamic.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/de/dynamic.json
new file mode 100644
index 0000000..452a4e3
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/de/dynamic.json
@@ -0,0 +1,26 @@
+{
+ "credentials": "Referenzen",
+ "groups": "Gruppen",
+ "plainSchemas": "PlainSchemas",
+ "derivedSchemas": "DerivedSchemas",
+ "virtualSchemas": "VirtualSchemas",
+ "resources": "Ressourcen",
+ "finish": "Finish",
+ "fullname": "vollst�ndiger Name",
+ "userId": "benutzer Id",
+ "loginDate": "login Datum",
+ "firstname": "name",
+ "surname": "familien-oder nachname",
+ "ctype": "ctype",
+ "email": "email",
+ "activationDate": "aktivierungsdatum ",
+ "uselessReadonly": "uselessReadonly",
+ "cool": "cool",
+ "gender": "geschlecht",
+ "aLong": "aLong",
+ "makeItDouble": "makeItDouble",
+ "obscure": "obscure",
+ "photo": "foto",
+ "GROUPS": "Gruppen",
+ "AUXILIARY CLASSES": "Hilfsklassen"
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/de/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/de/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/de/static.json
new file mode 100644
index 0000000..4adba5b
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/de/static.json
@@ -0,0 +1,42 @@
+{
+ "USER": "Benutzer",
+ "CHOSENLANGUAGE": "Gew�hlte sprache",
+ "CAPTCHA": "Bitte geben sie den code im bild angezeigt.",
+ "CONFIRM_PASSWORD_RESET": "Best�tigen Sie Passwort-Reset",
+ "PASSWORD_RESET": "Passwort reset",
+ "NOTSECURE": "Nicht sicher!",
+ "ALMOSTSECURE": "Sicher, aber man k�nnte es besser machen",
+ "SUBMIT": "Einreichen",
+ "CANCEL": "Stornieren",
+ "PASSWORD_CHANGE_REQUIRED": "Passwort�nderung erforderlich",
+ "PASSWORD_CHANGE": "Passwort�nderung",
+ "CONFIRM_PASSWORD": "Best�tige das Passwort",
+ "VERYGOOD": "Sehr gut!",
+ "PASSWORD_STRENGTH": "Passwort-Sicherheit",
+ "NEXT": "N�chster",
+ "PREVIOUS": "Fr�her",
+ "USERDETAILS": "Nutzerdetails",
+ "SECURITYQUESTION": "Sicherheitsfrage",
+ "SELECTSECURITYQUESTION": "W�hlen Sie die Sicherheitsfrage",
+ "SECURITYANSWER": "Sicherheitsantwort",
+ "ISREQUIRED": "Wird ben�tigt",
+ "SELFREGISTRATION": "Selbstregistrierung",
+ "PASSWORDRESET": "Passwort zur�cksetzen",
+ "USERNAME": "Benutzername",
+ "PASSWORD": "Passwort",
+ "LOGIN": "Anmeldung",
+ "LANGUAGES": "Sprachen",
+ "ENGLISH": "Englisch",
+ "ITALIAN": "Italienisch",
+ "GERMAN": "Deutsch",
+ "GROUPS": "Gruppen",
+ "AUXILIARY CLASSES": "Hilfsklassen",
+ "CREDENZIALI": "Referenzen",
+ "PLAINSCHEMAS": "PlainSchemas",
+ "DERIVEDSCHEMAS": "Abgeleitet schemen",
+ "VIRTUALSCHEMAS": "Virtuelle Schemen",
+ "RESOURCES": "Ressourcen",
+ "REALM": "Realm",
+ "NEWUSER": "Neuer benutzer"
+}
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/dynamic.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/dynamic.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/dynamic.json
new file mode 100644
index 0000000..2a68559
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/dynamic.json
@@ -0,0 +1,24 @@
+{
+ "credentials": "Credentials",
+ "groups": "Groups",
+ "plainSchemas": "PlainSchemas",
+ "derivedSchemas": "DerivedSchemas",
+ "virtualSchemas": "VirtualSchemas",
+ "resources": "Resources",
+ "finish": "Finish",
+ "fullname": "fullname",
+ "userId": "userId",
+ "loginDate": "loginDate",
+ "firstname": "firstname",
+ "surname": "surname",
+ "ctype": "ctype",
+ "email": "email",
+ "activationDate": "activationDate",
+ "uselessReadonly": "uselessReadonly",
+ "cool": "cool",
+ "gender": "gender",
+ "aLong": "aLong",
+ "makeItDouble": "makeItDouble",
+ "obscure": "obscure",
+ "photo": "photo"
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
new file mode 100644
index 0000000..44d7abd
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/en/static.json
@@ -0,0 +1,42 @@
+{
+ "USER": "User",
+ "CHOSENLANGUAGE": "Chosen language",
+ "CAPTCHA": "Please enter the code displayed within the image.",
+ "CONFIRM_PASSWORD_RESET": "Confirm password reset",
+ "PASSWORD_RESET": "Password reset",
+ "NOTSECURE": "Not secure!",
+ "ALMOSTSECURE": "Secure, but you could do better",
+ "SUBMIT": "Submit",
+ "CANCEL": "Cancel",
+ "PASSWORD_CHANGE_REQUIRED": "Password change required",
+ "PASSWORD_CHANGE": "Password change",
+ "CONFIRM_PASSWORD": "Confirm Password",
+ "VERYGOOD": "Very Good!",
+ "PASSWORD_STRENGTH": "Password strength",
+ "NEXT": "Next",
+ "PREVIOUS": "Previous",
+ "USERDETAILS": "User Details",
+ "SECURITYQUESTION": "Security question",
+ "SELECTSECURITYQUESTION": "Select security question",
+ "SECURITYANSWER": "Security answer",
+ "ISREQUIRED": "is required",
+ "SELFREGISTRATION": "Self registration",
+ "PASSWORDRESET": "Password Reset",
+ "USERNAME": "Username",
+ "PASSWORD": "Password",
+ "LOGIN": "Login",
+ "LANGUAGES": "Languages",
+ "ENGLISH": "English",
+ "ITALIAN": "Italian",
+ "GERMAN": "German",
+ "GROUPS": "Groups",
+ "AUXILIARY CLASSES": "Auxiliary classes",
+ "CREDENZIALI": "Credentials",
+ "PLAINSCHEMAS": "PlainSchemas",
+ "DERIVEDSCHEMAS": "DerivedSchemas",
+ "VIRTUALSCHEMAS": "VirtualSchemas",
+ "RESOURCES": "Resources",
+ "REALM": "Realm",
+ "NEWUSER": "New User"
+}
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/dynamic.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/dynamic.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/dynamic.json
new file mode 100644
index 0000000..252c611
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/dynamic.json
@@ -0,0 +1,24 @@
+{
+ "credentials": "Credenziali",
+ "groups": "Gruppi",
+ "plainSchemas": "PlainSchemas",
+ "derivedSchemas": "DerivedSchemas",
+ "virtualSchemas": "VirtualSchemas",
+ "resources": "Risorse",
+ "finish": "Fine",
+ "fullname": "nome completo",
+ "userId": "Id utente",
+ "loginDate": "data di login",
+ "firstname": "nome",
+ "surname": "cognome",
+ "ctype": "ctype",
+ "email": "email",
+ "activationDate": "data di attivazione",
+ "uselessReadonly": "uselessReadonly",
+ "cool": "cool",
+ "gender": "genere",
+ "aLong": "aLong",
+ "makeItDouble": "makeItDouble",
+ "obscure": "obscure",
+ "photo": "foto"
+}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
new file mode 100644
index 0000000..bab13cc
--- /dev/null
+++ b/client/enduser/src/main/resources/META-INF/resources/app/languages/it/static.json
@@ -0,0 +1,40 @@
+{
+ "USER": "Utente",
+ "CHOSENLANGUAGE": "Lingua selezionata",
+ "CAPTCHA": "Inserire il codice mostrato nell'immagine.",
+ "PASSWORD_RESET": "Recupero password",
+ "NOTSECURE": "Insicura!",
+ "ALMOSTSECURE": "Sicura, ma potresti fare di meglio!",
+ "SUBMIT": "Submit",
+ "CANCEL": "Cancella",
+ "PASSWORD_CHANGE_REQUIRED": "Richiesta di cambio password",
+ "PASSWORD_CHANGE": "Cambio Password",
+ "CONFIRM_PASSWORD": "Conferma Password",
+ "PASSWORD_STRENGTH": "Sicurezza della password",
+ "VERYGOOD": "Molto bene!",
+ "NEXT": "Successivo",
+ "PREVIOUS": "Precedente",
+ "USERDETAILS": "Dettagli Utente",
+ "SECURITYQUESTION": "Domanda di sicurezza",
+ "SELECTSECURITYQUESTION": "Domanda di sicurezza",
+ "SECURITYANSWER": "Risposta di sicurezza",
+ "ISREQUIRED": "e' richiesto",
+ "SELFREGISTRATION": "Registrazione",
+ "PASSWORDRESET": "Password Reset",
+ "USERNAME": "Nome Utente",
+ "PASSWORD": "Password",
+ "LOGIN": "Login",
+ "LANGUAGES": "Linguaggi",
+ "ENGLISH": "Inglese",
+ "ITALIAN": "Italiano",
+ "GERMAN": "Tedesco",
+ "GROUPS": "Gruppi",
+ "AUXILIARY CLASSES": "Classi Ausiliari",
+ "CREDENZIALI": "CredentialI",
+ "PLAINSCHEMAS": "PlainSchemas",
+ "DERIVEDSCHEMAS": "DerivedSchemas",
+ "VIRTUALSCHEMAS": "VirtualSchemas",
+ "RESOURCES": "Risorse",
+ "NEWUSER": "Nuovo utente",
+ "REALM": "Realm"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/captcha.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/captcha.html b/client/enduser/src/main/resources/META-INF/resources/app/views/captcha.html
index f125452..c277800 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/captcha.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/captcha.html
@@ -30,7 +30,7 @@ under the License.
<input class="form-control" style="margin:auto; max-width: 260px" type="text" ng-model="input.value"/>
</div>
<div>
- <span class="help-block">Please enter the code displayed within the image.</span>
+ <span class="help-block">{{'CAPTCHA' | translate}}</span>
</div>
</div>
</nav>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/confirmpasswordreset.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/confirmpasswordreset.html b/client/enduser/src/main/resources/META-INF/resources/app/views/confirmpasswordreset.html
index 432404b..70a94a9 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/confirmpasswordreset.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/confirmpasswordreset.html
@@ -23,7 +23,7 @@ under the License.
<div>
<div class="page-header" style="text-align: left; font-weight: 700;">
- <span>Confirm password reset</span>
+ <span>{{'CONFIRM_PASSWORD_RESET'| translate}}</span>
</div>
<div class="breadcrumb-header text-center">
@@ -44,7 +44,7 @@ under the License.
</div>
<div id="attribute" class="form-group">
- <label for="confirmPassword">Confirm Password</label>
+ <label for="confirmPassword">{{'CONFIRM_PASSWORD'| translate}}</label>
<input name="password" type="password" class="form-control" equals="user.password" ng-model="confirmPassword.value"
placeholder="confirm password" validate="true">
<validation-message name="password"/>
@@ -52,18 +52,18 @@ under the License.
<div id="attribute" class="form-group">
<div class="suggestions">
- Password Strength:
- <span ng-if="passStrength < 50">Not secure!</span>
- <span ng-if="passStrength >= 50 && passStrength <= 82">Secure, but you could do better!</span>
- <span ng-if="passStrength > 82">Very Good!</span>
+ {{'PASSWORD_STRENGTH'| translate}}:
+ <span ng-if="passStrength < 50">{{'INSECURE' | translate}}</span>
+ <span ng-if="passStrength >= 50 && passStrength <= 82">{{'ALMOSTSECURE'| translate}}</span>
+ <span ng-if="passStrength > 82">{{'VERYGOOD'| translate}}</span>
</div>
<div ng-password-strength="user.password" strength="passStrength" inner-class="progress-bar" inner-class-prefix="progress-bar-">
</div>
</div>
<div id="attribute" class="form-group row">
- <button id="resetpassword" type="submit" class="btn btn-default pull-right">Submit</button>
+ <button id="resetpassword" type="submit" class="btn btn-default pull-right">{{'SUBMIT'| translate}}</button>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger">{{'CANCEL'| translate}}</a>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttributes.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttributes.html b/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttributes.html
index 6ca8c0e..b203fb1 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttributes.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/dynamicPlainAttributes.html
@@ -17,10 +17,10 @@ specific language governing permissions and limitations
under the License.
-->
<div id="attribute" class="form-group" ng-repeat="plainSchema in dynamicForm.plainSchemas">
- <label for="plainSchema.key">{{plainSchema.key}} <span ng-if="plainSchema.mandatoryCondition === 'true'">*</span></label>
+ <label for="plainSchema.key">{{plainSchema.key | translate}} <span ng-if="plainSchema.mandatoryCondition === 'true'">*</span></label>
<div ng-if="!plainSchema.multivalue">
<dynamic-plain-attribute schema="plainSchema" user="user" index="0"></dynamic-plain-attribute>
- <validation-message name="{{plainSchema.key}}"/>
+ <validation-message name="{{plainSchema.key | translate}}"/>
</div>
<div ng-if="plainSchema.multivalue">
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html b/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
index 1f971ec..41c05fb 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
@@ -18,16 +18,13 @@ under the License.
-->
<div ng-cloak class="container">
<div class="login-container" ng-controller="UserController" ng-init="initUser();" style="box-sizing: border-box; ">
-
<div id="form-container" class="col-md-6 col-md-offset-3" style="box-sizing: border-box; background-color: #F7F7F7;">
-
<div>
<div class="page-header" style="text-align: left; font-weight: 700;">
- <span ng-show="createMode">New User</span>
- <span ng-show="!createMode">User {{user.username}}</span>
+ <span ng-show="createMode">{{'NEWUSER'| translate}}</span>
+ <span ng-show="!createMode">{{'USER'| translate}} {{user.username}}</span>
</div>
<div class="breadcrumb-header text-center">
-
<!-- the links to our nested states using relative paths -->
<!-- add the active class if the state matches our ui-sref -->
<!--<div id="status-buttons" class="text-center">-->
@@ -38,29 +35,13 @@ under the License.
<a class="btn btn-default" ng-show="!createMode" ng-click="logout()"><i class="glyphicon glyphicon-off"style="color:red"></i></a>
<!--add class breadcrumb-disabled-link to buttons to prevent click-->
<a ng-repeat="(key, value) in wizard" ui-sref-active="active" ui-sref=".{{key}}" class="btn btn-default"
- ng-class="createMode ? 'disable-link' : ''">{{key}}</a>
+ ng-class="createMode ? 'disable-link' : ''">{{key | translate}}</a>
</div>
</div>
</div>
<form class="signup-form" name="userForm" ng-submit="saveUser(user)" novalidate>
-
<div id="form-views" ui-view>
-
- <!-- <div class="form-group row">
- <div class="col-xs-6 col-xs-offset-3">
- <a id="next" ui-sref="create.credentials" class="btn btn-block btn-signin">
- Start <span class="glyphicon glyphicon-circle-arrow-right"></span>
- </a>
- <a id="cancel" href="#/self" class="btn btn-link">Cancel</a>
- </div>
- </div>-->
-
</div>
- <!-- <div class="form-actions">
- <button type="submit" ng-disabled="form.$invalid || vm.dataLoading" class="btn btn-primary" ng-click="saveUser()">Register</button>
- <img ng-if="vm.dataLoading" src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
- <a href="#/self" class="btn btn-link">Cancel</a>
- </div>-->
</form>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/home.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/home.html b/client/enduser/src/main/resources/META-INF/resources/app/views/home.html
index b338613..1147a29 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/home.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/home.html
@@ -23,8 +23,8 @@ under the License.
<p>{{subtitle}}</p>
<p>{{name}}</p>
- <button type="button" ng-click="">Password Reset</button>
- <button type="button" ng-click="">Self Registration</button>
+ <button type="button" ng-click="">{{'PASSWORD_RESET' | translate}}</button>
+ <button type="button" ng-click="">{{'SELF_REGISTRATION' | translate}}</button>
<button type="button" ng-click="">Self Update</button>
<button type="button" ng-click="sampleAPI()">Sample</button>
<button type="button" ng-click="errorAPI()">Error</button>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/mustchangepassword.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/mustchangepassword.html b/client/enduser/src/main/resources/META-INF/resources/app/views/mustchangepassword.html
index a06966c..083f988 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/mustchangepassword.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/mustchangepassword.html
@@ -23,7 +23,7 @@ under the License.
<div>
<div class="page-header" style="text-align: left; font-weight: 700;">
- <span>Password change required</span>
+ <span>{{'PASSWORD_CHANGE_REQUIRED'| translate}}</span>
</div>
<div class="breadcrumb-header text-center">
@@ -31,7 +31,7 @@ under the License.
<div id="status-buttons" class="btn-group btn-breadcrumb">
<a class="btn btn-default" ng-click="logout()"><i class="glyphicon glyphicon-off"style="color:red"></i></a>
<!--add class breadcrumb-disabled-link to buttons to prevent click-->
- <a ui-sref-active="active" class="btn btn-default">Password change</a>
+ <a ui-sref-active="active" class="btn btn-default">{{'PASSWORD_CHANGE'| translate}}</a>
</div>
</div>
</div>
@@ -39,12 +39,12 @@ under the License.
<div id="form-views" ui-view>
<div id="attribute" class="form-group">
- <label for="user.password">Password</label>
+ <label for="user.password">{{'PASSWORD'| translate}}</label>
<input type="password" class="form-control" name="password" ng-model="user.password" placeholder="password">
</div>
<div id="attribute" class="form-group">
- <label for="confirmPassword">Confirm Password</label>
+ <label for="confirmPassword">{{'CONFIRM_PASSWORD'| translate}}</label>
<input name="password" type="password" class="form-control" equals="user.password" ng-model="confirmPassword.value"
placeholder="confirm password" validate="true">
<validation-message name="password"/>
@@ -52,18 +52,18 @@ under the License.
<div id="attribute" class="form-group">
<div class="suggestions">
- Password Strength:
- <span ng-if="passStrength < 50">Not secure!</span>
- <span ng-if="passStrength >= 50 && passStrength <= 82">Secure, but you could do better!</span>
- <span ng-if="passStrength > 82">Very Good!</span>
+ {{'PASSWORD_STRENGTH'| translate}}:
+ <span ng-if="passStrength < 50">{{'NOTSECURE'| translate}}</span>
+ <span ng-if="passStrength >= 50 && passStrength <= 82">{{'ALMOSTSECURE'| translate}}</span>
+ <span ng-if="passStrength > 82">{{'VERYGOOD'| translate}}</span>
</div>
<div ng-password-strength="user.password" strength="passStrength" inner-class="progress-bar" inner-class-prefix="progress-bar-">
</div>
</div>
<div id="attribute" class="form-group row">
- <button id="resetpassword" type="submit" class="btn btn-default pull-right">Submit</button>
+ <button id="resetpassword" type="submit" class="btn btn-default pull-right">{{'SUBMIT'| translate}}</button>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger">{{'CANCEL'| translate}}</a>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtons.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtons.html b/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtons.html
index b633640..98b63fa 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtons.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/navigationButtons.html
@@ -18,9 +18,9 @@ under the License.
-->
<div class="pull-right">
<a ng-show="next !== 'none'" id="next" class="btn btn-default" ng-click="validateAndNext($event)">
- Next <span class="glyphicon glyphicon-circle-arrow-right"></span>
+ {{'NEXT' | translate}} <span class="glyphicon glyphicon-circle-arrow-right"></span>
</a>
<a ng-show="previous !== 'none'" id="previous" ng-click="previousTab()" class="btn btn-default">
- <span class="glyphicon glyphicon-circle-arrow-left"></span> Previous
+ <span class="glyphicon glyphicon-circle-arrow-left"></span> {{'PREVIOUS' | translate}}
</a>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/passwordreset.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/passwordreset.html b/client/enduser/src/main/resources/META-INF/resources/app/views/passwordreset.html
index 9728cde..693d3f7 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/passwordreset.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/passwordreset.html
@@ -31,7 +31,7 @@ under the License.
<div id="status-buttons" class="btn-group btn-breadcrumb">
<a href="#/self" class="btn btn-default"><i class="glyphicon glyphicon-home"></i></a>
<!--add class breadcrumb-disabled-link to buttons to prevent click-->
- <a ui-sref-active="active" class="btn btn-default">User Details</a>
+ <a ui-sref-active="active" class="btn btn-default">{{'USERDETAILS'| translate}}</a>
</div>
</div>
</div>
@@ -39,20 +39,20 @@ under the License.
<div id="form-views" ui-view>
<div id="attribute" class="form-group">
- <label for="user.username">User</label>
+ <label for="user.username">{{'USER'| translate}}</label>
<input name="username" type="text" class="form-control" ng-model="user.username" required
placeholder="Username" ng-blur="retrieveSecurityQuestion(user)">
<p ng-show="(userForm.username.$error.required && !userForm.username.$pristine)"
class="text-validation-error">Username is required</p>
</div>
<div id="attribute" class="form-group" ng-show="$root.pwdResetRequiringSecurityQuestions">
- <label for="user.securityquestion">Security Question</label>
+ <label for="user.securityquestion">{{'SECURITYQUESTION'| translate}}</label>
<div class="suggestions">(Not Loading? <a href ng-click="retrieveSecurityQuestion(user)">Reload</a>)</div>
<input name="securityquestion" type="text" class="form-control" ng-model="userSecurityQuestion"
disabled="disabled">
</div>
<div id="attribute" class="form-group" ng-show="$root.pwdResetRequiringSecurityQuestions">
- <label for="user.securityanswer">Security Answer</label>
+ <label for="user.securityanswer">{{'SECURITYANSWER'| translate}}</label>
<input name="securityanswer" type="text" class="form-control" ng-model="user.securityanswer"
placeholder="Security Answer" >
</div>
@@ -61,9 +61,9 @@ under the License.
<div class="form-group row">
<captcha input="captchaInput" enabled="captchaEnabled"></captcha>
</div>
- <button id="resetpassword" type="submit" class="btn btn-default pull-right">Submit</button>
+ <button id="resetpassword" type="submit" class="btn btn-default pull-right">{{'SUBMIT'| translate}}</button>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger">{{'CANCEL'| translate}}</a>
</div>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/requiredMessage.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/requiredMessage.html b/client/enduser/src/main/resources/META-INF/resources/app/views/requiredMessage.html
index 191afdf..341dc9a 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/requiredMessage.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/requiredMessage.html
@@ -18,5 +18,5 @@ specific language governing permissions and limitations
under the License.
-->
<div ng-switch-when="required">
-{{fieldName}} is required
+{{fieldName}} {{'ISREQUIRED'| translate}}
</div>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/self.html b/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
index 482fedd..e48d10b 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
@@ -21,95 +21,48 @@ under the License.
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<meta charset="UTF-8"/>
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'/>
-
<title>Apache Syncope Enduser - Login</title>
</head>
-
<body>
-
<div ng-cloak class="container">
-
- <div id="login-container" ng-controller="LoginController" style="box-sizing: border-box; ">
-
- <!-- <div id="logo">
- <a href="/">
- <img class="login-logo" src="img/logo-green.png" />
- </a>
- </div>-->
+ <div id="login-container" ng-controller="LoginController" ng-init="init" style="box-sizing: border-box; ">
<div id="login" class="card card-container">
<div>
- <!--<div id="language" class="form-group" ng-controller="LanguageController" ng-init="init()">
- <div id="languageContainer" class="col-xs-2">
-
- <select class="form-control" ng-options="language.name for language in languages.availableLanguages track by language.id"
- ng-model="languages.selectedLanguage" ></select>
-
- </div>
- </div>-->
-
<img class="login-logo" src="img/logo-green.png" />
-
<div id="login-form" class="form">
</div>
-
<form id="login-form" class="form form-signin" novalidate>
-
<fieldset class="form-group input-group">
-
<div class="form-group">
<input autofocus="autofocus" type="text" class="form-control" id="login-username" placeholder="Username"
ng-required ng-model="credentials.username" placeholder="username">
</div>
-
<div class="form-group">
<input type="password" class="form-control" id="login-password" placeholder="Password"
ng-required ng-model="credentials.password" placeholder="password">
</div>
-
<div class="form-group">
-
+ <select ng-change="switchLanguage()" id="language" style="width: 100%" class="btn dropdown-toggle btn-default"
+ ng-options="language.name for language in languages.availableLanguages track by language.id"
+ ng-model="languages.selectedLanguage"></select>
+ </div>
+ <div class="form-group">
<button type="submit" id="login-btn" class="btn btn-default btn-signin login-btn"
ng-click="login(credentials)">Login</button>
</div>
</fieldset>
</form>
-
</div>
-
</div>
<div class="text-center" ng-show="$root.isSelfRegAllowed()">
- <a href="javascript:void(0);" class="btn btn-link" ng-click="selfCreate()">Self Registration</a>
-
- <!-- <div id="initialLoaderDiv">
- <img src="img/busy.gif" class="ajax-loader"/>
- </div>-->
+ <a href="javascript:void(0);" class="btn btn-link" ng-click="selfCreate()">
+ {{ 'SELFREGISTRATION' | translate}}
+ </a>
</div>
<div class="text-center" ng-show="$root.isPwdResetAllowed()">
<a href="javascript:void(0);" class="btn btn-link" ng-click="passwordReset()">Password Reset</a>
</div>
- <!-- /#login-container -->
</div> <!-- /#login -->
</div>
- <!-- <div class="container" ng-cloak ng-controller="LoginController">
- <div class="card card-container">
- <img class="login-logo" src="img/logo-green.png" />
-
- <div growl></div>
-
- <form class="form-signin" novalidate ng-show="!isLogged()">
- <input type="text" id="username" class="form-control" ng-required autofocus="autofocus" ng-model="credentials.username" />
- <input type="password" id="password" class="form-control" required="required" ng-model="credentials.password" />
-
- <select id="language" style="width: 100%"
- ng-options="language.name for language in languages.availableLanguages track by language.id"
- ng-model="languages.selectedLanguage"></select>
-
- <button type="submit" class="btn btn-lg btn-primary btn-block btn-signin" ng-click="login(credentials)">Login</button>
- </form>
-
-
-
- </div>
- </div>-->
</body>
</html>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html
index a09ab98..f993d4d 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-credentials.html
@@ -17,18 +17,18 @@ specific language governing permissions and limitations
under the License.
-->
<div id="attribute" class="form-group">
- <label for="user.username">Username <span>*</span></label>
+ <label for="user.username">{{'USERNAME' | translate}} <span>*</span></label>
<input name="username" type="text" class="form-control" ng-model="user.username" required placeholder="username" validate="true"/>
<validation-message name="username" template="requiredMessage" />
</div>
<div id="attribute" class="form-group">
- <label for="user.password">Password</label>
+ <label for="user.password">{{"PASSWORD"|translate}}</label>
<input type="password" class="form-control" name="password" ng-model="user.password" placeholder="password">
</div>
<div id="attribute" class="form-group">
- <label for="confirmPassword">Confirm Password</label>
+ <label for="confirmPassword">{{'CONFIRM_PASSWORD'| translate}}</label>
<input name="password" type="password" class="form-control" equals="user.password" ng-model="confirmPassword.value"
placeholder="confirm password" validate="true">
<validation-message name="password"/>
@@ -36,26 +36,26 @@ under the License.
<div id="attribute" class="form-group">
<div class="suggestions">
- Password Strength:
- <span ng-if="passStrength < 50">Not secure!</span>
- <span ng-if="passStrength >= 50 && passStrength <= 82">Secure, but you could do better!</span>
- <span ng-if="passStrength > 82">Very Good!</span>
+ {{'PASSWORD_STRENGTH' | translate}}:
+ <span ng-if="passStrength < 50">{{'NOTSECURE' | translate}}</span>
+ <span ng-if="passStrength >= 50 && passStrength <= 82">{{'ALMOSTSECURE' | translate}}</span>
+ <span ng-if="passStrength > 82">{{'VERYGOOD'| translate}}</span>
</div>
<div ng-password-strength="user.password" strength="passStrength" inner-class="progress-bar" inner-class-prefix="progress-bar-">
</div>
</div>
<div id="attribute" class="form-group">
- <label for="securityQuestion">Security Question</label>
+ <label for="securityQuestion">{{'SECURITYQUESTION' | translate}}</label>
<select name="securityQuestion" class="form-control"
ng-model="user.securityQuestion"
ng-options="securityQuestion.key as securityQuestion.content for securityQuestion in availableSecurityQuestions">
- <option value="">Select security question</option>
+ <option value="">{{'SELECTSECURITYQUESTION' | translate}}</option>
</select>
</div>
<div id="attribute" class="form-group">
- <label for="securityAnswer">Security Answer</label>
+ <label for="securityAnswer">{{'SECURITYANSWER' | translate}}</label>
<input ng-disabled="user.securityQuestion === initialSecurityQuestion" name="securityAnswer" type="text" class="form-control"
ng-model="user.securityAnswer"
placeholder="security answer">
@@ -65,6 +65,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="credentials" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base= "update" current="credentials" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">{{'CANCEL' | translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html
index b764352..4f53652 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-derived-schemas.html
@@ -24,6 +24,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="derivedSchemas" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="derivedSchemas" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">{{'CANCEL' | translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html
index 5c6465c..8944ef7 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-form-finish.html
@@ -25,6 +25,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="finish" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="finish" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">{{'CANCEL' | translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html
index 63d6855..7f28dd5 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-groups.html
@@ -17,7 +17,7 @@ specific language governing permissions and limitations
under the License.
-->
<div id="attribute" class="form-group row upper-select">
- <label>Realm</label>
+ <label>{{"REALM"|translate}}</label>
<select class="form-control"
ng-disabled="true"
ng-model="user.realm"
@@ -26,17 +26,17 @@ under the License.
</select>
</div>
<div id="attribute" class="form-group row upper-select">
- <label>Groups</label><br/>
+ <label>{{"GROUPS"|translate}}</label><br/>
<groups form="dynamicForm" user="user"></groups>
</div>
<div id="attribute" class="form-group row upper-select">
- <label>Auxilary Classes</label><br/>
+ <label>{{"AUXILIARY CLASSES"|translate}}</label><br/>
<auxiliary form="dynamicForm" user="user"></auxiliary>
</div>
<div id="attribute" class="form-group row">
<navigation-buttons ng-show="createMode" base="create" current="groups" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="groups" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">{{'CANCEL'| translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html
index ef2fb57..7a9dd88 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-plain-schemas.html
@@ -24,6 +24,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="plainSchemas" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="plainSchemas" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger pull-left" ng-click="logout()">{{'CANCEL' | translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html
index f0eb228..ca45d79 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-resources.html
@@ -23,6 +23,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="resources" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="resources" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">{{'CANCEL'| translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html b/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html
index 6e72ba6..b40c4c2 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/user-virtual-schemas.html
@@ -25,6 +25,6 @@ under the License.
<navigation-buttons ng-show="createMode" base="create" current="virtualSchemas" wizard="{{wizard}}"></navigation-buttons>
<navigation-buttons ng-show="!createMode" base="update" current="virtualSchemas" wizard="{{wizard}}"></navigation-buttons>
<div class="pull-left">
- <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">Cancel</a>
+ <a id="cancel" href="#/self" class="btn btn-danger" ng-click="logout()">{{'CANCEL' | translate}}</a>
</div>
</div>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/deb/enduser/LICENSE
----------------------------------------------------------------------
diff --git a/deb/enduser/LICENSE b/deb/enduser/LICENSE
index e30e921..91decd5 100644
--- a/deb/enduser/LICENSE
+++ b/deb/enduser/LICENSE
@@ -753,6 +753,11 @@ This is licensed under the MIT license, see above.
==
+For Angular Translate (https://angular-translate.github.io/):
+This is licensed under the MIT license, see above.
+
+==
+
For ng-password-strength (https://github.com/subarroca/ng-password-strength):
This is licensed under the MIT license, see above.
@@ -763,7 +768,6 @@ This is licensed under the MIT license, see above.
==
-
For Web Services Description Language for Java (http://wsdl4j.sourceforge.net/):
This is licensed under the CPL:
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/deb/enduser/NOTICE
----------------------------------------------------------------------
diff --git a/deb/enduser/NOTICE b/deb/enduser/NOTICE
index 0b62425..71a2b40 100644
--- a/deb/enduser/NOTICE
+++ b/deb/enduser/NOTICE
@@ -122,6 +122,11 @@ Copyright (c) 2014-2016 Google, Inc. http://angular.io
==
+This product includes software developed by the Angular Translate project.
+Copyright (c) <2014> <pa...@gmail.com>
+
+==
+
This product contains unmodified binary redistributions for H2 database engine,
which is dual licensed and available under a modified version of the MPL 1.1 (Mozilla Public License) or under the
(unmodified) EPL 1.0 (Eclipse Public License).
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 949149d..c47c186 100644
--- a/pom.xml
+++ b/pom.xml
@@ -404,6 +404,8 @@ under the License.
<angular-ui-bootstrap.version>1.3.3</angular-ui-bootstrap.version>
<angular-ui-select.version>0.17.1</angular-ui-select.version>
<angular-treasure-overlay-spinner.version>1.1.0</angular-treasure-overlay-spinner.version>
+ <angular-translate.version>2.11.0</angular-translate.version>
+
<ng-password-strength.version>0.2.1</ng-password-strength.version>
<lodash.version>4.0.0</lodash.version>
<kendo-ui-core.version>2014.2.716</kendo-ui-core.version>
@@ -1177,6 +1179,16 @@ under the License.
</dependency>
<dependency>
<groupId>org.webjars.bower</groupId>
+ <artifactId>angular-translate</artifactId>
+ <version>${angular-translate.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.webjars.bower</groupId>
+ <artifactId>angular-translate-loader-partial</artifactId>
+ <version>${angular-translate.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.webjars.bower</groupId>
<artifactId>ng-password-strength</artifactId>
<version>${ng-password-strength.version}</version>
<exclusions>
@@ -1613,6 +1625,7 @@ under the License.
<exclude>**/deb/control/conffiles</exclude>
<exclude>**/deb/control/control</exclude>
<exclude>**/*.lst</exclude>
+ <exclude>**/*.json</exclude>
</excludes>
</configuration>
<executions>
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/standalone/LICENSE
----------------------------------------------------------------------
diff --git a/standalone/LICENSE b/standalone/LICENSE
index 746fb50..f7a5aa0 100644
--- a/standalone/LICENSE
+++ b/standalone/LICENSE
@@ -1107,6 +1107,11 @@ This is licensed under the MIT license, see above.
==
+For Angular Translate (https://angular-translate.github.io/):
+This is licensed under the MIT license, see above.
+
+==
+
For ng-password-strength (https://github.com/subarroca/ng-password-strength):
This is licensed under the MIT license, see above.
http://git-wip-us.apache.org/repos/asf/syncope/blob/e5eed43a/standalone/NOTICE
----------------------------------------------------------------------
diff --git a/standalone/NOTICE b/standalone/NOTICE
index 5d9afb6..f6b7fd0 100644
--- a/standalone/NOTICE
+++ b/standalone/NOTICE
@@ -240,6 +240,11 @@ Copyright (c) 2014-2016 Google, Inc. http://angular.io
==
+This product includes software developed by the Angular Translate project.
+Copyright (c) <2014> <pa...@gmail.com>
+
+==
+
This product contains unmodified binary redistributions for H2 database engine,
which is dual licensed and available under a modified version of the MPL 1.1 (Mozilla Public License) or under the
(unmodified) EPL 1.0 (Eclipse Public License).