diff --git a/api/http/handler/file.go b/api/http/handler/file.go index 488a3968e..7fca31088 100644 --- a/api/http/handler/file.go +++ b/api/http/handler/file.go @@ -30,6 +30,7 @@ func NewFileHandler(assetPath string) *FileHandler { "/js": true, "/images": true, "/fonts": true, + "/i18n": true, }, } return h diff --git a/app/app.js b/app/app.js index d7774719f..b6416366d 100644 --- a/app/app.js +++ b/app/app.js @@ -13,6 +13,7 @@ angular.module('portainer', [ 'LocalStorageModule', 'angular-jwt', 'angular-google-analytics', + 'pascalprecht.translate', 'portainer.templates', 'portainer.filters', 'portainer.rest', @@ -64,7 +65,7 @@ angular.module('portainer', [ 'userSettings', 'volume', 'volumes']) - .config(['$stateProvider', '$urlRouterProvider', '$httpProvider', 'localStorageServiceProvider', 'jwtOptionsProvider', 'AnalyticsProvider', '$uibTooltipProvider', '$compileProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, AnalyticsProvider, $uibTooltipProvider, $compileProvider) { + .config(['$stateProvider', '$urlRouterProvider', '$httpProvider', 'localStorageServiceProvider', 'jwtOptionsProvider', 'AnalyticsProvider', '$uibTooltipProvider', '$compileProvider', '$translateProvider', function ($stateProvider, $urlRouterProvider, $httpProvider, localStorageServiceProvider, jwtOptionsProvider, AnalyticsProvider, $uibTooltipProvider, $compileProvider, $translateProvider) { 'use strict'; var environment = '@@ENVIRONMENT'; @@ -99,6 +100,14 @@ angular.module('portainer', [ 'outsideClick': 'outsideClick' }); + $translateProvider.useSanitizeValueStrategy('sanitize'); + $translateProvider + .useStaticFilesLoader({ + 'prefix': 'i18n/', + 'suffix': '.json' + }); + $translateProvider.preferredLanguage('en'); + $stateProvider .state('root', { abstract: true, diff --git a/app/components/dashboard/dashboard.html b/app/components/dashboard/dashboard.html index 8ba214666..b513c54ff 100644 --- a/app/components/dashboard/dashboard.html +++ b/app/components/dashboard/dashboard.html @@ -13,7 +13,7 @@ - + diff --git a/assets/i18n/en.json b/assets/i18n/en.json new file mode 100644 index 000000000..c75f6af1c --- /dev/null +++ b/assets/i18n/en.json @@ -0,0 +1,5 @@ +{ + "DASHBOARD": { + "NODE_NAME": "Name" + } +} diff --git a/assets/i18n/fr.json b/assets/i18n/fr.json new file mode 100644 index 000000000..aeb3fd421 --- /dev/null +++ b/assets/i18n/fr.json @@ -0,0 +1,5 @@ +{ + "DASHBOARD": { + "NODE_NAME": "Nom" + } +} diff --git a/bower.json b/bower.json index a61ae1b8c..089893bc0 100644 --- a/bower.json +++ b/bower.json @@ -3,7 +3,7 @@ "version": "1.14.0", "homepage": "https://github.com/portainer/portainer", "authors": [ - "Anthony Lapenna " + "Anthony Lapenna " ], "description": "A web interface for the Docker Remote API.", "keywords": [ @@ -37,6 +37,7 @@ "angular-local-storage": "~0.5.2", "angular-jwt": "~0.1.8", "angular-google-analytics": "~1.1.9", + "angular-translate": "~2.15.2", "bootstrap": "~3.3.6", "filesize": "~3.3.0", "jquery": "1.11.1", @@ -49,7 +50,8 @@ "bootbox.js": "bootbox#^4.4.0", "angular-multi-select": "~4.0.0", "toastr": "~2.1.3", - "xterm.js": "~2.8.1" + "xterm.js": "~2.8.1", + "angular-translate-loader-static-files": "~2.15.2" }, "resolutions": { "angular": "1.5.11" diff --git a/gruntfile.js b/gruntfile.js index 95ee9184e..debe05c9b 100644 --- a/gruntfile.js +++ b/gruntfile.js @@ -105,7 +105,8 @@ module.exports = function (grunt) { {dest: '<%= distdir %>/fonts/', src: '*.{ttf,woff,woff2,eof,svg}', expand: true, cwd: 'bower_components/font-awesome/fonts/'}, {dest: '<%= distdir %>/fonts/', src: '*.{ttf,woff,woff2,eof,svg}', expand: true, cwd: 'bower_components/rdash-ui/dist/fonts/'}, {dest: '<%= distdir %>/images/', src: '**', expand: true, cwd: 'assets/images/'}, - {dest: '<%= distdir %>/ico', src: '**', expand: true, cwd: 'assets/ico'} + {dest: '<%= distdir %>/ico', src: '**', expand: true, cwd: 'assets/ico'}, + {dest: '<%= distdir %>/i18n', src: '**', expand: true, cwd: 'assets/i18n'} ] } }, diff --git a/vendor.yml b/vendor.yml index 4c1e83937..07dd4b978 100644 --- a/vendor.yml +++ b/vendor.yml @@ -59,6 +59,8 @@ angular: - bower_components/angular-ui-router/release/angular-ui-router.js - bower_components/angular-utils-pagination/dirPagination.js - bower_components/ng-file-upload/ng-file-upload.js + - bower_components/angular-translate/angular-translate.js + - bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.js minified: - bower_components/angular/angular.min.js - bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js @@ -71,4 +73,6 @@ angular: - bower_components/angular-ui-select/dist/select.min.js - bower_components/angular-ui-router/release/angular-ui-router.min.js - bower_components/angular-utils-pagination/dirPagination.js - - bower_components/ng-file-upload/ng-file-upload.min.js \ No newline at end of file + - bower_components/ng-file-upload/ng-file-upload.min.js + - bower_components/angular-translate/angular-translate.min.js + - bower_components/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js
Name{{ 'DASHBOARD.NODE_NAME' | translate }} {{ infoData.Name }}