Incluir Mas traducciones y ajuste al consumo de rss

This commit is contained in:
Cesar Mendivil 2024-10-16 16:51:06 -07:00
parent a6b71625ec
commit 9ad24b7935
14 changed files with 239 additions and 85 deletions

View File

@ -16,8 +16,6 @@ module.exports = {
defaultLanguage: `es`, defaultLanguage: `es`,
// option to redirect to `/ko` when connecting `/` // option to redirect to `/ko` when connecting `/`
redirect: true, redirect: true,
// Utilizar la URL del recurso JSON de idioma desde las variables de entorno
remoteJsonUrl: `http://localhost:8000/data/language/languages.json`,
}, },
}, },
{ {
@ -28,7 +26,7 @@ module.exports = {
parserOption: { parserOption: {
customFields: { customFields: {
channel: ['title', 'description', 'link', 'image', 'generator', 'lastBuildDate', 'copyright', 'language', 'ttl'], channel: ['title', 'description', 'link', 'image', 'generator', 'lastBuildDate', 'copyright', 'language', 'ttl'],
item: ['title', 'description', 'link', 'guid', 'pubDate', 'media','thumbnail','url','attrs'], // Campos personalizados si el feed tiene elementos adicionales item: ['title', 'description', 'link', 'guid', 'pubDate', 'media:thumbnail'], // Campos personalizados si el feed tiene elementos adicionales
}, },
}, },
}, },

View File

@ -1,10 +1,15 @@
import React, { useEffect, useRef } from 'react'; import React, { useEffect, useRef,useContext, useState } from 'react';
import navbarScrollEffect from "common/navbarScrollEffect"; import navbarScrollEffect from "common/navbarScrollEffect";
import scrollToSection from 'common/scrollToSection'; import scrollToSection from 'common/scrollToSection';
import LanguageSelector from '../LanguageSelector/LanguageSwitcher'; import LanguageSelector from '../LanguageSelector/LanguageSwitcher';
import api from '../../../common/api';
import translationService from '../../../common/translationService';
import { LanguageContext } from '../../../context/LanguageContext';
const OnePageNav = () => { const OnePageNav = () => {
const navbarRef = useRef(null); const navbarRef = useRef(null);
const { currentLanguage } = useContext(LanguageContext);
const [navbarData, setNavBarData] = useState([]);
useEffect(() => { useEffect(() => {
navbarScrollEffect(navbarRef.current); navbarScrollEffect(navbarRef.current);
@ -29,6 +34,19 @@ const OnePageNav = () => {
}); });
}, []); }, []);
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('navbardata', 'navbar.json');
setNavBarData(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, [],[currentLanguage]);
const handleMouseMove = (event) => { const handleMouseMove = (event) => {
const dropDownToggler = event.target.classList.contains('dropdown-toggle') ? event.target : event.target.querySelector('.dropdown-toggle'); const dropDownToggler = event.target.classList.contains('dropdown-toggle') ? event.target : event.target.querySelector('.dropdown-toggle');
const dropDownMenu = dropDownToggler?.nextElementSibling; const dropDownMenu = dropDownToggler?.nextElementSibling;
@ -61,37 +79,37 @@ const OnePageNav = () => {
<ul className="navbar-nav m-auto mb-2 mb-lg-0 text-uppercase"> <ul className="navbar-nav m-auto mb-2 mb-lg-0 text-uppercase">
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="1" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="1" onClick={scrollToSection}>
testimonials {translationService.getTranslation(navbarData,'testimonials', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="2" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="2" onClick={scrollToSection}>
services {translationService.getTranslation(navbarData,'services', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="3" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="3" onClick={scrollToSection}>
about us {translationService.getTranslation(navbarData,'about_us', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="4" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="4" onClick={scrollToSection}>
portfolio {translationService.getTranslation(navbarData,'portfolio', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="5" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="5" onClick={scrollToSection}>
pricing {translationService.getTranslation(navbarData,'pricing', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="6" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="6" onClick={scrollToSection}>
team {translationService.getTranslation(navbarData,'team', currentLanguage)}
</a> </a>
</li> </li>
<li className="nav-item"> <li className="nav-item">
<a className="nav-link" data-scroll-nav="7" onClick={scrollToSection}> <a className="nav-link" data-scroll-nav="7" onClick={scrollToSection}>
blog {translationService.getTranslation(navbarData,'blog', currentLanguage)}
</a> </a>
</li> </li>
</ul> </ul>

View File

@ -27,7 +27,7 @@ const About = () => {
<section className="about section-padding style-3" data-scroll-index="3"> <section className="about section-padding style-3" data-scroll-index="3">
<div className="top-content"> <div className="top-content">
<div className="img img-left"> <div className="img img-left">
<img src="/assets/img/about/style_3_1.png" alt="" /> <img src="/assets/img/about/style_3_1.png" alt="" className="lg-circle"/>
{ {
dataAbout.numbers.map((number, index) => ( dataAbout.numbers.map((number, index) => (
<div className="info-circle" key={index}> <div className="info-circle" key={index}>

View File

@ -1,23 +1,42 @@
import React from 'react'; import React, {useContext, useEffect, useState} from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import { LanguageContext } from '../../context/LanguageContext';
import api from '../../common/api';
import translationService from '../../common/translationService';
const ChatBanner = () => { const ChatBanner = () => {
const { currentLanguage } = useContext(LanguageContext);
const [chatsData, setChatsData] = useState({chatsbanner:[]});
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('chatsdata', 'chatbanner.json');
setChatsData(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, [],[currentLanguage]);
return ( return (
<section className="chat-banner style-3 section-padding"> <section className="chat-banner style-3 section-padding">
<div className="container"> <div className="container">
<div className="row align-items-center"> <div className="row align-items-center">
<div className="col-lg-7"> <div className="col-lg-7">
<div className="info"> <div className="info">
<h3>Assess Your Business Potentials Now & Find Opportunities For <span>Bigger Success</span></h3> <h3>{translationService.getTranslation(chatsData.chatsbanner, 'title1',currentLanguage)} <span>{translationService.getTranslation(chatsData.chatsbanner, 'title2',currentLanguage)}</span></h3>
</div> </div>
</div> </div>
<div className="col-lg-5"> <div className="col-lg-5">
<div className="bttns text-end"> <div className="bttns text-end">
<Link to="/page-contact-5" className="btn rounded-pill bg-white border-1 border-white text-dark sm-butn me-2"> <Link to="#" className="btn rounded-pill bg-white border-1 border-white text-dark sm-butn me-2">
<span>Lets Chat</span> <span>{translationService.getTranslation(chatsData.chatsbanner, 'title3',currentLanguage)}</span>
</Link> </Link>
<Link to="/page-contact-5" className="btn rounded-pill border-1 border-white text-white sm-butn"> <Link to="#" className="btn rounded-pill border-1 border-white text-white sm-butn">
<span>Get Information</span> <span>{translationService.getTranslation(chatsData.chatsbanner, 'title4',currentLanguage)}</span>
</Link> </Link>
</div> </div>
</div> </div>

View File

@ -1,8 +1,25 @@
import React from 'react'; import React, {useContext, useEffect, useState} from 'react';
import { Link } from 'gatsby'; import { Link } from 'gatsby';
import footerData from 'data/Software/footer.json'; import { LanguageContext } from '../../context/LanguageContext';
import api from '../../common/api';
import translationService from '../../common/translationService';
const Footer = () => { const Footer = () => {
const { currentLanguage } = useContext(LanguageContext);
const [footerData, setFooterData] = useState({usefulLinks: [], services: [],titles: []});
useEffect(() => {
const fetchData = async () => {
try {
const response = await api.get('footerdata', 'footer.json');
setFooterData(response);
} catch (error) {
console.error(error);
}
};
fetchData();
}, [], [currentLanguage]);
return ( return (
<footer className="style-3"> <footer className="style-3">
<div className="container"> <div className="container">
@ -10,10 +27,10 @@ const Footer = () => {
<div className="col-lg-3 col-sm-6"> <div className="col-lg-3 col-sm-6">
<div className="items"> <div className="items">
<div className="title"> <div className="title">
Nextream's Tech & Solutions {translationService.getTranslation(footerData.titles, 'title',currentLanguage)}
</div> </div>
<small className="text"> <small className="text">
Más de 25 años trabajando en servicios de TI desarrollando aplicaciones de software y aplicaciones móviles para clientes de todo el mundo. Para su industria muy específica, contamos con soluciones de TI altamente personalizadas. {translationService.getTranslation(footerData.titles, 'subtitle1',currentLanguage)}
</small> </small>
<div className="socail-icons"> <div className="socail-icons">
<a href="#" className="icon-35 rounded-circle bg-gray overflow-hidden d-inline-flex align-items-center justify-content-center text-gray me-2"> <a href="#" className="icon-35 rounded-circle bg-gray overflow-hidden d-inline-flex align-items-center justify-content-center text-gray me-2">
@ -31,29 +48,29 @@ const Footer = () => {
<div className="col-lg-3 col-sm-6"> <div className="col-lg-3 col-sm-6">
<div className="items"> <div className="items">
<div className="title"> <div className="title">
Informacion {translationService.getTranslation(footerData.titles, 'title3',currentLanguage)}
</div> </div>
<small className="text mb-10 d-block"> <small className="text mb-10 d-block">
{ footerData.address } {translationService.getTranslation(footerData.titles, 'address',currentLanguage)}
</small> </small>
<small className="text mb-10 d-block"> <small className="text mb-10 d-block">
{ footerData.phone } {translationService.getTranslation(footerData.titles, 'phone',currentLanguage)}
</small> </small>
<small className="text d-block"> <small className="text d-block">
{ footerData.email } {translationService.getTranslation(footerData.titles, 'email',currentLanguage)}
</small> </small>
</div> </div>
</div> </div>
<div className="col-lg-2"> <div className="col-lg-2">
<div className="items"> <div className="items">
<div className="title"> <div className="title">
Useful Links {translationService.getTranslation(footerData.titles, 'title2',currentLanguage)}
</div> </div>
<ul> <ul>
{ {
footerData.usefulLinks.map((item, index) => ( footerData.usefulLinks.map((item, index) => (
<li key={index}> <li key={index}>
<Link to={item.link}>{ item.title }</Link> <Link to={item.link}>{item.title[currentLanguage]}</Link>
</li> </li>
)) ))
} }
@ -63,13 +80,13 @@ const Footer = () => {
<div className="col-lg-2"> <div className="col-lg-2">
<div className="items"> <div className="items">
<div className="title"> <div className="title">
Services {translationService.getTranslation(footerData.titles, 'title4',currentLanguage)}
</div> </div>
<ul> <ul>
{ {
footerData.services.map((item, index) => ( footerData.services.map((item, index) => (
<li key={index}> <li key={index}>
<Link to={item.link}>{ item.title }</Link> <Link to={item.link}>{ item.title[currentLanguage] }</Link>
</li> </li>
)) ))
} }

View File

@ -58,18 +58,18 @@ const Pricing = () => {
<div className={`pricing-card ${plan.recommended ? 'dark-card' : ''} style-3 mb-30 mb-lg-0`}> <div className={`pricing-card ${plan.recommended ? 'dark-card' : ''} style-3 mb-30 mb-lg-0`}>
<div className="card-head"> <div className="card-head">
<div className="title"> <div className="title">
<h4>{plan.title} {plan.recommended && <small>{translationService.getTranslation(text_traductions, 'recommended',currentLanguage)}</small>}</h4> <h4>{plan.title[currentLanguage]} {plan.recommended && <small>{translationService.getTranslation(text_traductions, 'recommended',currentLanguage)}</small>}</h4>
<small>{plan.description}</small> <small>{plan.description[currentLanguage]}</small>
</div> </div>
<div className="price"> <div className="price">
<h5>{plan.price}</h5> <h5>{plan.price[currentLanguage]}</h5>
<small>{translationService.getTranslation(text_traductions, 'per_month',currentLanguage)}</small> <small>{translationService.getTranslation(text_traductions, 'per_month',currentLanguage)}</small>
</div> </div>
</div> </div>
<div className="card-body"> <div className="card-body">
<ul> <ul>
{ {
plan.features.map((feature, i) => ( plan.features[currentLanguage].map((feature, i) => (
<li key={i}> <li key={i}>
<i className="bi bi-check"></i> <i className="bi bi-check"></i>
<small>{feature}</small> <small>{feature}</small>
@ -78,7 +78,7 @@ const Pricing = () => {
} }
</ul> </ul>
</div> </div>
<Link to="/page-contact-5" className="btn rounded-pill bg-blue2 sm-butn w-100 text-white"> <Link to="#" className="btn rounded-pill bg-blue2 sm-butn w-100 text-white">
<span>{translationService.getTranslation(text_traductions, 'get_started_now',currentLanguage)}</span> <span>{translationService.getTranslation(text_traductions, 'get_started_now',currentLanguage)}</span>
</Link> </Link>
</div> </div>

View File

@ -46,11 +46,13 @@ const Projects = () => {
)) ))
} }
</div> </div>
{projectsData.projects.length > 4 && (
<div className="text-center"> <div className="text-center">
<Link to="http://surteloya.com" className="btn rounded-pill bg-blue2 sm-butn mt-60 text-white"> <Link to="http://surteloya.com" className="btn rounded-pill bg-blue2 sm-butn mt-60 text-white">
<span>{translationService.getTranslation(projectsData.titles, 'see_all_projects',currentLanguage)}</span> <span>{translationService.getTranslation(projectsData.titles, 'see_all_projects',currentLanguage)}</span>
</Link> </Link>
</div> </div>
)}
</div> </div>
</div> </div>
</section> </section>

View File

@ -79,7 +79,7 @@ const Testimonials = () => {
<SwiperSlide className="swiper-slide" key={index}> <SwiperSlide className="swiper-slide" key={index}>
<div className="testimonial-card style-3"> <div className="testimonial-card style-3">
<div className="text"> <div className="text">
{ testimonial.text } { testimonial.text[currentLanguage] }
</div> </div>
<div className="user-img mt-30 d-flex align-items-center"> <div className="user-img mt-30 d-flex align-items-center">
<div className="img icon-40 img-cover rounded-circle overflow-hidden me-3"> <div className="img icon-40 img-cover rounded-circle overflow-hidden me-3">
@ -87,7 +87,7 @@ const Testimonials = () => {
</div> </div>
<div className="inf"> <div className="inf">
<p className="fw-bold">{ testimonial.author }</p> <p className="fw-bold">{ testimonial.author }</p>
<small className="text-muted">{ testimonial.position }</small> <small className="text-muted">{ testimonial.position[currentLanguage] }</small>
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,20 +1,20 @@
{ {
"address": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States", "address": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States",
"phone": "+031 5689 89 98", "phone": "+031 5689 89 98",
"email": "contact@Itecksolution.co", "email": "contact@nextream.net",
"usefulLinks": [ "usefulLinks": [
{ "link": "/home-saas-technology", "title": "Home" }, { "link": "#", "title": "Home" },
{ "link": "/page-about-5", "title": "About Iteck" }, { "link": "#", "title": "About Iteck" },
{ "link": "/page-portfolio-5", "title": "Projects" }, { "link": "#", "title": "Projects" },
{ "link": "/page-about-5", "title": "How It Works" }, { "link": "#", "title": "How It Works" },
{ "link": "/page-blog-5", "title": "Blog" }, { "link": "#", "title": "Blog" },
{ "link": "/page-contact-5", "title": "Contact" } { "link": "#", "title": "Contact" }
], ],
"services": [ "services": [
{ "link": "/page-services-5", "title": "It Consultation" }, { "link": "#", "title": "It Consultation" },
{ "link": "/page-services-5", "title": "Software Development" }, { "link": "#", "title": "Software Development" },
{ "link": "/page-services-5", "title": "AI Machine Learning" }, { "link": "#", "title": "AI Machine Learning" },
{ "link": "/page-services-5", "title": "Data Security" }, { "link": "#", "title": "Data Security" },
{ "link": "/page-services-5", "title": "Cloud Services" } { "link": "#", "title": "Cloud Services" }
] ]
} }

View File

@ -0,0 +1,26 @@
{
"chatsdata":{
"chatsbanner":[
{
"title1":{
"es":"Evalúa tus potenciales de negocio ahora y encuentra oportunidades para un",
"en":"Assess Your Business Potentials Now & Find Opportunities For"
},
"title2":{
"es":"¡Éxito más grande!",
"en":"Bigger Success."
},
"title3":{
"es":"Hablemos",
"en":"Lets Chat"
},
"title4":{
"es":"Obtenga Información",
"en":"Get Information"
}
}
]
}
}

View File

@ -1,20 +1,50 @@
{ {
"address": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States", "footerdata":{
"phone": "+031 5689 89 98",
"email": "contact@Itecksolution.co",
"usefulLinks": [ "usefulLinks": [
{ "link": "/home-saas-technology", "title": "Home" }, { "link": "#", "title": { "es": "Home", "en": "Home" }},
{ "link": "/page-about-5", "title": "About Iteck" }, { "link": "#", "title": {"es":"About Iteck", "en":"About Iteck"}},
{ "link": "/page-portfolio-5", "title": "Projects" }, { "link": "#", "title": {"es":"Projects", "en":"Projects"}},
{ "link": "/page-about-5", "title": "How It Works" }, { "link": "#", "title": {"es":"How It Works", "en": "How It Works"}},
{ "link": "/page-blog-5", "title": "Blog" }, { "link": "#", "title": {"es":"Blog", "en":"Blog"}},
{ "link": "/page-contact-5", "title": "Contact" } { "link": "#", "title": {"es":"Contact", "en":"Contact"} }
], ],
"services": [ "services": [
{ "link": "/page-services-5", "title": "It Consultation" }, { "link": "#", "title": {"es":"It Consultation", "en":"It Consultation"}},
{ "link": "/page-services-5", "title": "Software Development" }, { "link": "#", "title": {"es":"Software Development", "en":"Software Development"}},
{ "link": "/page-services-5", "title": "AI Machine Learning" }, { "link": "#", "title": {"es":"AI Machine Learning", "en":"AI Machine Learning"}},
{ "link": "/page-services-5", "title": "Data Security" }, { "link": "#", "title": {"es":"Data Security", "en":"Data Security"}},
{ "link": "/page-services-5", "title": "Cloud Services" } { "link": "#", "title": {"es":"Cloud Services", "en":"Cloud Services"}}
],
"titles": [
{
"title": {
"es": "Nextream's Tech & Solutions",
"en": "Nextream's Tech & Solutions"
},
"title2": {
"es": "Enlaces de Interes",
"en": "Useful Links"
},
"title3": {
"es": "Información",
"en": "Information"
},
"title4": {
"es": "Servicios",
"en": "Services"
},
"subtitle1": {
"es": "Más de 25 años trabajando en servicios de TI desarrollando aplicaciones de software y aplicaciones móviles para clientes de todo el mundo. Para su industria muy específica, contamos con soluciones de TI altamente personalizadas.",
"en": "Más de 25 años trabajando en servicios de TI desarrollando aplicaciones de software y aplicaciones móviles para clientes de todo el mundo. Para su industria muy específica, contamos con soluciones de TI altamente personalizadas."
},
"address": {
"es": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States",
"en": "223 Thatcher Road St, Brookly, Manhattan, NY 10463, United States"},
"phone": {"es": "+031 5689 89 98", "en": "+031 5689 89 98"},
"email": {"es": "contact@nextream.net", "en": "contact@nextream.net" }
}
] ]
}
} }

35
static/data/navbar.json Normal file
View File

@ -0,0 +1,35 @@
{
"navbardata":[
{
"testimonials":{
"es":"Testimonios",
"en":"Testimonials"
},
"services":{
"es":"Servicios",
"en":"Services"
},
"about_us":{
"es":"Acerca de nosotros",
"en":"About Us"
},
"portfolio": {
"es":"Portafolio",
"en":"Portfolio"
},
"pricing":{
"es":"Precios",
"en":"Pricing"
},
"team":{
"es":"Equipo",
"en":"Team"
},
"blog":{
"es":"Blog",
"en":"Blog"
}
}
]
}

View File

@ -2,17 +2,25 @@
"plan": { "plan": {
"plans": [ "plans": [
{ {
"title": "Standard", "title": {"es":"Estandard", "en": "Standard"},
"description": "Basic features", "description": {"es":"Funciones basicas", "en":"Basic features"},
"price": "$29", "price": {"es":"$29 DLLs", "en":"$29 DLLs"},
"features": ["3 Projects", "6 Months Support & SEO", "Basic Dashboard"] "features": {"es":["3 Proyectos", "6 Meses y soporte SEO", "Tablero Basico"], "en":["3 Projects", "6 Months Support & SEO", "Basic Dashboard"]}
}, },
{ {
"title": "Pro", "title": {"es":"Pro", "en": "Pro"},
"recommended": true, "recommended": true,
"description": "Premium features", "description": {"es":"Funciones Premium", "en":"Premium features"},
"price": "$59", "price": {"es":"$59 DLLs", "en":"$59 DLLs"},
"features": [ "features": {
"es":[
"Proyectos Ilimitados",
"Soporte de por vida y Consultores de SEO",
"Tablero Avanzado",
"Seguridad de datos y copia de seguridad",
"Hosting y Dominio"
],
"en":[
"Unlimited Projects", "Unlimited Projects",
"Lifetime Support & SEO Experts Consult", "Lifetime Support & SEO Experts Consult",
"Advance Dashboard", "Advance Dashboard",
@ -20,6 +28,7 @@
"Cloud Hosting & Domain" "Cloud Hosting & Domain"
] ]
} }
}
], ],
"text_traductions": [ "text_traductions": [
{ {
@ -51,7 +60,7 @@
"es": "Precio", "es": "Precio",
"en": "Affordable" "en": "Affordable"
}, },
"recommend": { "recommended": {
"es": "Recomendado", "es": "Recomendado",
"en": "Recomended" "en": "Recomended"
}, },

View File

@ -2,28 +2,28 @@
"testimonial": { "testimonial": {
"testimonials": [ "testimonials": [
{ {
"text": "“We encountered a problem with processing big data and after only 1 week, all fixed, professional, fast & affordable price!”", "text": {"es":"“Encontramos un problema con el procesamiento de big data y después de solo 1 semana, ¡todo solucionado, precio profesional, rápido y asequible!”","en":"“We encountered a problem with processing big data and after only 1 week, all fixed, professional, fast & affordable price!”"},
"image": "/assets/img/testimonials/testi.jpeg", "image": "/assets/img/testimonials/testi.jpeg",
"author": "Robert Downey Jr", "author": "Robert Downey Jr",
"positon": "Technical Leader at Airbnb" "position": {"es":"Líder técnico en Airbnb","en":"Technical Leader at Airbnb"}
}, },
{ {
"text": "“Iteck is 1st our choice for cloud service methods. Extremely security and fast support.”", "text": {"es":"“Iteck es nuestra primera opción para métodos de servicio en la nube. Extremadamente seguridad y soporte rápido”.","en":"“Iteck is 1st our choice for cloud service methods. Extremely security and fast support.”"},
"image": "/assets/img/testimonials/user1.jpeg", "image": "/assets/img/testimonials/user1.jpeg",
"author": "Conor McGregor", "author": "Conor McGregor",
"positon": "CTO at IBM" "position": {"es":"CTO at IBM","en":"CTO at IBM"}
}, },
{ {
"text": "“Itecks Experts really is amazing! high speciality, professional and friendly. Our profit increased so much. Really very satisfied!”", "text":{"es":"“¡Los expertos de Iteck son realmente increíbles! Alta especialidad, profesional y amable. Nuestras ganancias aumentaron mucho. ¡Realmente muy satisfecho!”","en":"“Itecks Experts really is amazing! high speciality, professional and friendly. Our profit increased so much. Really very satisfied!”"},
"image": "/assets/img/testimonials/user2.jpeg", "image": "/assets/img/testimonials/user2.jpeg",
"author": "Lucas Digne", "author": "Lucas Digne",
"positon": "Product Management at Invisionapp" "position":{"es":"Gestión de Producto en Invisionapp","en":"Product Management at Invisionapp"}
}, },
{ {
"text": "“Itecks Experts really is amazing! high speciality, professional and friendly. Our profit increased so much. Really very satisfied!”", "text":{"es":"“¡Los expertos de Iteck son realmente increíbles! Alta especialidad, profesional y amable. Nuestras ganancias aumentaron mucho. ¡Realmente muy satisfecho!”","en":"“Itecks Experts really is amazing! high speciality, professional and friendly. Our profit increased so much. Really very satisfied!”"},
"image": "/assets/img/testimonials/user2.jpeg", "image": "/assets/img/testimonials/user2.jpeg",
"author": "Cesar Mendivil", "author": "Cesar Mendivil",
"positon": "Product Management at Invisionapp" "position":{"es":"Gestión de Producto en Invisionapp","en":"Product Management at Invisionapp"}
} }
], ],
"traductions": [ "traductions": [