diff --git a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.html b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.html
index e882a923967cdd1a0ad585f7ee7040bc8dbe92ea..ebbaeb876c7b511198cacfcfeff7e1b1fcd9aa02 100644
--- a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.html	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.html	
@@ -5,8 +5,7 @@
 				type="button" 
 				class="btn btn-secondary"
 				style="min-width: 70px;"
-				(click)=changeZoomType()
-			>
+				(click)=changeZoomType()>
 				{{getZoom3DTypeName(graphProps.zoomType)}}
 			</button>
 			<div class="btn-group" ngbDropdown role="group" aria-label="Button group with nested dropdown">
@@ -16,8 +15,7 @@
 						*ngFor="let type of [1,2,3,4]" 
 						class="dropdown-item"
 						[disabled]="type === graphProps.zoomType"
-						(click)=changeZoomType(type)
-					>
+						(click)=changeZoomType(type)>
 						{{getZoom3DTypeName(type)}}
 					</button>
 				</div>
@@ -25,32 +23,29 @@
 		</div> 
 
 		<button 
-			ngbPopover="Zoom +"  
+			ngbPopover='{{ "i18n.action.zoom" | translate | titleCase}} +' 
 			triggers="mouseenter:mouseleave" 
 			data-placement="bottom" 
 			class="btn btn-sm btn-secondary" 
-			(click)=zoomIn() 
-		>
+			(click)=zoomIn() >
 			<i class="fa fa-plus"></i>
 		</button>
 
 		<button 
-			ngbPopover="Zoom -"  
+			ngbPopover='{{ "i18n.action.zoom" | translate | titleCase}} -'  
 			triggers="mouseenter:mouseleave" 
 			data-placement="bottom" 
 			class="btn btn-sm btn-secondary" 
-			(click)=zoomOut() 
-		>
+			(click)=zoomOut() >
 			<i class="fa fa-minus"></i>
 		</button>
 
 		<button 
-			ngbPopover="Centrar"  
+			ngbPopover='{{ "i18n.action.center" | translate | titleCase}}'  
 			triggers="mouseenter:mouseleave" 
 			data-placement="bottom" 
 			class="btn btn-sm btn-secondary" 
-			(click)=center() 
-		>
+			(click)=center() >
 			<i class="fa fa-arrows"></i>
 		</button>
 
@@ -61,8 +56,7 @@
 			[ngbPopover]=popoverAxesSize
 			popoverTitle="Rango de ejes"
 			#popover="ngbPopover"
-			tiggers="click"
-		>
+			tiggers="click">
 			<i class="fa fa-arrows-h"></i>
 		</button>
 		<ng-template #popoverAxesSize>
@@ -140,12 +134,11 @@
 		
 
 		<button 
-			ngbPopover="Borrar"  
+			ngbPopover='{{ "i18n.action.delete" | translate | titleCase }}'  
 			triggers="mouseenter:mouseleave" 
 			data-placement="bottom" 
 			class="btn btn-sm btn-secondary" 
-			(click)=clear() 
-		>
+			(click)=clear() >
 			<i class="fa fa-trash"></i>
 		</button>
 
@@ -155,7 +148,7 @@
 			placement="bottom" 
 			tiggers="click"
 			class="btn btn-sm btn-secondary" 
-			popoverTitle="Configuración"
+			popoverTitle='{{ "i18n.object.settings" | translate | titleCase }}'
 		>
 			<i class="fa fa-gear"></i>
 		</button>
@@ -164,12 +157,12 @@
 			<div style="width: 140px;">
 				<label class="d-block">
 					<input type="checkbox"[checked]=graphProps.showAxes (click)="changeAxesVisibility()">
-					Mostrar grilla
+					{{ "i18n.object.grid" | translate | titleCase }}
 				</label>
 
 				<div style="display: flex;">
 					<span style="margin-right: 8px; align-self: center;">
-						Quality:
+						{{ "i18n.object.quality" | translate | titleCase }}:
 					</span>
 
 					<input 
diff --git a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.ts b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.ts
index c41ac45244cadfb9661d4accbac62443cc067abe..1497584f994f1f2b41d24bb7505eba2f9728cd84 100644
--- a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.component.ts	
@@ -2,6 +2,8 @@ import { Component, OnInit, ViewChild, ElementRef, NgZone, AfterViewInit } from
 import * as graph3DLib from 'graph3D';
 import { GHCIService } from '../../../shared/services/ghci.service';
 import { formatJSON, AnimationProps, Zoom3DType, GraphProps, Default_GraphProps, debounce } from './graph3D.helper';
+import { TranslateService } from '@ngx-translate/core';
+import { TitleCasePipe } from '../../../shared/pipes/titlecase.pipe';
 
 @Component({
   selector: 'graph3d-component',
@@ -15,6 +17,9 @@ export class Graph3DComponent implements AfterViewInit {
 
   private ghciServiceSub: any;
 
+  private translateService: any;
+  private titlecasePipe: any;
+
   @ViewChild('graph3DElement') 
   private graph3DRef: ElementRef;
 
@@ -27,9 +32,13 @@ export class Graph3DComponent implements AfterViewInit {
     speed: 1000
   };
   
-  constructor(ghciService: GHCIService, private zone: NgZone) {
+  constructor(ghciService: GHCIService, private zone: NgZone, public translate: TranslateService) {
     const self = this;
 
+    // i18n
+    this.translateService = translate;
+    this.titlecasePipe = new TitleCasePipe();
+
     this.ghciServiceSub = ghciService.messages.subscribe(
       message => {
         if (message.tipo == "canvas3D") {
@@ -177,13 +186,13 @@ export class Graph3DComponent implements AfterViewInit {
   public getZoom3DTypeName = (type: Zoom3DType) => {
     switch (type) {
       case Zoom3DType.Normal:
-        return 'Normal';
+        return this.titlecasePipe.transform(this.translateService.get('i18n.object.normal').value);
       case Zoom3DType.XAxis:
-        return 'Eje x';
+        return this.titlecasePipe.transform(this.translateService.get('i18n.object.axis').value) + ' x';
       case Zoom3DType.YAxis:
-        return 'Eje y';
+        return this.titlecasePipe.transform(this.translateService.get('i18n.object.axis').value) + ' y';
       case Zoom3DType.ZAxis:
-        return 'Eje z';
+        return this.titlecasePipe.transform(this.translateService.get('i18n.object.axis').value) + ' z';
     }
   }
 }
diff --git a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.module.ts b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.module.ts
index 21c2517ff2a4c824ad335e8b2f6fe0730301fafe..d39268b5571eb8fc49ce764dedb871ac7d40115e 100644
--- a/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.module.ts	
+++ b/Frontend Angular 4/src/app/layout/plotter/graph3D/graph3D.module.ts	
@@ -6,10 +6,19 @@ import { FormsModule } from '@angular/forms';
 import { Graph3DComponent } from './graph3D.component';
 import { AnimationControlComponent } from '../animation-control/animation-control.component';
 import { DirectivesModule } from '../../../shared/directives/directives.module';
-
+import { I18nModule } from '../../../shared/modules/translate/i18n.module';
+import { TitleCaseModule } from '../../../shared/modules/titlecase.module';
 
 @NgModule({
-    imports: [FormsModule, RouterModule, CommonModule, NgbModule, DirectivesModule],
+    imports: [
+        FormsModule,
+        RouterModule,
+        CommonModule,
+        NgbModule,
+        DirectivesModule,
+        I18nModule,
+        TitleCaseModule
+    ],
     declarations: [
         AnimationControlComponent, 
         Graph3DComponent