From d1864c8b30d59d70426b9ff0a16bb4c0d9ae1322 Mon Sep 17 00:00:00 2001
From: Diego Rey <diego.despaux@izundo.com>
Date: Tue, 4 Dec 2018 18:53:09 -0300
Subject: [PATCH] Add language translations for modals

---
 .../layout/archivos/archivos.component.html   | 57 ++++++++++-----
 .../app/layout/archivos/archivos.component.ts | 55 +++++++++------
 .../archivos/compartirArchivo.component.ts    | 20 ++++--
 .../archivos/confirmarEliminar.component.ts   | 34 ++++++---
 .../layout/archivos/nuevoArchivo.component.ts | 48 ++++++++-----
 .../seleccionarDirectorio.component.ts        | 13 +++-
 .../archivos/verCalificacion.component.ts     | 14 ++--
 .../grupos/calificarEntrega.component.ts      | 21 +++---
 .../app/layout/grupos/grupos.component.html   |  4 +-
 .../src/app/layout/grupos/grupos.component.ts | 12 ++--
 .../app/layout/matefun/confirm.component.ts   |  8 ++-
 .../seleccionarDirectorio.component.ts        | 24 +++++--
 .../src/app/shared/modal/confirm.component.ts |  4 +-
 Frontend Angular 4/src/assets/i18n/en.json    | 70 +++++++++++++++++--
 Frontend Angular 4/src/assets/i18n/es.json    | 66 +++++++++++++++--
 15 files changed, 329 insertions(+), 121 deletions(-)

diff --git a/Frontend Angular 4/src/app/layout/archivos/archivos.component.html b/Frontend Angular 4/src/app/layout/archivos/archivos.component.html
index d02e130f..0b99729c 100755
--- a/Frontend Angular 4/src/app/layout/archivos/archivos.component.html	
+++ b/Frontend Angular 4/src/app/layout/archivos/archivos.component.html	
@@ -21,14 +21,14 @@
                         <div class="card">
                             <div>
                             <div class="btn-group pull-right" style="cursor: pointer; margin-top: -9px;">
-                                <button  ngbPopover="Atras"  triggers="mouseenter:mouseleave" data-placement="bottom" class="btn btn-sm btn-secondary pull-right" *ngIf="directorioActual.padreId!=-1" style="cursor: pointer; margin-top: -33.5px; margin-right: 73px; height: 30px;"(click)="navBack()">
+                                <button ngbPopover='{{ "i18n.action.goBack" | translate | titleCase }}'  triggers="mouseenter:mouseleave" data-placement="bottom" class="btn btn-sm btn-secondary pull-right" *ngIf="directorioActual.padreId!=-1" style="cursor: pointer; margin-top: -33.5px; margin-right: 73px; height: 30px;"(click)="navBack()">
                                     <i class="fa fa-arrow-up"></i>
                                 </button>
                             </div>
                                 <!-- <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px;" > 
                                     <i class="fa fa-plus"></i> 
                                 </buton> -->
-                                <div class="btn-group pull-right" style="cursor: pointer;    margin-top: -42px; height: 30px;    width: 29px;">
+                                <div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px;">
                                   <button
                                     ngbPopover='{{ "i18n.action.new" | translate | titleCase }}'
                                     triggers="mouseenter:mouseleave"
@@ -42,13 +42,17 @@
                                     <i class="fa fa-plus"></i> 
                                   </button>
                                   <div class="dropdown-menu">
-                                    <a class="dropdown-item"(click)="mkFile()" >Archivo</a>
+                                    <a class="dropdown-item"(click)="mkFile()">
+                                        {{ "i18n.object.file" | translate | titleCase }}
+                                    </a>
                                     <div class="dropdown-divider"></div>
-                                    <a class="dropdown-item" (click)="mkdir()">Carpeta</a>
+                                    <a class="dropdown-item" (click)="mkdir()">
+                                        {{ "i18n.object.folder" | translate | titleCase }}
+                                    </a>
                                   </div>
                                 </div>
 
-                                <div class="btn-group pull-right" style="cursor: pointer;    margin-top: -42px; height: 30px;    width: 29px; margin-right: 36px;">
+                                <div class="btn-group pull-right" style="cursor: pointer; margin-top: -42px; height: 30px; width: 29px; margin-right: 36px;">
                                   <button 
                                     ngbPopover='{{ "i18n.action.order" | translate | titleCase }}'
                                     triggers="mouseenter:mouseleave"
@@ -62,13 +66,15 @@
                                     <i class="fa fa-sort"></i> 
                                   </button>
                                   <div class="dropdown-menu">
-                                    <a class="dropdown-item"(click)="ordenarPorTipo()" >Carpetas primero</a>
+                                    <a class="dropdown-item"(click)="ordenarPorTipo()">
+                                        {{ "i18n.msg.order.kind" | translate }}
+                                    </a>
                                     <div class="dropdown-divider"></div>
-                                    <a class="dropdown-item" (click)="ordenarPorFecha()">Fecha de creación</a>
+                                    <a class="dropdown-item" (click)="ordenarPorFecha()">
+                                        {{ "i18n.msg.order.date" | translate }}
+                                    </a>
                                   </div>
                                 </div>
-
-
                             </div>
                             <div class="card-block">
                                 <div class="row listado-archivos" style="min-height: 100px; overflow-y: scroll;">
@@ -89,7 +95,7 @@
 
                     </ng-template>
                 </ngb-tab>
-                <ngb-tab title='{{ "i18n.msg.file.shared" | translate }}'>
+                <ngb-tab title='{{ "i18n.action.shared" | translate | titleCase }}'>
                     <ng-template ngbTabContent>
 
                         <div class="card" *ngIf="esAlumno">
@@ -140,14 +146,29 @@
                         (click)="seleccionarDirectorioAMover()">  
                         <i class="fa fa-cut"></i> 
                     </button>
-
-                    <button class="btn btn-sm btn-secondary pull-left mr-2" *ngIf="esAlumno && archivoSeleccionado && hayArchivoOriginal()" (click)="seleccionarArchivoOriginal()">Ver original</button>
-
-                    <button class="btn btn-sm btn-secondary pull-left mr-2" *ngIf="esAlumno && archivoSeleccionado && hayArchivoMio()" (click)="seleccionarArchivoMio()">Ver mio</button>
-
-                    <button class="btn btn-sm btn-secondary pull-left mr-4" *ngIf="esAlumno && archivoSeleccionado && !archivoSeleccionado.directorio && archivoSeleccionado.archivoOrigenId != -1 && (archivoSeleccionado.estado == 'Edicion' || archivoSeleccionado.estado == 'Devuelto')" (click)="confirmarEntrega()">Entregar</button>
+                    <button
+                        class="btn btn-sm btn-secondary pull-left mr-2"
+                        *ngIf="esAlumno && archivoSeleccionado && hayArchivoOriginal()"
+                        (click)="seleccionarArchivoOriginal()">
+                        {{ "i18n.msg.file.seeOriginal" | translate }}
+                    </button>
+                    <button
+                        class="btn btn-sm btn-secondary pull-left mr-2"
+                        *ngIf="esAlumno && archivoSeleccionado && hayArchivoMio()"
+                        (click)="seleccionarArchivoMio()">
+                        {{ "i18n.msg.file.seeMine" | translate }}
+                    </button>
+                    <button
+                        class="btn btn-sm btn-secondary pull-left mr-4"
+                        *ngIf="esAlumno && archivoSeleccionado && !archivoSeleccionado.directorio && archivoSeleccionado.archivoOrigenId != -1 && (archivoSeleccionado.estado == 'Edicion' || archivoSeleccionado.estado == 'Devuelto')"
+                        (click)="confirmarEntrega()">
+                        {{ "i18n.action.send" | translate }}
+                    </button>
                     
-                    <div class="pull-left mr-2" *ngIf="esAlumno && (archivoSeleccionado?.estado == 'Entregado')">{{archivoSeleccionado.estado}} - </div>
+                    <div 
+                        class="pull-left mr-2"
+                        *ngIf="esAlumno && (archivoSeleccionado?.estado == 'Entregado')">
+                        {{archivoSeleccionado.estado}} - </div>
 
                     <button 
                         *ngIf="esAlumno && archivoSeleccionado?.estado == 'Corregido'"
@@ -164,7 +185,7 @@
                         {{ "i18n.object.name" | translate | titleCase }}:
                         {{archivoSeleccionado?.nombre}}
                         &nbsp;-&nbsp;
-                        {{ "i18n.msg.file.created" | translate }}:
+                        {{ "i18n.action.created" | translate | titleCase }}:
                         {{archivoSeleccionado?.fechaCreacion | date}}
                     </div>
                     <div class="pull-left" *ngIf="!archivoSeleccionado">{{ "i18n.msg.file.preview" | translate }}</div>
diff --git a/Frontend Angular 4/src/app/layout/archivos/archivos.component.ts b/Frontend Angular 4/src/app/layout/archivos/archivos.component.ts
index 9e96a7d5..f0418ad5 100755
--- a/Frontend Angular 4/src/app/layout/archivos/archivos.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/archivos.component.ts	
@@ -15,6 +15,7 @@ import { SeleccionarDirectorioMove } from './seleccionarDirectorio.component';
 import { CodemirrorComponent } from 'ng2-codemirror';
 import { NgbPopoverConfig, NgbPopover} from '@ng-bootstrap/ng-bootstrap';
 import { TranslateService } from '@ngx-translate/core';
+import { TitleCasePipe } from '../../shared/pipes/titlecase.pipe';
 
 import 'codemirror/mode/haskell/haskell';
 import 'codemirror/addon/display/panel';
@@ -29,6 +30,8 @@ import 'codemirror/mode/markdown/markdown';
 })
 
 export class ArchivosComponent {
+	translateService : any;
+	titlecasePipe: any;
 	archivos : Archivo[] = [];
 	archivosCompartidos: Archivo[] = [];
 	archivosCompartidosSinDuplicados: Archivo [] = [];
@@ -53,6 +56,9 @@ export class ArchivosComponent {
 		private dialogService:DialogService,
 		public translate: TranslateService
 		){
+		this.translateService = translate;
+		this.titlecasePipe = new TitleCasePipe();
+
 		this.esAlumno = JSON.parse(sessionStorage.getItem("currentUser")).tipo ==="alumno";
 		this.directorioActual = {};
 		this.directorioActual.archivos = [];
@@ -184,23 +190,21 @@ export class ArchivosComponent {
 			if(this.archivos.some(arch => arch.id == this.archivoSeleccionado.id)){
 				var that = this;
 				let disposable = this.dialogService.addDialog(ConfirmarEliminar, {
-					nombreArchivo:that.archivoSeleccionado.nombre, 
-					esDirectorio:that.archivoSeleccionado.directorio,
-					parentContext :that})
+					nombreArchivo : {fileName: that.archivoSeleccionado.nombre}, 
+					esDirectorio : that.archivoSeleccionado.directorio,
+					parentContext : that})
 				.subscribe((isConfirmed)=>{
-
 					if(isConfirmed) {
-
-
 						//codeMirrorRef.options.readOnly = false;
 						//componentRef.editDialogFired = true;
 					}
 				});
+				console.log(disposable);
 			}else{
-				this.notifService.warning("Sin permisos para eliminar el archivo");
+				this.notifService.warning(this.translateService.get('i18n.warning.file.noPermissionRemove').value);
 			}
 		}else{
-			this.notifService.warning("Archivo no seleccionado");
+			this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
 		}
 	}
 	seleccionarDirectorioAMover(){
@@ -223,10 +227,10 @@ export class ArchivosComponent {
 					}
 				});
 			}else{
-				this.notifService.warning("Sin permisos para mover el archivo");
+				this.notifService.warning(this.translateService.get('i18n.warning.file.noPermissionMove').value);
 			}
 		}else{
-			this.notifService.warning("Archivo no seleccionado");
+			this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
 		}
 	}
 
@@ -261,7 +265,7 @@ export class ArchivosComponent {
 		this.haskellService.editarArchivo(this.archivoSeleccionado.id,this.archivoSeleccionado)
 		.subscribe(
 			archivo => {
-				console.log("Archivo modificado");
+				console.log(this.translateService.get('i18n.msg.file.modified').value);
 
 			}, 
 			error => {
@@ -273,7 +277,7 @@ export class ArchivosComponent {
 	cargarArchivo(){
 		if(this.archivoSeleccionado){
 			if(this.archivoSeleccionado.directorio){
-				this.notifService.warning('No se seleccionó ningún archivo',false);
+				this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value, false);
 			}else{
 				//Si el archivo es compartido con el grupo, editabe y no lo he editado, lo voy a buscar al servidor. 
 				if(this.archivosCompartidos.some(arch => arch.id == this.archivoSeleccionado.id) && this.archivoSeleccionado.editable && this.archivoSeleccionado.archivoOrigenId == -1){
@@ -298,16 +302,23 @@ export class ArchivosComponent {
 				}
 			}
 		}else{
-			this.notifService.warning("Archivo no seleccionado");
+			this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
 		}
 	}
 
 	confirmarEntrega(){
+		var title = this.titlecasePipe.transform(this.translateService.get('i18n.action.send').value) + " " +
+					this.titlecasePipe.transform(this.translateService.get('i18n.object.file').value);
+		var msg = '';
+		this.translateService.get('i18n.msg.file.toSend', {fileName: this.archivoSeleccionado.nombre}).subscribe((res: string) => {
+			msg = res + '\n' + this.translateService.get('i18n.msg.file.toSendInfo').value;
+		});
+		
 		let disposable = this.dialogService.addDialog(ConfirmComponent, {
-			title:'Entregar archivo', 
-			message:'¿Desea entregar el archivo "'+this.archivoSeleccionado.nombre+'"?\nNo se podrá editar luego de la entrega.',
-			confirmText: 'Entregar',
-			cancelText: 'Cancelar'
+			title: title,
+			message: msg,
+			confirmText: this.titlecasePipe.transform(this.translateService.get('i18n.action.send')),
+			cancelText: this.titlecasePipe.transform(this.translateService.get('i18n.action.cancel')),
 		})
 		.subscribe((isConfirmed)=>{
 			if(isConfirmed) {
@@ -317,7 +328,7 @@ export class ArchivosComponent {
 	}
 
 	entregarArchivo(){
-		this.archivoSeleccionado.estado = 'Entregado';
+		this.archivoSeleccionado.estado = this.titlecasePipe.transform(this.translateService.get('i18n.action.sent'));
 		this.haskellService.editarArchivo(this.archivoSeleccionado.id, this.archivoSeleccionado)
 		.subscribe(
 			archivo => {
@@ -472,6 +483,7 @@ export class ArchivosComponent {
 						this.dialogService.addDialog(CompartirArchivoComponent, {
 							grupos:gruposRest, 
 							archivo:this.archivoSeleccionado,
+							nombreArchivo: {'fileName': this.archivoSeleccionado.nombre },
 							parent:this
 						})
 						.subscribe((isConfirmed)=>{
@@ -489,6 +501,7 @@ export class ArchivosComponent {
 				this.dialogService.addDialog(CompartirArchivoComponent, {
 					grupos:grupos, 
 					archivo:this.archivoSeleccionado,
+					nombreArchivo: {'fileName': this.archivoSeleccionado.nombre },
 					parent:this
 				})
 				.subscribe((isConfirmed)=>{
@@ -498,7 +511,7 @@ export class ArchivosComponent {
 				});
 			}
 		}else{
-			this.notifService.warning("Archivo no seleccionado");
+			this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
 		}
 
 	}
@@ -530,8 +543,4 @@ export class ArchivosComponent {
 			}
 		});
 	}
-
-
-	
-
 }
diff --git a/Frontend Angular 4/src/app/layout/archivos/compartirArchivo.component.ts b/Frontend Angular 4/src/app/layout/archivos/compartirArchivo.component.ts
index 02b5187e..9b9c97a0 100755
--- a/Frontend Angular 4/src/app/layout/archivos/compartirArchivo.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/compartirArchivo.component.ts	
@@ -2,18 +2,22 @@ import { Component } from '@angular/core';
 import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
 import { Archivo } from '../../shared/objects/archivo';
 import { Grupo } from '../../shared/objects/grupo';
+import { TranslateService } from '@ngx-translate/core';
 
 export interface ConfirmModel {
   archivo: Archivo;
   grupos:any;
   parent:any;
+  nombreArchivo: { 'fileName' : string };
 }
 @Component({  
     selector: 'confirm',
     template: `<div class="modal-dialog" style="margin-top:100px;">
                 <div class="modal-content">
                    <div class="modal-header">
-                     <h6 class="modal-title pull-lefth">Compartir &quot;{{archivo.nombre}}&quot; con:</h6> 
+                      <h6 class="modal-title pull-lefth">
+                        {{ "i18n.msg.file.share" | translate:nombreArchivo }}
+                      </h6>
                      <button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
                    </div>
                    <div class="modal-body" style="height:350px;overflow-y: scroll;">
@@ -27,7 +31,9 @@ export interface ConfirmModel {
                         </div>
                      </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-primary" (click)="compartir()">Compartir</button>
+                     <button type="button" class="btn btn-primary" (click)="compartir()">
+                      {{ "i18n.action.share" | translate | titleCase }}
+                     </button>
                    </div>
                  </div>
               </div>`
@@ -37,9 +43,12 @@ export class CompartirArchivoComponent extends DialogComponent<ConfirmModel, boo
   grupos:any;
   grupo: Grupo;
   parent: any;
+  nombreArchivo: { 'fileName' : string };
+  translateService: any;
   
-  constructor(dialogService: DialogService) {
+  constructor(dialogService: DialogService, public translate: TranslateService) {
     super(dialogService);
+    this.translateService = translate;
   }
 
   seleccionarGrupo(grupo){
@@ -47,18 +56,19 @@ export class CompartirArchivoComponent extends DialogComponent<ConfirmModel, boo
   }
 
   compartir(){
+    this.nombreArchivo = {'fileName' : this.archivo.nombre};
     if(this.grupo){
       this.parent.haskellService.compartirArchivoGrupo(this.grupo, this.archivo.id)
                 .subscribe(
                     success => {
-                        this.parent.notifService.success("Archivo compartido");
+                        this.parent.notifService.success(this.translateService.get('i18n.msg.file.shared').value);
                         this.close();
                     }, 
                     error => {
                         this.parent.notifService.error(error);
                     });
     }else{
-      this.parent.notifService.error("Seleccione un grupo");
+      this.parent.notifService.error(this.translateService.get('i18n.warning.group.select').value);
     }
   }
 }
\ No newline at end of file
diff --git a/Frontend Angular 4/src/app/layout/archivos/confirmarEliminar.component.ts b/Frontend Angular 4/src/app/layout/archivos/confirmarEliminar.component.ts
index 76a437de..d7de4a51 100755
--- a/Frontend Angular 4/src/app/layout/archivos/confirmarEliminar.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/confirmarEliminar.component.ts	
@@ -1,36 +1,51 @@
 import { Component } from '@angular/core';
 import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
 import { Archivo } from '../../shared/objects/archivo';
+
 export interface ConfirmModel {
-  nombreArchivo:string;
+  nombreArchivo: { fileName: string };
   esDirectorio:boolean;
   parentContext: any;
-
 }
 @Component({  
     selector: 'confirm',
     template: `<div class="modal-dialog" style="margin-top:100px;">
                 <div class="modal-content">
                    <div class="modal-header">
-                      <h6 class="modal-title" *ngIf="!esDirectorio">Eliminar archivo</h6> 
-                      <h6 class="modal-title" *ngIf="esDirectorio">Eliminar carpeta</h6> 
+                      <h6 class="modal-title" *ngIf="!esDirectorio">
+                        {{ "i18n.action.delete" | translate | titleCase }}
+                        {{ "i18n.object.file" | translate | titleCase }}
+                      </h6> 
+                      <h6 class="modal-title" *ngIf="esDirectorio">
+                        {{ "i18n.action.delete" | translate | titleCase }}
+                        {{ "i18n.object.folder" | translate | titleCase }}
+                      </h6> 
                       <button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
                    </div>
                    <div class="modal-body">
-                        <p *ngIf="!esDirectorio">¿Está seguro que desea eliminar el archivo {{nombreArchivo}}?</p>
-                        <p *ngIf="esDirectorio">¿Está seguro que desea eliminar la carpeta {{nombreArchivo}}?</p>
+                        <p *ngIf="!esDirectorio">
+                            {{ "i18n.msg.file.delete" | translate:nombreArchivo }}
+                        </p>
+                        <p *ngIf="esDirectorio">
+                            {{ "i18n.msg.file.delete" | translate:nombreArchivo }}
+                        </p>
                   </div>
                   <div class="modal-footer">
-                    <button type="button" class="btn btn-default" (click)="close()">Cancelar</button>
-                    <button type="button" class="btn btn-success" (click)="confirmarEliminar()">Eliminar</button>
+                    <button type="button" class="btn btn-default" (click)="close()">
+                        {{ "i18n.action.cancel" | translate | titleCase }}
+                    </button>
+                    <button type="button" class="btn btn-success" (click)="confirmarEliminar()">
+                        {{ "i18n.action.delete" | translate | titleCase }}
+                    </button>
                   </div>
                  </div>
               </div>`
 })
 export class ConfirmarEliminar extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
-  nombreArchivo: string;
+  nombreArchivo: { fileName: string };
   esDirectorio: boolean;
   parentContext: any;
+
   constructor(dialogService: DialogService) {
     super(dialogService);
   }
@@ -44,7 +59,6 @@ export class ConfirmarEliminar extends DialogComponent<ConfirmModel, boolean> im
       this.parentContext.haskellService.eliminarArchivo(this.parentContext.archivoSeleccionado.id)
       .subscribe(
         archivo => {
-          console.log("Archivo eliminado");
           if(directorio){
             var idDirActual = that.directorioActual.padreId;
           }else {
diff --git a/Frontend Angular 4/src/app/layout/archivos/nuevoArchivo.component.ts b/Frontend Angular 4/src/app/layout/archivos/nuevoArchivo.component.ts
index d51363e9..4855856c 100755
--- a/Frontend Angular 4/src/app/layout/archivos/nuevoArchivo.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/nuevoArchivo.component.ts	
@@ -1,12 +1,13 @@
 import { Component } from '@angular/core';
 import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
 import { Archivo } from '../../shared/objects/archivo';
+import { TranslateService } from '@ngx-translate/core';
+
 export interface ConfirmModel {
   nombre:string;
   descripcion:string;
   parentContext: any;
   esDirectorio:boolean;
-
 }
 @Component({  
     selector: 'confirm',
@@ -14,26 +15,38 @@ export interface ConfirmModel {
                 <div class="modal-content">
 
                    <div class="modal-header">
-                      <h6 class="modal-title" *ngIf="esDirectorio">Nueva carpeta</h6> 
-                      <h6 class="modal-title" *ngIf="!esDirectorio">Nuevo archivo</h6> 
+                      <h6 class="modal-title" *ngIf="esDirectorio">
+                        {{ "i18n.action.new" | translate | titleCase }}
+                        {{ "i18n.object.folder" | translate | titleCase }}
+                      </h6> 
+                      <h6 class="modal-title" *ngIf="!esDirectorio">
+                        {{ "i18n.action.new" | translate | titleCase }}
+                        {{ "i18n.object.file" | translate | titleCase }}
+                      </h6> 
                       <button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
                    </div>
                    
                    <div class="modal-body">
                     <form>
                       <div class="form-group">
-                        <label for="recipient-name" class="form-control-label">Nombre:</label>
+                        <label for="recipient-name" class="form-control-label">
+                          {{ "i18n.object.name" | translate | titleCase }}:
+                        </label>
                         <input type="text" class="form-control" id="recipient-name" [(ngModel)]="nombre" [ngModelOptions]="{standalone: true}" >
                       </div>
                       <div class="form-group" *ngIf="esDirectorio">
-                        <label for="message-text" class="form-control-label">Descripción:</label>
+                        <label for="message-text" class="form-control-label">
+                          {{ "i18n.object.descr" | translate | titleCase }}:
+                        </label>
                         <textarea class="form-control" id="message-text" [(ngModel)]="descripcion" [ngModelOptions]="{standalone: true}" ></textarea>
                       </div>
                     </form>
                   </div>
 
                   <div class="modal-footer">
-                    <button type="button" class="btn btn-success" (click)="confirm()">Crear</button>
+                    <button type="button" class="btn btn-success" (click)="confirm()">
+                      {{ "i18n.action.create" | translate | titleCase }}
+                    </button>
                   </div>
 
                  </div>
@@ -44,8 +57,11 @@ export class NuevoArchivo extends DialogComponent<ConfirmModel, boolean> impleme
   esDirectorio: boolean;
   descripcion: string;
   parentContext: any;
-  constructor(dialogService: DialogService) {
+  translateService: any;
+
+  constructor(dialogService: DialogService, public translate: TranslateService) {
     super(dialogService);
+    this.translateService = translate;
   }
   confirm() {
     var nombre = this.nombre;
@@ -67,18 +83,16 @@ export class NuevoArchivo extends DialogComponent<ConfirmModel, boolean> impleme
     var regex = /^[A-Z]/
     if(regex.test(nombre)){
       this.parentContext.haskellService.crearArchivo(archivo).subscribe(
-                      archivo => {
-                        var id = that.directorioActual.id;
-                        that.recargarArchivos(id);        
-                      }, 
-                      error => {
-                          this.parentContext.notifService.error(error);
-                      });
-      
-
+          archivo => {
+            var id = that.directorioActual.id;
+            that.recargarArchivos(id);        
+          }, 
+          error => {
+              this.parentContext.notifService.error(error);
+          });
       this.close();
     }else{
-      alert("Nombre de archivo debe iniciar con mayusula.")
+        alert(this.translateService.get('i18n.warning.file.capitalLetter').value);
     }
   }
   
diff --git a/Frontend Angular 4/src/app/layout/archivos/seleccionarDirectorio.component.ts b/Frontend Angular 4/src/app/layout/archivos/seleccionarDirectorio.component.ts
index 9ca43a23..72b14890 100755
--- a/Frontend Angular 4/src/app/layout/archivos/seleccionarDirectorio.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/seleccionarDirectorio.component.ts	
@@ -14,7 +14,9 @@ export interface ConfirmModel {
     template: `<div class="modal-dialog" style="margin-top:100px;">
                 <div class="modal-content">
                    <div class="modal-header">
-                     <h6 class="modal-title pull-lefth">¿Dónde quieres mover el archivo?</h6> 
+                     <h6 class="modal-title pull-lefth">
+                      {{ "i18n.msg.file.move" | translate }}
+                     </h6> 
                      <button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
                    </div>
                    <div class="modal-body" style="height:350px;overflow-y: scroll;">
@@ -29,8 +31,13 @@ export interface ConfirmModel {
                         </div>
                      </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-default" (click)="navBack()">Atras</button>
-                     <button type="button" class="btn btn-primary" (click)="move()">Mover aquí</button>
+                     <button type="button" class="btn btn-default" (click)="navBack()">
+                      {{ "i18n.action.goBack" | translate | titleCase }}
+                     </button>
+                     <button type="button" class="btn btn-primary" (click)="move()">
+                      {{ "i18n.action.move" | translate | titleCase }}
+                      {{ "i18n.object.here" | translate }}
+                     </button>
                    </div>
                  </div>
               </div>`
diff --git a/Frontend Angular 4/src/app/layout/archivos/verCalificacion.component.ts b/Frontend Angular 4/src/app/layout/archivos/verCalificacion.component.ts
index d8a438de..41be288d 100755
--- a/Frontend Angular 4/src/app/layout/archivos/verCalificacion.component.ts	
+++ b/Frontend Angular 4/src/app/layout/archivos/verCalificacion.component.ts	
@@ -10,18 +10,22 @@ export interface ConfirmModel {
     template: `<div class="modal-dialog" style="margin-top:100px;">
                 <div class="modal-content">
                    <div class="modal-header">
-                     <h6 class="modal-title pull-lefth">Calificación &quot;{{archivo.nombre}}&quot;:</h6> 
+                     <h6 class="modal-title pull-lefth">
+                      {{ "i18n.object.qualification" | translate | titleCase }} &quot;{{archivo.nombre}}&quot;:
+                     </h6> 
                      <button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
                    </div>
                    <div class="modal-body">
                        <div>
-                         <label><b>Fecha: </b></label>&nbsp; {{archivo.evaluacion.fecha | date}}<br>
-                         <label><b>Nota (1-100): </b></label>&nbsp; {{archivo.evaluacion.nota}}<br>
-                         <label><b>Detalle: </b></label>&nbsp; {{archivo.evaluacion.descripcion}}
+                         <label><b>{{ "i18n.object.date" | translate | titleCase }}: </b></label>&nbsp; {{archivo.evaluacion.fecha | date}}<br>
+                         <label><b>{{ "i18n.objet.score" | translate | titleCase }} (1-100): </b></label>&nbsp; {{archivo.evaluacion.nota}}<br>
+                         <label><b>{{ "i18n.object.detail" | translate | titleCase }}: </b></label>&nbsp; {{archivo.evaluacion.descripcion}}
                        </div>
                    </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-primary" (click)="close()">Cerrar</button>
+                     <button type="button" class="btn btn-primary" (click)="close()">
+                      {{ "i18n.action.close" | translate | titleCase }}
+                     </button>
                    </div>
                  </div>
               </div>`
diff --git a/Frontend Angular 4/src/app/layout/grupos/calificarEntrega.component.ts b/Frontend Angular 4/src/app/layout/grupos/calificarEntrega.component.ts
index 32bf6ead..d6a6c9cd 100755
--- a/Frontend Angular 4/src/app/layout/grupos/calificarEntrega.component.ts	
+++ b/Frontend Angular 4/src/app/layout/grupos/calificarEntrega.component.ts	
@@ -1,6 +1,7 @@
 import { Component } from '@angular/core';
 import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
 import { Archivo, Evaluacion } from '../../shared/objects/archivo';
+import { TranslateService } from '@ngx-translate/core';
 
 export interface ConfirmModel {
   cedula:string;
@@ -13,26 +14,26 @@ export interface ConfirmModel {
                 <div class="modal-content">
 
                    <div class="modal-header">
-                      <h5 class="modal-title">Calificar entrega</h5> 
+                      <h5 class="modal-title">{{ "i18n.msg.file.qualify" | translate }}</h5> 
                       <button type="button" class="close" (click)="close()" style="margin-left:8px;">&times;</button>
                    </div>
                    
                    <div class="modal-body">
                     <form>                      
                       <div class="form-group">
-                        <label for="message-text" class="form-control-label">Calificacion (1-100):</label>
+                        <label for="message-text" class="form-control-label">{{ "i18n.objet.score" | translate | titleCase }} (1-100):</label>
                         <input type="number" class="form-control" [(ngModel)]="nota" min=1 max=100 [ngModelOptions]="{standalone: true}" >                        
                       </div>
                       <div class="form-group">
-                        <label for="message-text" class="form-control-label">Detalle:</label>
+                        <label for="message-text" class="form-control-label">{{ "i18n.objet.detail" | translate | titleCase }}:</label>
                         <textarea class="form-control" id="message-text" [(ngModel)]="descripcion" [ngModelOptions]="{standalone: true}" ></textarea>
                       </div>
                     </form>
                   </div>
 
                   <div class="modal-footer">
-                    <button type="button" class="btn btn-secondary" (click)="cancel()">Cancelar</button>
-                    <button type="button" class="btn btn-success" (click)="confirm()">Calificar</button>
+                    <button type="button" class="btn btn-secondary" (click)="cancel()">{{ "i18n.action.cancel" | translate | titleCase }}</button>
+                    <button type="button" class="btn btn-success" (click)="confirm()">{{ "i18n.action.qualify" | translate | titleCase }}</button>
                   </div>
 
                  </div>
@@ -43,12 +44,12 @@ export class CalificarEntrega extends DialogComponent<ConfirmModel, boolean> imp
   cedula: string;
   archivo: Archivo;
   nota: number = 1;
-
+  translateService: any;
   parentContext: any;
 
-  constructor(dialogService: DialogService) {
+  constructor(dialogService: DialogService, public translate: TranslateService) {
     super(dialogService);
-    
+    this.translateService = translate;
   }
 
   ngOnInit() {
@@ -67,7 +68,7 @@ export class CalificarEntrega extends DialogComponent<ConfirmModel, boolean> imp
       this.parentContext.haskellService.calificarArchivo(this.archivo.id,evaluacion )
        .subscribe(
         evaluacion => {
-          this.parentContext.notifService.success("Archivo evaluado");
+          this.parentContext.notifService.success(this.translateService.get('i18n.msg.file.evaluated').value);
           this.archivo.evaluacion = evaluacion;
           this.close();
         }, 
@@ -75,7 +76,7 @@ export class CalificarEntrega extends DialogComponent<ConfirmModel, boolean> imp
           this.parentContext.notifService.error(error);
         });
     }else{
-      this.parentContext.notifService.error("Calificacion fuera de rango");
+      this.parentContext.notifService.error(this.translateService.get('i18n.warning.file.qualifyOutRange').value);
     }
   }
 
diff --git a/Frontend Angular 4/src/app/layout/grupos/grupos.component.html b/Frontend Angular 4/src/app/layout/grupos/grupos.component.html
index df1f27cb..d5c0d3d0 100755
--- a/Frontend Angular 4/src/app/layout/grupos/grupos.component.html	
+++ b/Frontend Angular 4/src/app/layout/grupos/grupos.component.html	
@@ -37,7 +37,7 @@
                     <ng-template ngbTabContent>
                         <div class="card">
                             <div>
-                                <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()" ngbPopover="Atras" data-placement="bottom" triggers="mouseenter:mouseleave">
+                                <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()" ngbPopover='{{ "i18n.action.goBack" | translate | titleCase }}' data-placement="bottom" triggers="mouseenter:mouseleave">
                                     <i class="fa fa-arrow-up"></i>
                                 </button>
                                 <p class="pull-right" style="margin-top: -34px; margin-right: 5px;">{{grupoSeleccionado.grado+ '°' + grupoSeleccionado.grupo+" - "+grupoSeleccionado.anio}}</p>
@@ -57,7 +57,7 @@
                     <ng-template ngbTabContent>
                         <div class="card">
                             <div>
-                                <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()"  ngbPopover="Atras" data-placement="bottom" triggers="mouseenter:mouseleave">
+                                <button class="btn btn-sm btn-secondary pull-right" style="cursor: pointer; margin-top: -35px; margin-right: 105px;" (click)="desseleccionarGrupo()"  ngbPopover='{{ "i18n.action.goBack" | translate | titleCase }}' data-placement="bottom" triggers="mouseenter:mouseleave">
                                     <i class="fa fa-arrow-up"></i>
                                 </button>
                                 <p class="pull-right" style="margin-top: -34px; margin-right: 5px;">{{grupoSeleccionado.grado+ '°' + grupoSeleccionado.grupo+" - "+grupoSeleccionado.anio}}</p>
diff --git a/Frontend Angular 4/src/app/layout/grupos/grupos.component.ts b/Frontend Angular 4/src/app/layout/grupos/grupos.component.ts
index 29c81563..4e446845 100755
--- a/Frontend Angular 4/src/app/layout/grupos/grupos.component.ts	
+++ b/Frontend Angular 4/src/app/layout/grupos/grupos.component.ts	
@@ -11,8 +11,7 @@ import { DialogService } from "ng2-bootstrap-modal";
 import { CalificarEntrega } from './calificarEntrega.component';
 import { NgbPopoverConfig, NgbPopover} from '@ng-bootstrap/ng-bootstrap';
 import { NotificacionService } from '../../shared/services/notificacion.service';
-
-
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
 	moduleId: module.id,
@@ -36,6 +35,7 @@ export class GruposComponent {
 	tree: any;
 	directorioActual:any;
 	configCodeMirror = JSON.parse(sessionStorage.getItem('codeMirrorConfig'));
+	translateService: any;
 
 	constructor(
 		private router: Router,
@@ -43,8 +43,10 @@ export class GruposComponent {
 		private haskellService: HaskellService,
 		private notifService: NotificacionService,
 		private sessionService: SessionService,
-		private dialogService:DialogService
+		private dialogService:DialogService,
+		public translate: TranslateService
 		){
+		this.translateService = translate;
 		this.directorioActual = {};
 		this.directorioActual.archivos = [];
 		this.configCodeMirror.readOnly = true;
@@ -164,13 +166,13 @@ export class GruposComponent {
 	cargarArchivoCompartido(){
 		if(this.archivoSeleccionado){
 			if(this.archivoSeleccionado.directorio){
-				this.notifService.warning('No se seleccionó ningún archivo',false);
+				this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value,false);
 			}else{
 				this.sessionService.setArchivo(this.archivoSeleccionado);
 				this.router.navigate(['/matefun']);
 			}
 		}else{
-			this.notifService.warning("Archivo no seleccionado");
+			this.notifService.warning(this.translateService.get('i18n.warning.file.noSelected').value);
 		}
 	}
 
diff --git a/Frontend Angular 4/src/app/layout/matefun/confirm.component.ts b/Frontend Angular 4/src/app/layout/matefun/confirm.component.ts
index f2c1c727..28a84174 100755
--- a/Frontend Angular 4/src/app/layout/matefun/confirm.component.ts	
+++ b/Frontend Angular 4/src/app/layout/matefun/confirm.component.ts	
@@ -16,8 +16,12 @@ export interface ConfirmModel {
                      <p>{{message || ''}}</p>
                    </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-primary" (click)="confirm()">Editar</button>
-                     <button type="button" class="btn btn-default" (click)="close()" >Cancelar</button>
+                     <button type="button" class="btn btn-primary" (click)="confirm()">
+                      {{ "i18n.action.edit" | translate }}
+                     </button>
+                     <button type="button" class="btn btn-default" (click)="close()" >
+                      {{ "i18n.action.cancel" | translate }}
+                     </button>
                    </div>
                  </div>
               </div>`
diff --git a/Frontend Angular 4/src/app/layout/matefun/seleccionarDirectorio.component.ts b/Frontend Angular 4/src/app/layout/matefun/seleccionarDirectorio.component.ts
index 90625e88..68171bcd 100755
--- a/Frontend Angular 4/src/app/layout/matefun/seleccionarDirectorio.component.ts	
+++ b/Frontend Angular 4/src/app/layout/matefun/seleccionarDirectorio.component.ts	
@@ -1,6 +1,8 @@
 import { Component } from '@angular/core';
 import { DialogComponent, DialogService } from "ng2-bootstrap-modal";
 import { Archivo } from '../../shared/objects/archivo';
+import { TranslateService } from '@ngx-translate/core';
+
 export interface ConfirmModel {
   title:string;
   message:string;
@@ -14,13 +16,15 @@ export interface ConfirmModel {
     template: `<div class="modal-dialog" style="margin-top:100px;">
                 <div class="modal-content">
                    <div class="modal-header">
-                     <h6 class="modal-title pull-lefth">¿Dónde quieres crear el archivo?</h6> 
+                     <h6 class="modal-title pull-lefth">
+                      {{ "i18n.msg.file.create" | translate }}
+                     </h6> 
                      <button type="button" class="close" (click)="close()" style="margin-rigth:8px;">&times;</button>
                    </div>
                    <div class="modal-body" style="height:350px;overflow-y: scroll;">
                        <div>
                          <div class="form-group">
-                            <label for="file-name" class="form-control-label">Nombre:</label>
+                            <label for="file-name" class="form-control-label">{{ "i18n.object.name" | translate | titleCase }}:</label>
                             <input type="text" class="form-control" id="file-name" [(ngModel)]="nombre" >
                          </div>
                          <div class="list-group" >
@@ -33,8 +37,12 @@ export interface ConfirmModel {
                         </div>
                      </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-default" (click)="navBack()">Atras</button>
-                     <button type="button" class="btn btn-primary" (click)="confirm()">Crear</button>
+                      <button type="button" class="btn btn-default" (click)="navBack()">
+                        {{ "i18n.action.goBack" | translate | titleCase }}
+                      </button>
+                      <button type="button" class="btn btn-primary" (click)="confirm()">
+                      {{ "i18n.action.create" | translate | titleCase }}
+                      </button>
                    </div>
                  </div>
               </div>`
@@ -46,18 +54,20 @@ export class SeleccionarDirectorioComp extends DialogComponent<ConfirmModel, boo
   directorioActual:any;
   parent:any;
   nombre:string;
+  translateService: any;
 
-  constructor(dialogService: DialogService) {
+  constructor(dialogService: DialogService, public translate: TranslateService) {
     super(dialogService);
+    this.translateService = translate;
   }
   confirm() {
     // we set dialog result as true on click on confirm button, 
     // then we can get dialog result from caller code 
     var regex = /^[A-Z]/
     if(this.nombre==undefined || this.nombre==""){
-        this.parent.notifService.error("Nombre de archivo invalido.");
+        this.parent.notifService.error(this.translateService.get('i18n.warning.file.invalidName').value);
     }else if (!regex.test(this.nombre)){
-        this.parent.notifService.error("Nombre de archivo debe iniciar con mayusula.");
+        this.parent.notifService.error(this.translateService.get('i18n.warning.file.capitalLetter').value);
     }else{
       var archivo:Archivo = new Archivo();
       archivo.cedulaCreador = this.parent.authService.getUser().cedula;
diff --git a/Frontend Angular 4/src/app/shared/modal/confirm.component.ts b/Frontend Angular 4/src/app/shared/modal/confirm.component.ts
index 24b62642..f6c7eb39 100755
--- a/Frontend Angular 4/src/app/shared/modal/confirm.component.ts	
+++ b/Frontend Angular 4/src/app/shared/modal/confirm.component.ts	
@@ -18,8 +18,8 @@ export interface ConfirmModel {
                      <p style="white-space: pre;">{{message || ''}}</p>
                    </div>
                    <div class="modal-footer">
-                     <button type="button" class="btn btn-primary" (click)="confirm()">{{confirmText || 'Confirmar'}}</button>
-                     <button type="button" class="btn btn-default" (click)="close()" >{{cancelText || 'Cancelar'}}</button>
+                     <button type="button" class="btn btn-primary" (click)="confirm()">{{confirmText || "i18n.action.confirm" | translate | titleCase }}</button>
+                     <button type="button" class="btn btn-default" (click)="close()" >{{cancelText || "i18n.action.cancel" | translate | titleCase }}</button>
                    </div>
                  </div>
               </div>`
diff --git a/Frontend Angular 4/src/assets/i18n/en.json b/Frontend Angular 4/src/assets/i18n/en.json
index be5a2179..b17520e9 100644
--- a/Frontend Angular 4/src/assets/i18n/en.json	
+++ b/Frontend Angular 4/src/assets/i18n/en.json	
@@ -14,14 +14,25 @@
             "download": "download",
             "exit" : "exit",
             "order": "order",
-            "edit": "edit",
-            "move": "move",
-            "share": "share"
+            "edit" : "edit",
+            "move" : "move",
+            "share" : "share",
+            "shared" : "shared",
+            "created": "created",
+            "send" : "send",
+            "sent" : "sent",
+            "cancel" : "cancel",
+            "create" : "create",
+            "goBack" : "go back",
+            "close" : "close",
+            "qualify" : "qualify",
+            "confirm" : "confirm"
         },
         "object" : {
             "settings" : "settings",
             "theme" : "theme",
             "name" : "name",
+            "descr" : "description",
             "user" : "user",
             "password" : "password",
             "guest" : "guest",
@@ -38,7 +49,22 @@
             "grid" : "grid",
             "tip" : "tip",
             "normal" : "normal",
-            "quality" : "quality"
+            "quality" : "quality",
+            "folder" : "folder",
+            "here" : "here",
+            "qualification" : "qualification",
+            "date" : "date",
+            "detail" : "detail",
+            "score" : "score"
+        },
+        "codemirror" : {
+            "command" : {
+                "inLine" : "in line",
+                "column" : "column",
+                "inColumn" : "In column",
+                "line" : "line",
+                "outWarning" : "OUTWarning"
+            }
         },
         "msg" : {
             "codemirror" : {
@@ -55,10 +81,40 @@
                 "fileName" : "File name",
                 "preview" : "Select a file to preview",
                 "myFiles" : "My files",
-                "shared" : "Shared",
-                "created": "Created",
                 "readOnly": "Read Only",
-                "viewCalification": "View Calification"
+                "viewCalification": "View Calification",
+                "modified": "Modified file",
+                "toSend" : "Do you want to send the file {{fileName}}?",
+                "toSendInfo" : "The file can't be edited after being sent.",
+                "delete" : "Are you want to delete the {{fileName}} file?",
+                "seeOriginal" : "See original",
+                "seeMine" : "See mine",
+                "share" : "Share &quot;{{fileName}}&quot; with:",
+                "shared" : "Shared file",
+                "move" : "Where do you want to move the file?",
+                "create" : "Where do you want to create the file?",
+                "qualify" : "Qualify the delivered file",
+                "evaluated" : "Evaluated file"
+            },
+            "folder" : {
+                "delete" : "Are you want to delete the {{fileName}} folder?"
+            },
+            "order" : {
+                "kind" : "Kind",
+                "date" : "Date"
+            }
+        },
+        "warning" : {
+            "file" : {
+                "noSelected" : "File not selected",
+                "noPermissionDelete" : "No permissions to delete the file",
+                "noPermissionMove" : "No permissions to move the file",
+                "capitalLetter" : "File name must start with upper case.",
+                "qualifyOutRange" : "Qualification out of range",
+                "invalidName" : "Invalid file name."
+            },
+            "group" : {
+                "select" : "Select a group"
             }
         }
     }
diff --git a/Frontend Angular 4/src/assets/i18n/es.json b/Frontend Angular 4/src/assets/i18n/es.json
index 0ab51896..57bab4c8 100644
--- a/Frontend Angular 4/src/assets/i18n/es.json	
+++ b/Frontend Angular 4/src/assets/i18n/es.json	
@@ -16,11 +16,22 @@
             "order": "ordenar",
             "edit": "editar",
             "move": "mover",
-            "share": "compartir"
+            "share": "compartir",
+            "shared" : "compartidos",
+            "created": "creado",
+            "send" : "enviar",
+            "sent" : "enviado",
+            "cancel" : "cancelar",
+            "create" : "crear",
+            "goBack" : "atrás",
+            "close" : "cerrar",
+            "qualify" : "calificar",
+            "confirm" : "confirmar"
         },
         "object" : {
             "settings" : "configuración",
             "name" : "nombre",
+            "descr" : "descripción",
             "user" : "usuario",
             "theme" : "tema",
             "password" : "contraseña",
@@ -38,7 +49,22 @@
             "grid" : "grilla",
             "tip" : "tip",
             "normal" : "normal",
-            "quality" : "calidad"
+            "quality" : "calidad",
+            "folder" : "carpeta",
+            "here" : "aquí",
+            "qualification" : "calificación",
+            "date" : "fecha",
+            "detail" : "detalle",
+            "score" : "puntaje"
+        },
+        "codemirror" : {
+            "command" : {
+                "inLine" : "en línea",
+                "column" : "columna",
+                "inColumn" : "En columna",
+                "line" : "línea",
+                "outWarning" : "OUTAdvertencia"
+            }
         },
         "msg" : {
             "codemirror" : {
@@ -55,10 +81,40 @@
                 "fileName" : "Nombre de archivo",
                 "preview" : "Seleccione un archivo para previsualizarlo",
                 "myFiles" : "Mis archivos",
-                "shared" : "Compartidos",
-                "created": "Creado",
                 "readOnly": "Sólo lectura",
-                "viewCalification": "Ver Calificación"
+                "viewCalification": "Ver Calificación",
+                "modified": "Archivo modificado",
+                "toSend" : "¿Desea enviar el archivo {{fileName}}?",
+                "toSendInfo" : "No se podrá editar luego de enviado.",
+                "delete" : "¿Está seguro que desea eliminar el archivo {{fileName}}?",
+                "seeOriginal" : "Ver original",
+                "seeMine" : "Ver mio",
+                "share" : "Compartir &quot;{{fileName}}&quot; con:",
+                "shared" : "Archivo compartido",
+                "move" : "¿Dónde quieres mover el archivo?",
+                "create" : "¿Dónde quieres crear el archivo?",
+                "qualify" : "Calificar entrega",
+                "evaluated" : "Archivo evaluado"
+            },
+            "folder" : {
+                "delete" : "¿Está seguro que desea eliminar la carpeta {{fileName}}?"
+            },
+            "order" : {
+                "kind" : "Tipo",
+                "date" : "Fecha"
+            }
+        },
+        "warning" : {
+            "file" : {
+                "noSelected" : "Archivo no seleccionado",
+                "noPermissionDelete" : "Sin permisos para eliminar el archivo",
+                "noPermissionMove" : "Sin permisos para mover el archivo",
+                "capitalLetter" : "Nombre de archivo debe iniciar con mayúscula.",
+                "qualifyOutRange" : "Calificación fuera de rango",
+                "invalidName" : "Nombre de archivo inválido."
+            },
+            "group" : {
+                "select" : "Seleccione un grupo"
             }
         }
     }
-- 
GitLab