diff --git a/src/js/login.js b/src/js/login.js index d067d00be..9343f8867 100644 --- a/src/js/login.js +++ b/src/js/login.js @@ -3,7 +3,7 @@ /* global angular, $, showdown */ // create main application module -var app = angular.module('Application', []); +var app = angular.module('Application', ['pascalprecht.translate', 'ngCookies']); app.filter('markdown2html', function () { var converter = new showdown.Converter({ @@ -23,7 +23,45 @@ app.config(function ($sceProvider) { $sceProvider.enabled(false); }); -app.controller('LoginController', ['$scope', '$http', function ($scope, $http) { +app.config(['$translateProvider', function ($translateProvider) { + $translateProvider.useStaticFilesLoader({ + prefix: 'translation/', + suffix: '.json' + }); + $translateProvider.useLocalStorage(); + $translateProvider.preferredLanguage('en'); + $translateProvider.fallbackLanguage('en'); +}]); + +// Add shorthand "tr" filter to avoid having ot use "translate" +// This is a copy of the code at https://github.com/angular-translate/angular-translate/blob/master/src/filter/translate.js +// If we find out how to get that function handle somehow dynamically we can use that, otherwise the copy is required +function translateFilterFactory($parse, $translate) { + + 'use strict'; + + var translateFilter = function (translationId, interpolateParams, interpolation, forceLanguage) { + if (!angular.isObject(interpolateParams)) { + var ctx = this || { + '__SCOPE_IS_NOT_AVAILABLE': 'More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f' + }; + interpolateParams = $parse(interpolateParams)(ctx); + } + + return $translate.instant(translationId, interpolateParams, interpolation, forceLanguage); + }; + + if ($translate.statefulFilter()) { + translateFilter.$stateful = true; + } + + return translateFilter; +} +translateFilterFactory.displayName = 'translateFilterFactory'; +app.filter('tr', translateFilterFactory); + + +app.controller('LoginController', ['$scope', '$translate', '$http', function ($scope, $translate, $http) { // Stupid angular location provider either wants html5 location mode or not, do the query parsing on my own var search = decodeURIComponent(window.location.search).slice(1).split('&').map(function (item) { return item.indexOf('=') === -1 ? [item, true] : [item.slice(0, item.indexOf('=')), item.slice(item.indexOf('=')+1)]; }).reduce(function (o, k) { o[k[0]] = k[1]; return o; }, {}); @@ -136,6 +174,8 @@ app.controller('LoginController', ['$scope', '$http', function ($scope, $http) { if (status !== 200) return; + if (data.language) $translate.use(data.language); + if ($scope.mode === 'login') window.document.title = data.cloudronName + ' Login'; $scope.status = data; }).error(function () { diff --git a/src/login.html b/src/login.html index 045a716d3..5399f3ea5 100644 --- a/src/login.html +++ b/src/login.html @@ -14,7 +14,7 @@ - + @@ -33,11 +33,18 @@ + + + + + + + @@ -53,33 +60,33 @@