diff --git a/Frontend Angular 4/src/app/app-routing.module.ts b/Frontend Angular 4/src/app/app-routing.module.ts
index d3972a1895d806d37dbf2b6e7144d2ba5cd13092..156d589f48464848a8055c844f475703b85c56d0 100755
--- a/Frontend Angular 4/src/app/app-routing.module.ts	
+++ b/Frontend Angular 4/src/app/app-routing.module.ts	
@@ -5,13 +5,15 @@ import { AuthGuard } from './shared/guards/auth.guard';
 
 const routes: Routes = [
     { path: '', loadChildren: './layout/layout.module#LayoutModule', canActivate: [AuthGuard] },
-    { path: 'login', loadChildren: './login/login.module#LoginModule' },
+    { path: 'login', loadChildren: './login/login.module#LoginModule', data: { language: navigator.language && (navigator.language.split('-')[0] == 'es' || navigator.language.split('-')[0] == 'en') ? navigator.language.split('-')[0] : 'es' }},
+    { path: 'es/login', loadChildren: './login/login.module#LoginModule', data: { language: 'es' }},
+    { path: 'en/login', loadChildren: './login/login.module#LoginModule', data: { language: 'en' }},
     { path: 'not-found', loadChildren: './not-found/not-found.module#NotFoundModule' },
     { path: '**', redirectTo: 'not-found' }
 ];
 
 @NgModule({
-    imports: [RouterModule.forRoot(routes, { useHash: true })],
+    imports: [RouterModule.forRoot(routes)],
     exports: [RouterModule]
 })
 export class AppRoutingModule { }
diff --git a/Frontend Angular 4/src/app/layout/layout.component.ts b/Frontend Angular 4/src/app/layout/layout.component.ts
index d2220813e06643d2f57b1ed042ffe59b25475de2..48be054b8897a9bf3ac376f28053be9675770956 100755
--- a/Frontend Angular 4/src/app/layout/layout.component.ts	
+++ b/Frontend Angular 4/src/app/layout/layout.component.ts	
@@ -11,10 +11,14 @@ import { TranslateService } from '@ngx-translate/core';
     providers: [GHCIService]
 })
 export class LayoutComponent implements OnInit {
-    constructor(public router: Router, public translate: TranslateService) { }
+    translateService: any;
+
+    constructor(public router: Router, public translate: TranslateService) {
+        this.translateService = translate;
+    }
     ngOnInit() {
         if (this.router.url === '/') {
-            this.router.navigate(['/login']);
+            this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
         }
     }
 }
diff --git a/Frontend Angular 4/src/app/login/login.component.html b/Frontend Angular 4/src/app/login/login.component.html
index 51805f4cb963e74ab629a71c6d860870b45656a4..017b14f3790d89990c5ad6b58d28725d824578cb 100755
--- a/Frontend Angular 4/src/app/login/login.component.html	
+++ b/Frontend Angular 4/src/app/login/login.component.html	
@@ -17,7 +17,7 @@
                             class="form-control input-underline input-lg"
                             placeholder='{{ "i18n.object.password" | translate | titleCase }}'>
                     </div>
-                    <div class="form-group" style="margin-bottom: 0px; text-align: left;">
+                    <!-- <div class="form-group" style="margin-bottom: 0px; text-align: left;">
                         <div ngbDropdown class="d-inline-block language-switcher">
                             <button class="btn btn-outline-secondary" id="input-lang" ngbDropdownToggle>
                                 <span class="flag-icon flag-icon-{{model.language.flagCode}}"></span>
@@ -34,7 +34,7 @@
                                 </div>
                             </div>
                         </div>
-                     </div>
+                     </div> -->
                 </div>
 
                 <a class="btn rounded-btn" style="background: transparent;color: white;cursor: pointer;width: 159px;margin-right: 3px;" (click)=login()> {{ "i18n.action.login" | translate | titleCase }} </a>
diff --git a/Frontend Angular 4/src/app/login/login.component.ts b/Frontend Angular 4/src/app/login/login.component.ts
index d7a6dd2e8488b9c9db6b3e18255f92f0258b3a22..c641ebe041895ad86889ce673c315c462b71903f 100755
--- a/Frontend Angular 4/src/app/login/login.component.ts	
+++ b/Frontend Angular 4/src/app/login/login.component.ts	
@@ -33,15 +33,21 @@ export class LoginComponent implements OnInit {
         private router: Router,
         private sessionService: SessionService,
         private authenticationService: AuthenticationService,
-        public translate: TranslateService
+        public translate: TranslateService,
         ) { }
 
     ngOnInit() {
-        let currentSession = sessionStorage.getItem("currentUser"); 
-        let langCode = currentSession ? JSON.parse(currentSession).language : 'es';
-        if (langCode) {
-            this.model.language = this.getLanguageElementByCode(langCode);
-        }
+        console.log('this.route', this.route.snapshot.data['language']);
+        console.log('return', this.route.snapshot.queryParams['returnUrl']);
+        
+        // let currentSession = sessionStorage.getItem("currentUser"); 
+        // let langCode = currentSession ? JSON.parse(currentSession).language : 'es';
+        // if (langCode) {
+        //     this.model.language = this.getLanguageElementByCode(langCode);
+        // }
+
+        this.model.language = this.getLanguageElementByCode(this.route.snapshot.data['language']);
+        this.translate.use(this.model.language.code);
 
         // reset login status
         this.authenticationService.logout();
diff --git a/Frontend Angular 4/src/app/not-found/not-found-routing.module.ts b/Frontend Angular 4/src/app/not-found/not-found-routing.module.ts
index ee86f4ae06cb43ea36f9447389b068f566762723..133041372a69540a681b147cf59f5a6e102a5d7b 100755
--- a/Frontend Angular 4/src/app/not-found/not-found-routing.module.ts	
+++ b/Frontend Angular 4/src/app/not-found/not-found-routing.module.ts	
@@ -7,7 +7,9 @@ const routes: Routes = [
 ];
 
 @NgModule({
-  imports: [RouterModule.forChild(routes)],
+  imports: [
+    RouterModule.forChild(routes)
+  ],
   exports: [RouterModule]
 })
 export class NotFoundRoutingModule {
diff --git a/Frontend Angular 4/src/app/not-found/not-found.component.html b/Frontend Angular 4/src/app/not-found/not-found.component.html
index 10f68541474d3c6853f3644cb1c00486ea8f0aeb..2a83fc700b304fc47ac61cc168bb3cc1540d2628 100755
--- a/Frontend Angular 4/src/app/not-found/not-found.component.html	
+++ b/Frontend Angular 4/src/app/not-found/not-found.component.html	
@@ -1,10 +1,12 @@
 <div class="welcome-page">
     <div class="row">
         <div class="col-md-10 push-md-1">
-            <h1>404 - Page Not Found</h1>
-            <p class="lead">This page does not exist</p>
+            <h1>404 - {{ "i18n.msg.404.title" | translate }}</h1>
+            <p class="lead">{{ "i18n.msg.404.descrp" | translate }}</p>
             <p class="lead">
-                <a class="btn rounded-btn" [routerLink]="['/login']">Restart</a>
+                <a class="btn rounded-btn" [routerLink]="[urlLogin]">
+                    {{ "i18n.msg.404.return" | translate }}
+                </a>
             </p>
         </div>
     </div>
diff --git a/Frontend Angular 4/src/app/not-found/not-found.component.ts b/Frontend Angular 4/src/app/not-found/not-found.component.ts
index 00d72a9cfdfa39fefc5054171b4f208acb2a9f7d..54cced5d3f2f6a8ac9261843c2571a521b2cd972 100755
--- a/Frontend Angular 4/src/app/not-found/not-found.component.ts	
+++ b/Frontend Angular 4/src/app/not-found/not-found.component.ts	
@@ -1,8 +1,17 @@
 import { Component } from '@angular/core';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
     selector: 'app-not-found',
     templateUrl: './not-found.component.html',
     styleUrls: ['not-found.component.scss']
 })
-export class NotFoundComponent { }
+export class NotFoundComponent { 
+    translateService: any;
+    urlLogin: string;
+
+    constructor(public translate: TranslateService) {
+        this.translateService = translate;
+        this.urlLogin = '/'+this.translateService.get('i18n.code').value+'/login';
+    }
+}
diff --git a/Frontend Angular 4/src/app/not-found/not-found.module.ts b/Frontend Angular 4/src/app/not-found/not-found.module.ts
index 719e5be364cd0d066c51393c6538fb0438cc1727..61813330677e9083ba3e6de917a830d99d64b2d8 100755
--- a/Frontend Angular 4/src/app/not-found/not-found.module.ts	
+++ b/Frontend Angular 4/src/app/not-found/not-found.module.ts	
@@ -1,11 +1,12 @@
 import { NgModule } from '@angular/core';
 import { RouterModule } from '@angular/router';
-
+import { I18nModule } from '../shared/modules/translate/i18n.module';
 import { NotFoundComponent } from './not-found.component';
 import { NotFoundRoutingModule } from './not-found-routing.module';
 
 @NgModule({
     imports: [
+        I18nModule,
         NotFoundRoutingModule,
         RouterModule
     ],
diff --git a/Frontend Angular 4/src/app/shared/components/header/header.component.ts b/Frontend Angular 4/src/app/shared/components/header/header.component.ts
index e99dc7b74f19f6a18912174562d7c44124a15597..5479ed5affb1f818fd181a928051a2dcf906fb5a 100755
--- a/Frontend Angular 4/src/app/shared/components/header/header.component.ts	
+++ b/Frontend Angular 4/src/app/shared/components/header/header.component.ts	
@@ -4,6 +4,7 @@ import { AuthenticationService } from '../../services/authentication.service';
 import { SessionService } from '../../services/session.service';
 import { GHCIService } from '../../services/ghci.service';
 import { Usuario } from '../../objects/usuario';
+import { TranslateService } from '@ngx-translate/core';
 
 @Component({
     selector: 'app-header',
@@ -12,11 +13,14 @@ import { Usuario } from '../../objects/usuario';
 })
 export class HeaderComponent implements OnInit {
     usuario: Usuario;
+    translateService: any;
     constructor(
         private authService: AuthenticationService, 
         private router : Router, 
         private sessionService : SessionService,
-        private ghciService : GHCIService) {
+        private ghciService : GHCIService,
+        public translate: TranslateService) {
+        this.translateService = translate;
         this.usuario = authService.getUser();
     }
     ngOnInit() {}
@@ -34,6 +38,6 @@ export class HeaderComponent implements OnInit {
     logout(){
         this.sessionService.reset();
         this.ghciService.desconectarWS();
-        this.router.navigate(['/login']);
+        this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
     }
 }
diff --git a/Frontend Angular 4/src/app/shared/guards/auth.guard.ts b/Frontend Angular 4/src/app/shared/guards/auth.guard.ts
index 22a684d1c5e31bd9468cf58d13bbb0a4fedf1f7d..ff9416ba0c888e460bf9bca24d4476d7a83b3cce 100755
--- a/Frontend Angular 4/src/app/shared/guards/auth.guard.ts	
+++ b/Frontend Angular 4/src/app/shared/guards/auth.guard.ts	
@@ -1,12 +1,14 @@
 import { Injectable } from '@angular/core';
 import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
 import { Observable } from 'rxjs/Observable';
+import { TranslateService } from '@ngx-translate/core';
 
 @Injectable()
 export class AuthGuard implements CanActivate {
+  translateService: any;
 
-	constructor(private router: Router){
-
+	constructor(private router: Router, public translate: TranslateService){
+    this.translateService = translate;
 	}
 
   canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
@@ -14,7 +16,7 @@ export class AuthGuard implements CanActivate {
     if(sessionStorage.getItem('currentUser')){
     	return true;
     }
-    this.router.navigate(['/login']);
+    this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
     return false;
   }
 }
\ No newline at end of file
diff --git a/Frontend Angular 4/src/app/shared/services/ghci.service.ts b/Frontend Angular 4/src/app/shared/services/ghci.service.ts
index 2442c58c56986db22a46a4c72ce7451d0eaefeb6..86c757f0b81a5bf390bae5bd71f3c1198869a828 100755
--- a/Frontend Angular 4/src/app/shared/services/ghci.service.ts	
+++ b/Frontend Angular 4/src/app/shared/services/ghci.service.ts	
@@ -4,7 +4,7 @@ import { Observable, Subject } from 'rxjs/Rx';
 import { WebsocketService } from './websocket.service';
 import { AuthenticationService } from './authentication.service';
 import { GHCI_URL } from '../config';
-
+import { TranslateService } from '@ngx-translate/core';
 
 declare var $:any;
 declare var that :any ;
@@ -29,12 +29,14 @@ export class GHCIService {
 	private warningText :string = "";
 	private lastError : number = -1;
 	private lastWarning :number = -1;
+    translateService: any;
 
 	private console_error_class : string = "jqconsole-asd";
 
 	consoleBuffer = [];
 
-	constructor(private authService:AuthenticationService,private router: Router){
+	constructor(private authService:AuthenticationService,private router: Router, public translate: TranslateService){
+		this.translateService = translate;
 		console.log("contructor ghci");
 		this.conectarWS(GHCI_URL, authService.getUser().cedula, authService.getToken(), authService.getLanguage());
 		setInterval( this.checkConnection.bind(this), 5000);	
@@ -89,7 +91,7 @@ export class GHCIService {
 			this.connection.onclose = function(reason){
 				//Codigo que indica la falta de permisos (sesion expirada por ejemplo)
 				if(reason.code == 1008){
-					this.router.navigate(['/login']);
+					this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
 				}
 				console.log('Conexión con web socket cerrada',reason);
 			}.bind(this)
diff --git a/Frontend Angular 4/src/app/shared/services/haskell.service.ts b/Frontend Angular 4/src/app/shared/services/haskell.service.ts
index d30b27dbd0ce9f2a21f06d4799df684765ff8259..0d4a3cf3c2b4f6b0b66e7b1eac104904edaab512 100755
--- a/Frontend Angular 4/src/app/shared/services/haskell.service.ts	
+++ b/Frontend Angular 4/src/app/shared/services/haskell.service.ts	
@@ -6,20 +6,26 @@ import { Archivo, Evaluacion } from '../objects/archivo';
 import { Grupo } from '../objects/grupo';
 
 import { SERVER } from '../config';
-
+import { TranslateService } from '@ngx-translate/core';
 import { AuthenticationService } from './authentication.service';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/catch';
 
 @Injectable()
 export class HaskellService {
+  translateService: any;
 
   /**
    * Creates a new HaskellService with the injected Http.
    * @param {Http} http - The injected Http.
    * @constructor
    */
-   constructor(private http: Http, private router: Router, private authService: AuthenticationService) {}
+   constructor(
+      private http: Http, private router: Router,
+      private authService: AuthenticationService,
+      public translate: TranslateService) {
+    this.translateService = translate;
+   }
 
    getArchivos(cedula:string): Observable<Archivo[]> {
      let headers = new Headers({ 'Content-Type': 'application/json', 'Authorization':'Bearer '+this.authService.getToken() });
@@ -111,7 +117,7 @@ export class HaskellService {
     */
     private handleError (error: any) {
       if(error.status == 401){
-        this.router.navigate(['/login']);
+        this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
       }
       // In a real world app, we might use a remote logging infrastructure
       // We'd also dig deeper into the error to get a better message
diff --git a/Frontend Angular 4/src/app/shared/services/usuario.service.ts b/Frontend Angular 4/src/app/shared/services/usuario.service.ts
index 3c65e92f443e5864d0700db499102f66f2ce2f89..0d2d7c90db70f2df0b5ccc5407fef7cc9c71f236 100755
--- a/Frontend Angular 4/src/app/shared/services/usuario.service.ts	
+++ b/Frontend Angular 4/src/app/shared/services/usuario.service.ts	
@@ -3,7 +3,7 @@ import { Router } from '@angular/router';
 import { Http, Headers, Response, RequestOptions } from '@angular/http';
 import { Observable } from 'rxjs/Observable';
 import { Usuario, Configuracion } from '../objects/usuario';
-
+import { TranslateService } from '@ngx-translate/core';
 import { AuthenticationService } from './authentication.service';
 import 'rxjs/add/operator/map'
 import 'rxjs/add/operator/catch'
@@ -12,7 +12,14 @@ import { SERVER } from '../config';
 
 @Injectable()
 export class UsuarioService {
-    constructor(private http: Http, private router: Router, private authService: AuthenticationService) {}
+    translateService: any;
+
+    constructor(
+        private http: Http, private router: Router,
+        private authService: AuthenticationService,
+        public translate: TranslateService) {
+            this.translateService = translate;
+        }
 
     actualizarConfiguracion(cedula: string, config: Configuracion) {
         let headers = new Headers({ 'Content-Type': 'application/json', 'Authorization':'Bearer '+this.authService.getToken()  });
@@ -29,7 +36,7 @@ export class UsuarioService {
 
     private handleError(error: any) {
         if(error.status == 401){
-            this.router.navigate(['/login']);
+            this.router.navigate(['/'+this.translateService.get('i18n.code').value+'/login']);
         }
         let errMsg = (error.message) ? error.message :
             error.status ? `${error.status} - ${error.statusText}` : 'Server error';
diff --git a/Frontend Angular 4/src/assets/i18n/en.json b/Frontend Angular 4/src/assets/i18n/en.json
index f8d6d324b50a310317566da41ebf971cc2e949bb..87fb427ef1a4d2abd1aa01ab84dc88d809367abf 100644
--- a/Frontend Angular 4/src/assets/i18n/en.json	
+++ b/Frontend Angular 4/src/assets/i18n/en.json	
@@ -1,5 +1,6 @@
 {
     "i18n" : {
+        "code" : "en",
         "action" : {
             "login" : "login",
             "new" : "new",
@@ -68,6 +69,11 @@
             }
         },
         "msg" : {
+            "404" : {
+                "title": "Page Not Found",
+                "descrp": "Sorry, this page does not exist.",
+                "return": "Return"
+            },
             "codemirror" : {
                 "fontSize" : "Font Size",
                 "functionWarnings": "Show warnings of use of functions",
diff --git a/Frontend Angular 4/src/assets/i18n/es.json b/Frontend Angular 4/src/assets/i18n/es.json
index f13b7b154cf12586d9cbb17af726f6b6b6bfbd43..3365760bd658978a9bbca49b156fed6adf642fb2 100644
--- a/Frontend Angular 4/src/assets/i18n/es.json	
+++ b/Frontend Angular 4/src/assets/i18n/es.json	
@@ -1,5 +1,6 @@
 {
     "i18n" : {
+        "code" : "es",
         "action" : {
             "login" : "iniciar sesión",
             "new" : "nuevo",
@@ -68,6 +69,11 @@
             }
         },
         "msg" : {
+            "404" : {
+                "title": "Página no encontrada",
+                "descrp": "Lo sentimos, esta páina no existe.",
+                "return": "Volver"
+            },
             "codemirror" : {
                 "fontSize" : "Tamaño de fuente",
                 "functionWarnings": "Mostrar advertencias de uso de funciones",