diff --git a/gruntfile.js b/gruntfile.js
index efa55746..9817b75e 100755
--- a/gruntfile.js
+++ b/gruntfile.js
@@ -291,7 +291,14 @@ module.exports = function(grunt) {
target: {
src: ['./scripts/setup.js']
}
- }
+ },
+ i18nlint: {
+ options: {
+ templateDelimiters: ['{', '}'],
+ ignoreTags: ['head', 'script', 'style', '{%']
+ },
+ src: watchFiles.clientViews.concat(watchFiles.serverViews)
+ },
});
grunt.event.on('coverage', function(lcov, done){
@@ -335,7 +342,7 @@ module.exports = function(grunt) {
grunt.registerTask('secure', ['env:secure', 'lint', 'html2js:main', 'html2js:forms', 'concurrent:default']);
// Lint task(s).
- grunt.registerTask('lint', ['jshint', 'csslint']);
+ grunt.registerTask('lint', ['jshint', 'csslint', 'i18nlint']);
grunt.registerTask('lint:tests', ['jshint:allTests']);
// Build task(s).
diff --git a/package.json b/package.json
index 634c55a7..d3bc262a 100644
--- a/package.json
+++ b/package.json
@@ -87,14 +87,15 @@
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-copy": "^1.0.0",
"grunt-contrib-uglify": "^0.11.1",
+ "grunt-contrib-watch": "~0.6.1",
"grunt-execute": "^0.2.2",
+ "grunt-i18nlint": "github:jwarby/grunt-i18nlint",
+ "grunt-karma": "~0.12.1",
"grunt-mocha-istanbul": "^3.0.1",
"grunt-mocha-test": "~0.12.1",
- "grunt-contrib-watch": "~0.6.1",
"grunt-newer": "~1.1.1",
- "grunt-usemin": "^3.1.1",
- "grunt-karma": "~0.12.1",
"grunt-nodemon": "~0.4.0",
+ "grunt-usemin": "^3.1.1",
"grunt-wiredep": "^3.0.1",
"istanbul": "^0.4.0",
"jasmine-core": "^2.4.1",
diff --git a/public/form_modules/forms/base/config/i18n/english.js b/public/form_modules/forms/base/config/i18n/english.js
index 6d670c03..fe12abaf 100644
--- a/public/form_modules/forms/base/config/i18n/english.js
+++ b/public/form_modules/forms/base/config/i18n/english.js
@@ -2,7 +2,7 @@
angular.module('view-form').config(['$translateProvider', function ($translateProvider) {
- $translateProvider.translations('english', {
+ $translateProvider.translations('en', {
FORM_SUCCESS: 'Form entry successfully submitted!',
REVIEW: 'Review',
BACK_TO_FORM: 'Go back to Form',
@@ -28,10 +28,22 @@ angular.module('view-form').config(['$translateProvider', function ($translatePr
CANCEL: 'Cancel',
SUBMIT: 'Submit',
UPLOAD_FILE: 'Upload your File',
+ Y: 'Y',
+ N: 'N',
+ OPTION_PLACEHOLDER: 'Type or select an option',
+ ADD_NEW_LINE_INSTR: 'Press SHIFT+ENTER to add a newline',
+ ERROR: 'Error',
+
+ FORM_404_HEADER: '404 - Form Does Not Exist',
+ FORM_404_BODY: 'The form you are trying to access does not exist. Sorry about that!',
+
+ FORM_UNAUTHORIZED_HEADER: 'Not Authorized to Access Form',
+ FORM_UNAUTHORIZED_BODY1: 'The form you are trying to access is currently private and not accesible publically.',
+ FORM_UNAUTHORIZED_BODY2: 'If you are the owner of the form, you can set it to "Public" in the "Configuration" panel in the form admin.',
});
- $translateProvider.preferredLanguage('english')
- .fallbackLanguage('english')
+ $translateProvider.preferredLanguage('en')
+ .fallbackLanguage('en')
.useSanitizeValueStrategy('escape');
}]);
diff --git a/public/form_modules/forms/base/config/i18n/french.js b/public/form_modules/forms/base/config/i18n/french.js
index ebefc7e5..c544ea1f 100644
--- a/public/form_modules/forms/base/config/i18n/french.js
+++ b/public/form_modules/forms/base/config/i18n/french.js
@@ -2,7 +2,7 @@
angular.module('view-form').config(['$translateProvider', function ($translateProvider) {
- $translateProvider.translations('french', {
+ $translateProvider.translations('fr', {
FORM_SUCCESS: 'Votre formulaire a été enregistré!',
REVIEW: 'Incomplet',
BACK_TO_FORM: 'Retourner au formulaire',
@@ -30,6 +30,16 @@ angular.module('view-form').config(['$translateProvider', function ($translatePr
UPLOAD_FILE: 'Envoyer un fichier',
Y: 'O',
N: 'N',
+ OPTION_PLACEHOLDER: 'Tapez ou sélectionnez une option',
+ ADD_NEW_LINE_INSTR: 'Appuyez sur MAJ + ENTRÉE pour ajouter une nouvelle ligne',
+ ERROR: 'Erreur',
+
+ FORM_404_HEADER: '404 - Le formulaire n\'existe pas',
+ FORM_404_BODY: 'Le formulaire auquel vous essayez d\'accéder n\'existe pas. Désolé pour ça!',
+
+ FORM_UNAUTHORIZED_HEADER: 'Non autorisé à accéder au formulaire',
+ FORM_UNAUTHORIZED_BODY1: 'Le formulaire auquel vous essayez d\'accéder est actuellement privé et inaccessible publiquement.',
+ FORM_UNAUTHORIZED_BODY2: 'Si vous êtes le propriétaire du formulaire, vous pouvez le définir sur "Public" dans le panneau "Configuration" du formulaire admin.',
});
}]);
diff --git a/public/form_modules/forms/base/config/i18n/german.js b/public/form_modules/forms/base/config/i18n/german.js
index 24be68b7..df335ce5 100644
--- a/public/form_modules/forms/base/config/i18n/german.js
+++ b/public/form_modules/forms/base/config/i18n/german.js
@@ -2,12 +2,12 @@
angular.module('view-form').config(['$translateProvider', function ($translateProvider) {
- $translateProvider.translations('german', {
+ $translateProvider.translations('de', {
FORM_SUCCESS: 'Ihre Angaben wurden gespeichert.',
REVIEW: 'Unvollständig',
BACK_TO_FORM: 'Zurück zum Formular',
- EDIT_FORM: '',
- CREATE_FORM: '',
+ EDIT_FORM: 'Bearbeiten Sie diese TellForm',
+ CREATE_FORM: 'Dieses TellForm erstellen',
ADVANCEMENT: '{{done}} von {{total}} beantwortet',
CONTINUE_FORM: 'Zum Formular',
REQUIRED: 'verpflichtend',
@@ -30,6 +30,16 @@ angular.module('view-form').config(['$translateProvider', function ($translatePr
UPLOAD_FILE: 'Datei versenden',
Y: 'J',
N: 'N',
+ OPTION_PLACEHOLDER: 'Geben oder wählen Sie eine Option aus',
+ ADD_NEW_LINE_INSTR: 'Drücken Sie UMSCHALT + EINGABETASTE, um eine neue Zeile hinzuzufügen',
+ ERROR: 'Fehler',
+
+ FORM_404_HEADER: '404 - Formular existiert nicht',
+ FORM_404_BODY: 'Das Formular, auf das Sie zugreifen möchten, existiert nicht. Das tut mir leid!',
+
+ FORM_UNAUTHORIZED_HEADER: 'Nicht zum Zugriffsformular berechtigt\' ',
+ FORM_UNAUTHORIZED_BODY1: 'Das Formular, auf das Sie zugreifen möchten, ist derzeit privat und nicht öffentlich zugänglich.',
+ FORM_UNAUTHORIZED_BODY2: 'Wenn Sie der Eigentümer des Formulars sind, können Sie es im Fenster "Konfiguration" im Formular admin auf "Öffentlich" setzen.',
});
}]);
diff --git a/public/form_modules/forms/base/config/i18n/italian.js b/public/form_modules/forms/base/config/i18n/italian.js
index 06cddc67..62058a2e 100644
--- a/public/form_modules/forms/base/config/i18n/italian.js
+++ b/public/form_modules/forms/base/config/i18n/italian.js
@@ -2,12 +2,12 @@
angular.module('view-form').config(['$translateProvider', function ($translateProvider) {
- $translateProvider.translations('italian', {
+ $translateProvider.translations('it', {
FORM_SUCCESS: 'Il formulario è stato inviato con successo!',
REVIEW: 'Incompleto',
BACK_TO_FORM: 'Ritorna al formulario',
- EDIT_FORM: '',
- CREATE_FORM: '',
+ EDIT_FORM: 'Modifica questo TellForm',
+ CREATE_FORM: 'Crea questo TellForm',
ADVANCEMENT: '{{done}} su {{total}} completate',
CONTINUE_FORM: 'Vai al formulario',
REQUIRED: 'obbligatorio',
@@ -30,6 +30,16 @@ angular.module('view-form').config(['$translateProvider', function ($translatePr
UPLOAD_FILE: 'Invia un file',
Y: 'S',
N: 'N',
+ OPTION_PLACEHOLDER: 'Digitare o selezionare un\'opzione',
+ ADD_NEW_LINE_INSTR: 'Premere SHIFT + INVIO per aggiungere una nuova riga',
+ ERROR: 'Errore',
+
+ FORM_404_HEADER: '404 - Il modulo non esiste',
+ FORM_404_BODY: 'La forma che stai cercando di accedere non esiste. Ci dispiace!',
+
+ FORM_UNAUTHORIZED_HEADER: 'Non autorizzato per accedere al modulo',
+ FORM_UNAUTHORIZED_BODY1: 'Il modulo che si sta tentando di accedere è attualmente privato e non accessibile in pubblico.',
+ FORM_UNAUTHORIZED_BODY2: 'Se sei il proprietario del modulo, puoi impostarlo su "Pubblico" nel pannello "Configurazione" nell\'amministratore di moduli.',
});
}]);
diff --git a/public/form_modules/forms/base/config/i18n/spanish.js b/public/form_modules/forms/base/config/i18n/spanish.js
index 90564938..86861eb3 100644
--- a/public/form_modules/forms/base/config/i18n/spanish.js
+++ b/public/form_modules/forms/base/config/i18n/spanish.js
@@ -2,34 +2,44 @@
angular.module('view-form').config(['$translateProvider', function ($translateProvider) {
- $translateProvider.translations('spanish', {
- FORM_SUCCESS: '¡El formulario ha sido enviado con éxito!',
- REVIEW: 'Revisar',
- BACK_TO_FORM: 'Regresar al formulario',
- EDIT_FORM: '',
- CREATE_FORM: '',
- ADVANCEMENT: '{{done}} de {{total}} contestadas',
- CONTINUE_FORM: 'Continuar al formulario',
- REQUIRED: 'Información requerida',
- COMPLETING_NEEDED: '{{answers_not_completed}} respuesta(s) necesita(n) ser completada(s)',
- OPTIONAL: 'Opcional',
- ERROR_EMAIL_INVALID: 'Favor de proporcionar un correo electrónico válido',
- ERROR_NOT_A_NUMBER: 'Por favor, introduzca sólo números válidos',
- ERROR_URL_INVALID: 'Favor de proporcionar un url válido',
- OK: 'OK',
- ENTER: 'pulse INTRO',
- YES: 'Si',
- NO: 'No',
- NEWLINE: 'presione SHIFT+INTRO para crear una nueva línea',
- CONTINUE: 'Continuar',
- LEGAL_ACCEPT: 'Yo acepto',
- LEGAL_NO_ACCEPT: 'Yo no acepto',
- DELETE: 'Eliminar',
- CANCEL: 'Cancelar',
- SUBMIT: 'Registrar',
- UPLOAD_FILE: 'Cargar el archivo',
- Y: 'S',
- N: 'N'
- });
+ $translateProvider.translations('es', {
+ FORM_SUCCESS: '¡El formulario ha sido enviado con éxito!',
+ REVIEW: 'Revisar',
+ BACK_TO_FORM: 'Regresar al formulario',
+ EDIT_FORM: 'Editar este TellForm',
+ CREATE_FORM: 'Crear este TellForm',
+ ADVANCEMENT: '{{done}} de {{total}} contestadas',
+ CONTINUE_FORM: 'Continuar al formulario',
+ REQUIRED: 'Información requerida',
+ COMPLETING_NEEDED: '{{answers_not_completed}} respuesta(s) necesita(n) ser completada(s)',
+ OPTIONAL: 'Opcional',
+ ERROR_EMAIL_INVALID: 'Favor de proporcionar un correo electrónico válido',
+ ERROR_NOT_A_NUMBER: 'Por favor, introduzca sólo números válidos',
+ ERROR_URL_INVALID: 'Favor de proporcionar un url válido',
+ OK: 'OK',
+ ENTER: 'pulse INTRO',
+ YES: 'Si',
+ NO: 'No',
+ NEWLINE: 'presione SHIFT+INTRO para crear una nueva línea',
+ CONTINUE: 'Continuar',
+ LEGAL_ACCEPT: 'Yo acepto',
+ LEGAL_NO_ACCEPT: 'Yo no acepto',
+ DELETE: 'Eliminar',
+ CANCEL: 'Cancelar',
+ SUBMIT: 'Registrar',
+ UPLOAD_FILE: 'Cargar el archivo',
+ Y: 'S',
+ N: 'N',
+ OPTION_PLACEHOLDER: 'Escriba o seleccione una opción',
+ ADD_NEW_LINE_INSTR: 'Presione MAYÚS + ENTRAR para agregar una nueva línea',
+ ERROR: 'Error',
+
+ FORM_404_HEADER: '404 - La forma no existe',
+ FORM_404_BODY: 'El formulario al que intenta acceder no existe. ¡Lo siento por eso!',
+
+ FORM_UNAUTHORIZED_HEADER: 'Non autorizzato per accedere al modulo',
+ FORM_UNAUTHORIZED_BODY1: 'Il modulo che si sta tentando di accedere è attualmente privato e non accessibile in pubblico.',
+ FORM_UNAUTHORIZED_BODY2: 'Se sei il proprietario del modulo, puoi impostarlo su "Pubblico" nel pannello "Configurazione" nell\'amministratore di moduli.',
+ });
}]);
diff --git a/public/form_modules/forms/base/views/directiveViews/field/dropdown.html b/public/form_modules/forms/base/views/directiveViews/field/dropdown.html
index 913fc5cc..21151b22 100755
--- a/public/form_modules/forms/base/views/directiveViews/field/dropdown.html
+++ b/public/form_modules/forms/base/views/directiveViews/field/dropdown.html
@@ -24,7 +24,7 @@
on-tab-and-shift-key="prevField()"
on-tab-key="nextField()"
ng-change="nextField()">
-