From 40095265bb279bf17d1d54401ed5dfda131584b4 Mon Sep 17 00:00:00 2001 From: Cesar Mendivil Date: Sun, 13 Oct 2024 23:49:55 -0700 Subject: [PATCH] Initial Commit --- .gitignore | 35 ++ gatsby-config.js | 24 +- gatsby-node.js | 6 + package-lock.json | 403 +++++++++++++++++- package.json | 4 + src/common/api.js | 33 ++ src/common/urlHelper.js | 22 + src/components/ITCreative/About.jsx | 9 +- .../LanguageSelector/LanguageSelector.jsx | 34 ++ .../LanguageSelector/LanguageSwitcher.jsx | 53 +++ .../Navbars/SoftwareNav/OnePageNav.jsx | 11 +- src/components/Software/About.jsx | 59 ++- src/components/Software/Blog.jsx | 33 +- src/components/Software/Footer.jsx | 2 +- src/components/Software/Header.jsx | 19 +- src/components/Software/Projects.jsx | 12 +- src/components/Software/Services.jsx | 6 +- src/components/Software/Testimonials.jsx | 23 +- src/data/Software/projects.json | 12 +- src/intl/en.json | 30 ++ src/intl/es.json | 31 ++ src/pages/index.jsx | 80 ++-- static/assets/img/about/style_3_2.png | Bin 25371 -> 137381 bytes static/assets/img/about/style_3_2_copy.png | Bin 0 -> 25371 bytes static/assets/img/header/logo_sh_l.png | Bin 1086 -> 22630 bytes static/assets/img/header/logo_sh_l2.png | Bin 0 -> 1086 bytes static/assets/img/lang-es.png | Bin 0 -> 90283 bytes static/assets/img/logo_b2.png | Bin 1651 -> 5236 bytes static/assets/img/logo_b21.png | Bin 0 -> 1651 bytes static/assets/img/logo_ll.png | Bin 1342 -> 5511 bytes static/assets/img/logo_ll3.png | Bin 0 -> 1342 bytes static/data/about.json | 28 ++ static/data/blog.json | 66 +++ static/data/footer.json | 20 + static/data/language/languages.json | 64 +++ static/data/plans.json | 25 ++ static/data/projects.json | 26 ++ static/data/services.json | 22 + static/data/team.json | 27 ++ static/data/testimonials.json | 22 + 40 files changed, 1123 insertions(+), 118 deletions(-) create mode 100644 .gitignore create mode 100644 src/common/api.js create mode 100644 src/common/urlHelper.js create mode 100644 src/components/Navbars/LanguageSelector/LanguageSelector.jsx create mode 100644 src/components/Navbars/LanguageSelector/LanguageSwitcher.jsx create mode 100644 src/intl/en.json create mode 100644 src/intl/es.json create mode 100644 static/assets/img/about/style_3_2_copy.png create mode 100644 static/assets/img/header/logo_sh_l2.png create mode 100644 static/assets/img/lang-es.png create mode 100644 static/assets/img/logo_b21.png create mode 100644 static/assets/img/logo_ll3.png create mode 100644 static/data/about.json create mode 100644 static/data/blog.json create mode 100644 static/data/footer.json create mode 100644 static/data/language/languages.json create mode 100644 static/data/plans.json create mode 100644 static/data/projects.json create mode 100644 static/data/services.json create mode 100644 static/data/team.json create mode 100644 static/data/testimonials.json diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8247bef --- /dev/null +++ b/.gitignore @@ -0,0 +1,35 @@ +# Dependencias de Node.js +node_modules/ +.cache/ +public/ + +# Archivos de log y reporte +npm-debug.log* +yarn-debug.log* +yarn-error.log* +gatsby-error.log + +# Archivos del sistema operativo +.DS_Store +Thumbs.db + +# Configuración de entorno y archivos locales +.env +.env.* +!.env.example + +# Editor de código y herramientas de desarrollo +.idea/ +.vscode/ +*.sublime-workspace + +# Archivos de bloqueo de paquetes +package-lock.json +yarn.lock + +# Archivos de test y coverage +coverage/ + +# Archivos de resultados de compilaciones +dist/ +out/ diff --git a/gatsby-config.js b/gatsby-config.js index e9782cd..190a711 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,9 +1,25 @@ module.exports = { siteMetadata: { - title: 'Iteck', - description: 'Iteck - Multi-Purpose React.js Gatsby Template', - author: 'ThemesCamp', + title: 'Nextream', + description: 'Nextream - Tech & IT Solutions', + author: 'Nextream.net', }, - plugins: ['gatsby-plugin-resolve-src', 'gatsby-plugin-eslint'], + plugins: ['gatsby-plugin-resolve-src', 'gatsby-plugin-eslint', + { + resolve: `gatsby-plugin-intl`, + options: { + // language JSON resource path + path: `${__dirname}/src/intl`, + // supported language + languages: [`en`, `es`], + // language file path + defaultLanguage: `es`, + // option to redirect to `/ko` when connecting `/` + redirect: true, + // Utilizar la URL del recurso JSON de idioma desde las variables de entorno + remoteJsonUrl: `http://localhost:8000/data/language/languages.json`, + }, + }, + ], trailingSlash: 'always', }; diff --git a/gatsby-node.js b/gatsby-node.js index aebebb7..fa6fe8b 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -33,5 +33,11 @@ exports.onCreateWebpackConfig = ({ ); } } + // Add path-browserify to the fallback configuration + config.resolve.fallback = { + ...config.resolve.fallback, + path: require.resolve('path-browserify'), + }; + actions.replaceWebpackConfig(config); }; diff --git a/package-lock.json b/package-lock.json index 0c729d8..cd54367 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,17 @@ "version": "1.0.0", "dependencies": { "axios": "^0.27.2", + "dompurify": "^3.1.6", "gatsby": "^4.24.1", + "gatsby-plugin-intl": "^5.10.0", "gatsby-plugin-resolve-src": "^2.1.0", "lightgallery": "^2.5.0", "mini-css-extract-plugin": "^2.7.7", + "path-browserify": "^1.0.1", "rc-slider": "^10.0.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-intl": "^6.6.8", "react-modal-video": "^1.2.9", "swiper": "^8.3.2" }, @@ -1793,11 +1797,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "dependencies": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" @@ -1815,6 +1819,11 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, "node_modules/@babel/template": { "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", @@ -1942,6 +1951,112 @@ "node": ">= 4" } }, + "node_modules/@formatjs/ecma402-abstract": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", + "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", + "dependencies": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-messageformat-parser": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", + "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-skeleton-parser": "1.8.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/icu-skeleton-parser": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", + "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz", + "integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@formatjs/intl-displaynames": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz", + "integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-listformat": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz", + "integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-pluralrules": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz", + "integrity": "sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "node_modules/@formatjs/intl-relativetimeformat": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-11.2.14.tgz", + "integrity": "sha512-g1tor23+Z8DUzT9VAlMHzdeNxyhnD6sgaFRFxti6+4cODdaG4mudo77Th8ONg8Z3El2Ienf+CXcCNzJpOG1E7A==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, "node_modules/@gatsbyjs/parcel-namer-relative-to-cwd": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz", @@ -3463,6 +3578,15 @@ "@types/node": "*" } }, + "node_modules/@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "dependencies": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -6369,6 +6493,11 @@ "url": "https://github.com/fb55/domhandler?sponsor=1" } }, + "node_modules/dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -8544,6 +8673,24 @@ "gatsby": "^2 || ^3 || ^4" } }, + "node_modules/gatsby-plugin-intl": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-intl/-/gatsby-plugin-intl-5.10.0.tgz", + "integrity": "sha512-dqJB/M7IVHL52HR+vUArxzMNRd49DThQeLgm1ToPpSrdMcscbQvnbPyQ2kn3boJGXtjkY0boDWiQM5/t/xCk+w==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@formatjs/intl-pluralrules": "^5.1.10", + "@formatjs/intl-relativetimeformat": "^11.1.10", + "browser-lang": "^0.2.1", + "intl": "^1.2.5", + "react-intl": "^6.3.2" + } + }, + "node_modules/gatsby-plugin-intl/node_modules/browser-lang": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/browser-lang/-/browser-lang-0.2.1.tgz", + "integrity": "sha512-+xmtsTxVZKWrKHoNUQp4Tm7BEXlnMwOMAHZAh1SSot1+n04qHLFIH0K5anX52k5BkcauggbaNlWT8f3bVwDh/Q==" + }, "node_modules/gatsby-plugin-page-creator": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz", @@ -9376,6 +9523,14 @@ "tslib": "^2.0.3" } }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, "node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -9649,6 +9804,22 @@ "node": ">= 0.4" } }, + "node_modules/intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==" + }, + "node_modules/intl-messageformat": { + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz", + "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "tslib": "^2.4.0" + } + }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -11748,6 +11919,11 @@ "cross-spawn": "^6.0.5" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "node_modules/path-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", @@ -12999,6 +13175,32 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "node_modules/react-intl": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz", + "integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==", + "dependencies": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl": "2.10.4", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "react": "^16.6.0 || 17 || 18", + "typescript": "^4.7 || 5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -16771,11 +16973,18 @@ } }, "@babel/runtime": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.19.0.tgz", - "integrity": "sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA==", + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", + "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", "requires": { - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.14.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + } } }, "@babel/runtime-corejs3": { @@ -16878,6 +17087,104 @@ } } }, + "@formatjs/ecma402-abstract": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.0.0.tgz", + "integrity": "sha512-rRqXOqdFmk7RYvj4khklyqzcfQl9vEL/usogncBHRZfZBDOwMGuSRNFl02fu5KGHXdbinju+YXyuR+Nk8xlr/g==", + "requires": { + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "@formatjs/fast-memoize": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-2.2.0.tgz", + "integrity": "sha512-hnk/nY8FyrL5YxwP9e4r9dqeM6cAbo8PeU9UjyXojZMNvVad2Z06FAVHyR3Ecw6fza+0GH7vdJgiKIVXTMbSBA==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@formatjs/icu-messageformat-parser": { + "version": "2.7.8", + "resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-2.7.8.tgz", + "integrity": "sha512-nBZJYmhpcSX0WeJ5SDYUkZ42AgR3xiyhNCsQweFx3cz/ULJjym8bHAzWKvG5e2+1XO98dBYC0fWeeAECAVSwLA==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-skeleton-parser": "1.8.2", + "tslib": "^2.4.0" + } + }, + "@formatjs/icu-skeleton-parser": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-1.8.2.tgz", + "integrity": "sha512-k4ERKgw7aKGWJZgTarIcNEmvyTVD9FYh0mTrrBMHZ1b8hUu6iOJ4SzsZlo3UNAvHYa+PnvntIwRPt1/vy4nA9Q==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl/-/intl-2.10.4.tgz", + "integrity": "sha512-56483O+HVcL0c7VucAS2tyH020mt9XTozZO67cwtGg0a7KWDukS/FzW3OnvaHmTHDuYsoPIzO+ZHVfU6fT/bJw==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-displaynames": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/@formatjs/intl-displaynames/-/intl-displaynames-6.6.8.tgz", + "integrity": "sha512-Lgx6n5KxN16B3Pb05z3NLEBQkGoXnGjkTBNCZI+Cn17YjHJ3fhCeEJJUqRlIZmJdmaXQhjcQVDp6WIiNeRYT5g==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-listformat": { + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/@formatjs/intl-listformat/-/intl-listformat-7.5.7.tgz", + "integrity": "sha512-MG2TSChQJQT9f7Rlv+eXwUFiG24mKSzmF144PLb8m8OixyXqn4+YWU+5wZracZGCgVTVmx8viCf7IH3QXoiB2g==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-localematcher": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.5.4.tgz", + "integrity": "sha512-zTwEpWOzZ2CiKcB93BLngUX59hQkuZjT2+SAQEscSm52peDW/getsawMcWF1rGRpMCX6D7nSJA3CzJ8gn13N/g==", + "requires": { + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-pluralrules": { + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/@formatjs/intl-pluralrules/-/intl-pluralrules-5.2.14.tgz", + "integrity": "sha512-l6Ev7aOGXJSh5EPDEqzsbyufdCCKXZk993QXRQebLsB0TXRhIyF4alqjdMEatLwIigK/Mka8kiVIOLeFP5Cj9Q==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, + "@formatjs/intl-relativetimeformat": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@formatjs/intl-relativetimeformat/-/intl-relativetimeformat-11.2.14.tgz", + "integrity": "sha512-g1tor23+Z8DUzT9VAlMHzdeNxyhnD6sgaFRFxti6+4cODdaG4mudo77Th8ONg8Z3El2Ienf+CXcCNzJpOG1E7A==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/intl-localematcher": "0.5.4", + "tslib": "^2.4.0" + } + }, "@gatsbyjs/parcel-namer-relative-to-cwd": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@gatsbyjs/parcel-namer-relative-to-cwd/-/parcel-namer-relative-to-cwd-1.9.0.tgz", @@ -17922,6 +18229,15 @@ "@types/node": "*" } }, + "@types/hoist-non-react-statics": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", + "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==", + "requires": { + "@types/react": "*", + "hoist-non-react-statics": "^3.3.0" + } + }, "@types/http-cache-semantics": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", @@ -20110,6 +20426,11 @@ "domelementtype": "^2.2.0" } }, + "dompurify": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", + "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==" + }, "domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", @@ -21864,6 +22185,26 @@ "webpack-merge": "^5.8.0" } }, + "gatsby-plugin-intl": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/gatsby-plugin-intl/-/gatsby-plugin-intl-5.10.0.tgz", + "integrity": "sha512-dqJB/M7IVHL52HR+vUArxzMNRd49DThQeLgm1ToPpSrdMcscbQvnbPyQ2kn3boJGXtjkY0boDWiQM5/t/xCk+w==", + "requires": { + "@babel/runtime": "^7.21.0", + "@formatjs/intl-pluralrules": "^5.1.10", + "@formatjs/intl-relativetimeformat": "^11.1.10", + "browser-lang": "^0.2.1", + "intl": "^1.2.5", + "react-intl": "^6.3.2" + }, + "dependencies": { + "browser-lang": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/browser-lang/-/browser-lang-0.2.1.tgz", + "integrity": "sha512-+xmtsTxVZKWrKHoNUQp4Tm7BEXlnMwOMAHZAh1SSot1+n04qHLFIH0K5anX52k5BkcauggbaNlWT8f3bVwDh/Q==" + } + } + }, "gatsby-plugin-page-creator": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/gatsby-plugin-page-creator/-/gatsby-plugin-page-creator-4.24.0.tgz", @@ -22332,6 +22673,14 @@ "tslib": "^2.0.3" } }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + } + }, "hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", @@ -22516,6 +22865,22 @@ "side-channel": "^1.0.4" } }, + "intl": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/intl/-/intl-1.2.5.tgz", + "integrity": "sha512-rK0KcPHeBFBcqsErKSpvZnrOmWOj+EmDkyJ57e90YWaQNqbcivcqmKDlHEeNprDWOsKzPsh1BfSpPQdDvclHVw==" + }, + "intl-messageformat": { + "version": "10.5.14", + "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.5.14.tgz", + "integrity": "sha512-IjC6sI0X7YRjjyVH9aUgdftcmZK7WXdHeil4KwbjDnRWjnVitKpAx3rr6t6di1joFp5188VqKcobOPA6mCLG/w==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/fast-memoize": "2.2.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "tslib": "^2.4.0" + } + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -24056,6 +24421,11 @@ "cross-spawn": "^6.0.5" } }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, "path-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/path-case/-/path-case-3.0.4.tgz", @@ -24891,6 +25261,23 @@ "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, + "react-intl": { + "version": "6.6.8", + "resolved": "https://registry.npmjs.org/react-intl/-/react-intl-6.6.8.tgz", + "integrity": "sha512-M0pkhzcgV31h++2901BiRXWl69hp2zPyLxRrSwRjd1ErXbNoubz/f4M6DrRTd4OiSUrT4ajRQzrmtS5plG4FtA==", + "requires": { + "@formatjs/ecma402-abstract": "2.0.0", + "@formatjs/icu-messageformat-parser": "2.7.8", + "@formatjs/intl": "2.10.4", + "@formatjs/intl-displaynames": "6.6.8", + "@formatjs/intl-listformat": "7.5.7", + "@types/hoist-non-react-statics": "^3.3.1", + "@types/react": "16 || 17 || 18", + "hoist-non-react-statics": "^3.3.2", + "intl-messageformat": "10.5.14", + "tslib": "^2.4.0" + } + }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/package.json b/package.json index 62a12fc..de68273 100644 --- a/package.json +++ b/package.json @@ -16,13 +16,17 @@ }, "dependencies": { "axios": "^0.27.2", + "dompurify": "^3.1.6", "gatsby": "^4.24.1", + "gatsby-plugin-intl": "^5.10.0", "gatsby-plugin-resolve-src": "^2.1.0", "lightgallery": "^2.5.0", "mini-css-extract-plugin": "^2.7.7", + "path-browserify": "^1.0.1", "rc-slider": "^10.0.1", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-intl": "^6.6.8", "react-modal-video": "^1.2.9", "swiper": "^8.3.2" }, diff --git a/src/common/api.js b/src/common/api.js new file mode 100644 index 0000000..d26590a --- /dev/null +++ b/src/common/api.js @@ -0,0 +1,33 @@ +class Api { + constructor() { + if (!Api.instance) { + Api.instance = this; + } + return Api.instance; + } + + async get(endpoint, jsonFile) { + const data = await this.readJsonFile(jsonFile); + if (!data[endpoint]) { + throw new Error(`Error fetching ${endpoint}: Endpoint not found`); + } + return data[endpoint]; + } + + async readJsonFile(jsonFile) { + const filePath = `/data/${jsonFile}`; + const response = await fetch(filePath); + if (!response.ok) { + throw new Error(`Error fetching ${jsonFile}: ${response.statusText}`); + } + const data = await response.json(); + return data; + } + + // Otros métodos HTTP (POST, PUT, DELETE, etc.) pueden ser añadidos aquí si es necesario +} + +const instance = new Api(); +Object.freeze(instance); + +export default instance; \ No newline at end of file diff --git a/src/common/urlHelper.js b/src/common/urlHelper.js new file mode 100644 index 0000000..07a9754 --- /dev/null +++ b/src/common/urlHelper.js @@ -0,0 +1,22 @@ +let instance = null; + +class UrlHelper { + constructor(locale) { + if (!instance) { + this.locale = locale; + instance = this; + } + + return instance; + } + + setLocale(locale) { + this.locale = locale; + } + + getLocalizedUrl(path) { + return `/${this.locale}${path}`; + } +} + +export default UrlHelper; \ No newline at end of file diff --git a/src/components/ITCreative/About.jsx b/src/components/ITCreative/About.jsx index 1214cf9..0d02108 100644 --- a/src/components/ITCreative/About.jsx +++ b/src/components/ITCreative/About.jsx @@ -1,7 +1,12 @@ import React from 'react'; +import DOMPurify from 'dompurify'; import aboutData from 'data/ITCreative/about.json'; +import { useIntl } from "gatsby-plugin-intl"; const About = () => { + const intl = useIntl(); + const title_1= DOMPurify.sanitize(intl.formatMessage({ id: "header_1" }).trim().replace(/^"|"$/g, '')); + return (
@@ -13,8 +18,8 @@ const About = () => {
About Us
-

- Meet With A House
Of Creatives. +

+

diff --git a/src/components/Navbars/LanguageSelector/LanguageSelector.jsx b/src/components/Navbars/LanguageSelector/LanguageSelector.jsx new file mode 100644 index 0000000..7627e39 --- /dev/null +++ b/src/components/Navbars/LanguageSelector/LanguageSelector.jsx @@ -0,0 +1,34 @@ +import React from 'react'; +import { changeLocale, IntlContextConsumer } from 'gatsby-plugin-intl'; + +const LanguageSelector = () => { + + + + return ( +
+ + {({ languages, language: currentLocale }) => ( +
+ +
    + {languages.map((language) => ( + + ))} +
+
// Cerrar el elemento contenedor + )} +
+ +
+ ); +}; + +export default LanguageSelector \ No newline at end of file diff --git a/src/components/Navbars/LanguageSelector/LanguageSwitcher.jsx b/src/components/Navbars/LanguageSelector/LanguageSwitcher.jsx new file mode 100644 index 0000000..15fd732 --- /dev/null +++ b/src/components/Navbars/LanguageSelector/LanguageSwitcher.jsx @@ -0,0 +1,53 @@ +import React, { useEffect, useState } from 'react'; +import { IntlProvider, useIntl } from 'gatsby-plugin-intl'; +import { navigate } from 'gatsby'; + +const LanguageSwitcher = () => { + const [messages, setMessages] = useState({}); + const [languages, setLanguages] = useState([]); + const intl = useIntl(); + const currentLanguage = intl.locale; + + useEffect(() => { + const fetchMessages = async () => { + try { + const response = await fetch('/data/language/languages.json'); + const data = await response.json(); + setMessages(data); + setLanguages(Object.keys(data)); + } catch (error) { + console.error('Error fetching texts:', error); + } + }; + + fetchMessages(); + }, []); + + const handleLanguageChange = (newLanguage) => { + const path = window.location.pathname; + const newPath = `/${newLanguage}${path.substring(3)}`; + navigate(newPath); + }; + + return ( + +
+ +
    + {languages.map((lang) => ( + + ))} +
+
+
+ ); +}; + +export default LanguageSwitcher; \ No newline at end of file diff --git a/src/components/Navbars/SoftwareNav/OnePageNav.jsx b/src/components/Navbars/SoftwareNav/OnePageNav.jsx index 4ff9c5d..ac5e498 100644 --- a/src/components/Navbars/SoftwareNav/OnePageNav.jsx +++ b/src/components/Navbars/SoftwareNav/OnePageNav.jsx @@ -1,6 +1,7 @@ import React, { useEffect, useRef } from 'react'; import navbarScrollEffect from "common/navbarScrollEffect"; import scrollToSection from 'common/scrollToSection'; +import LanguageSelector from '../LanguageSelector/LanguageSwitcher'; const OnePageNav = () => { const navbarRef = useRef(null); @@ -100,15 +101,7 @@ const OnePageNav = () => {
- - +
diff --git a/src/components/Software/About.jsx b/src/components/Software/About.jsx index 0aff1b7..3cc0b9d 100644 --- a/src/components/Software/About.jsx +++ b/src/components/Software/About.jsx @@ -1,15 +1,37 @@ -import React from 'react'; +import React,{ useEffect, useState } from 'react'; import { Link } from 'gatsby'; -import aboutData from 'data/Software/about.json'; +import DOMPurify from 'dompurify'; +import { useIntl, FormattedMessage } from "gatsby-plugin-intl"; +import api from '../../common/api'; +import UrlHelper from '../../common/urlHelper'; const About = () => { + const intl = useIntl(); + const about_title1= DOMPurify.sanitize(intl.formatMessage({ id: "about_title1" }).trim().replace(/^"|"$/g, '')); + const about_title5= DOMPurify.sanitize(intl.formatMessage({ id: "about_title5" }).trim().replace(/^"|"$/g, '')); + const [dataAbout, setAboutData] = useState({numbers: [], features: []}); + const urlHelper = new UrlHelper(intl.locale); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await api.get('about','about.json'); + setAboutData(response); + } catch (error) { + console.error(error); + } + }; + + fetchData(); + }, []); + return (
{ - aboutData.numbers.map((number, index) => ( + dataAbout.numbers.map((number, index) => (

{ number.value }

@@ -23,23 +45,20 @@ const About = () => {
-
-

Iteck’s Mission & Vision

+
+
- “It is only when they go wrong that machines remind you how powerful they are.” + {intl.formatMessage({ id: "about_title2" })}
- Iteck Co is the partner of choice for many of the world’s leading enterprises, SMEs - and technology challengers. We help businesses elevate their value through custom - software development, product design, QA and consultancy services. + {intl.formatMessage({ id: "about_title3" })}
- Iteck specializes in technological and IT-related services such as product - engineering, warranty management, building cloud, etc. + {intl.formatMessage({ id: "about_title4" })}
- - More About Us + +
@@ -51,20 +70,19 @@ const About = () => {
-
-

Iteck’s Technology

+
+
- Our team can assist you in transforming your business through latest tech - capabilities to stay ahead of the curve. + {intl.formatMessage({ id: "about_title6" })}
    { - aboutData.features.map((feature, index) => (
  • { feature }
  • )) + dataAbout.features.map((feature, index) => (
  • { feature }
  • )) }
- - How We Works + + {intl.formatMessage({ id: "about_title7" })}
@@ -78,4 +96,5 @@ const About = () => { ) } + export default About \ No newline at end of file diff --git a/src/components/Software/Blog.jsx b/src/components/Software/Blog.jsx index f0ca4c7..e316604 100644 --- a/src/components/Software/Blog.jsx +++ b/src/components/Software/Blog.jsx @@ -1,19 +1,40 @@ -import React from 'react'; +import React,{ useEffect, useState } from 'react'; import { Link } from 'gatsby'; +import DOMPurify from 'dompurify'; import data from 'data/Software/blog.json'; +import { useIntl } from "gatsby-plugin-intl"; +import api from '../../common/api'; const Blog = () => { + const intl = useIntl(); + const blog_title1= DOMPurify.sanitize(intl.formatMessage({ id: "blog_title1" }).trim().replace(/^"|"$/g, '')); + + const [dataBlog, setBlogs] = useState({blogs: [], faq: [],clients: []}); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await api.get('blog','blog.json'); + setBlogs(response); + } catch (error) { + console.error(error); + } + }; + + fetchData(); + }, []); return (
-
-

Iteck’s Journal

All Articles +
+
+ {intl.formatMessage({ id: "all_articles" })}
{ - data.blogs.map((post, i) => ( + dataBlog.blogs.map((post, i) => (
@@ -60,7 +81,7 @@ const Blog = () => {
{ - data.faq.map((item, index) => ( + dataBlog.faq.map((item, index) => (

diff --git a/src/components/Software/Projects.jsx b/src/components/Software/Projects.jsx index e818f84..c584c42 100644 --- a/src/components/Software/Projects.jsx +++ b/src/components/Software/Projects.jsx @@ -1,13 +1,15 @@ import React from 'react'; import { Link } from 'gatsby'; import projects from 'data/Software/projects.json'; +import { useIntl } from "gatsby-plugin-intl"; const Projects = () => { + const intl = useIntl(); return (
-

Our Featured Projects

+

{intl.formatMessage({ id: "our_featured" })} {intl.formatMessage({ id: "projects" })}

@@ -15,11 +17,11 @@ const Projects = () => { projects.map((project, i) => (
- +
-
{ project.title }
+
{ project.title }
{ project.description }
@@ -28,8 +30,8 @@ const Projects = () => { }
- - See All Projects + + {intl.formatMessage({ id: "see_all_projects" })}
diff --git a/src/components/Software/Services.jsx b/src/components/Software/Services.jsx index 6a4840c..559ea8b 100644 --- a/src/components/Software/Services.jsx +++ b/src/components/Software/Services.jsx @@ -1,13 +1,15 @@ import React from 'react'; import { Link } from 'gatsby'; +import { useIntl } from "gatsby-plugin-intl"; import services from 'data/Software/services.json'; const Services = () => { + const intl = useIntl(); return (
-

Our Main Services

See full services +

{intl.formatMessage({ id: "our_main" })} {intl.formatMessage({ id: "services" })}

{intl.formatMessage({ id: "see_full_services" })}
{ @@ -22,7 +24,7 @@ const Services = () => {
{ service.details }
- see projects + {intl.formatMessage({ id: "see_projects" })}
diff --git a/src/components/Software/Testimonials.jsx b/src/components/Software/Testimonials.jsx index ad88e8c..dfbc30c 100644 --- a/src/components/Software/Testimonials.jsx +++ b/src/components/Software/Testimonials.jsx @@ -1,7 +1,9 @@ -import React from 'react'; +import React , { useEffect, useState }from 'react'; import { Swiper, SwiperSlide } from 'swiper/react'; import SwiperCore, { Pagination, Navigation, Autoplay } from 'swiper'; -import testimonials from 'data/Software/testimonials.json'; +import { useIntl } from "gatsby-plugin-intl"; +//import testimonials from 'data/Software/testimonials.json'; +import api from '../../common/api'; import "swiper/css"; import 'swiper/css/autoplay'; @@ -11,12 +13,27 @@ import 'swiper/css/pagination'; SwiperCore.use([Pagination, Navigation, Autoplay]); const Testimonials = () => { + const intl = useIntl(); + const [testimonials, setTestimonials] = useState([]); + + useEffect(() => { + const fetchData = async () => { + try { + const response = await api.get('testimonials', 'testimonials.json'); + setTestimonials(response); + } catch (error) { + console.error(error); + } + }; + + fetchData(); + }, []); return (
-

Loved By Thousand Clients

+

{intl.formatMessage({ id: "loved_thousands" })} {intl.formatMessage({ id: "clients" })}

Nextream", + "header_2":"We help businesses elevate their value through custom software development, product design, QA & consultancy services.", + "header_3":"We’ll contact back in 24h", + "inquiry_about":"Your inquiry about", + "request_a_consultation":"Request a consultation!", + "about_title1":"

Nextream’s Mission & Vision

", + "about_title2":"“It is only when they go wrong that machines remind you how powerful they are.”", + "about_title3":" Nextream Co is the partner of choice for many of the world’s leading enterprises, SMEs and technology challengers. We help businesses elevate their value through custom software development, product design, QA and consultancy services.", + "about_title4":" Nextream specializes in technological and IT-related services such as product engineering, warranty management, building cloud, etc.", + "about_title5":"

Nextream’s Technology

", + "about_title6":"Our team can assist you in transforming your business through latest tech capabilities to stay ahead of the curve.", + "about_title7":"How We Works", + "more_about":"More About Us", + "loved_thousands":"Loved By Thousand", + "clients":"Clients", + "our_main":"Our Main", + "services":"Services", + "see_full_services":"See Full Services", + "see_projects":"See Projects", + "our_featured":"Our Featured", + "projects":"Projects", + "see_all_projects":"See All Projects", + "blog_title1":"

Nextream's Journal

", + "all_articles":"All Articles" + } \ No newline at end of file diff --git a/src/intl/es.json b/src/intl/es.json new file mode 100644 index 0000000..eb1210c --- /dev/null +++ b/src/intl/es.json @@ -0,0 +1,31 @@ +{ + "welcome": "Bienvenido a nuestro sitio web", + "features": "Características", + "get_free_quotes": "¡Obtenga una cotización gratuita!", + "built_with_best_features": "Construido con las mejores características y buena UX", + "header_1":"Haz tu vida más fácil con la ayuda de Nextream", + "header_2":"Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.", + "header_3":"Nos pondremos en contacto en 24h.", + "inquiry_about":"Su consulta sobre", + "request_a_consultation":"¡Solicite una consulta!", + "your_email":"Su correo electrónico *", + "about_title1":"

Nextream’s Misión & Vision

", + "about_title2":"“Sólo cuando funcionan mal las máquinas te recuerdan lo poderosas que son.”", + "about_title3":" Nextream Co es el socio elegido por muchas de las empresas, pymes y desafíos tecnológicos líderes del mundo. Ayudamos a las empresas a aumentar su valor mediante el desarrollo de software personalizado, diseño de productos, control de calidad y servicios de consultoría.", + "about_title4":" Nextream está especializado en servicios tecnológicos y relacionados con TI como ingeniería de producto, gestión de garantías, construcción de nube, etc.", + "about_title5":"

Nextream’s Tecnología

", + "about_title6":"Nuestro equipo puede ayudarlo a transformar su negocio a través de las últimas capacidades tecnológicas para mantenerse a la vanguardia.", + "about_title7":"Cómo trabajamos", + "more_about":"Más sobre nosotros", + "loved_thousands":"Amado por miles de", + "clients":"Clientes", + "our_main":"Nuestros principales", + "services":"Servicios", + "see_full_services":"Ver los Servicios", + "see_projects":"Ver el proyecto", + "our_featured":"Nuestros Actuales", + "projects":"Proyectos", + "see_all_projects":"Ver todo los proyectos", + "blog_title1":"

Nextream Noticias

", + "all_articles":"Ver artículos" +} \ No newline at end of file diff --git a/src/pages/index.jsx b/src/pages/index.jsx index 6e7c869..7e8c201 100644 --- a/src/pages/index.jsx +++ b/src/pages/index.jsx @@ -1,59 +1,47 @@ -import React, { useEffect } from 'react'; +import React from 'react'; //= Layout -import PreviewLayout from 'layouts/Preview'; +import MainLayout from 'layouts/Main'; //= Components -import Header from 'components/Preview/Header'; -import Features from 'components/Preview/Features'; -import Demos from 'components/Preview/Demos'; -import InnerPages from 'components/Preview/InnerPages'; -import BuyNow from 'components/Preview/BuyNow'; -import Portfolio from 'components/Preview/Portfolio'; -import Codei from 'components/Preview/Codei'; -import BestFeatures from 'components/Preview/BestFeatures'; -import Responsive from 'components/Preview/Responsive'; -import AllFeatures from 'components/Preview/AllFeatures'; -import Testimonials from 'components/Preview/Testimonials'; -import CallToAction from 'components/Preview/CallToAction'; -//= Scripts -import { fixPreviewStylesheetOrder } from 'common/fixStylesheetsOrder'; - -const LandingPreview = () => { - useEffect(() => { - document.body.classList.add('index-main'); - return () => document.body.classList.remove('index-main'); - }, []); - - useEffect(() => { - fixPreviewStylesheetOrder(); - }, []); +import Navbar from 'components/Navbars/SoftwareNav/OnePageNav'; +import Header from 'components/Software/Header'; +import Testimonials from 'components/Software/Testimonials'; +import Services from 'components/Software/Services'; +import About from 'components/Software/About'; +import Projects from 'components/Software/Projects'; +import Pricing from 'components/Software/Pricing'; +import Team from 'components/Software/Team'; +import Blog from 'components/Software/Blog'; +import ChatBanner from 'components/Software/ChatBanner'; +import Footer from 'components/Software/Footer'; +const HomeSoftwareCompanyOnePage = () => { return ( - + +
- - - - - - - - - - - - - ); -}; +
+ + + + + + + + +
+