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 d02e130fb6e47db8a7aca592c2a6795604985517..0b99729c18ba1e81d76ce9eb48d1b4cc31520eb4 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}} - - {{ "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 9e96a7d55cfc39856540c3694f1f05377a443653..f0418ad543c4971e936584707039f2de3845184e 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 02b5187edc781c1f383b9887da049e1cc53e6210..9b9c97a0a50ef9c69585ab7a21b9c52548b87534 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 "{{archivo.nombre}}" 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;">×</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 76a437deb74dbbc4cc2fb1b7ad926aa3e24e80af..d7de4a51d23a317b56fee16e9f4745d3f3a941a6 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;">×</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 d51363e99c4abb73e8d37bfed3804858bab34ed0..4855856cc3d085621ee85dd39d96256128ba19e8 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;">×</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 9ca43a236fd7d186c80f8a4a36451e61485ec3c6..72b148900b520c656dd2ded5f06a7f6df7aa4cf1 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;">×</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 d8a438dee6482b284204af452ee57aa593478bb3..41be288d6b385f9b3cd2ebb9057bed178d93c62c 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 "{{archivo.nombre}}":</h6> + <h6 class="modal-title pull-lefth"> + {{ "i18n.object.qualification" | translate | titleCase }} "{{archivo.nombre}}": + </h6> <button type="button" class="close" (click)="close()" style="margin-rigth:8px;">×</button> </div> <div class="modal-body"> <div> - <label><b>Fecha: </b></label> {{archivo.evaluacion.fecha | date}}<br> - <label><b>Nota (1-100): </b></label> {{archivo.evaluacion.nota}}<br> - <label><b>Detalle: </b></label> {{archivo.evaluacion.descripcion}} + <label><b>{{ "i18n.object.date" | translate | titleCase }}: </b></label> {{archivo.evaluacion.fecha | date}}<br> + <label><b>{{ "i18n.objet.score" | translate | titleCase }} (1-100): </b></label> {{archivo.evaluacion.nota}}<br> + <label><b>{{ "i18n.object.detail" | translate | titleCase }}: </b></label> {{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 32bf6eade13def9868c8aefd232451d909a4df76..d6a6c9cd4d28571674858ba1b947529bd86651b7 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;">×</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 df1f27cb7efa30b930059138b30056a442b95b64..d5c0d3d0c866b50bd853d5450cd4864b5ac07bb9 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 29c81563d73cb8267e939a82904111d691e3a44c..4e4468458ff3cc4715e686a81f745daf90165a66 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 f2c1c727ed9168f37172b43190eca8766b7f072d..28a8417448f4ad680e01831634005bfa64ac6030 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 90625e8808784168852459fff0454f3ad6181bce..68171bcd86841763b736d3819dfffd935e9fa275 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;">×</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 24b626427aa060c9faedd0e68e469f7dc5c628cc..f6c7eb39d14e40c1c889e6b6356eb1876c147fea 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 be5a2179b4ffd8ed2c6611948e3d85d2ac37fb72..b17520e99da90e36a4c68c47d5e9ddf78c734b1f 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 "{{fileName}}" 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 0ab51896a713bfee94e44e8a045eda7d6aea7964..57bab4c88684168a9507744abd2ef1d92cb82245 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 "{{fileName}}" 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" } } }