From b2c3b91d43333a9b5b346a2918bfac76f252687d Mon Sep 17 00:00:00 2001 From: Oleksandr Yankevych <82472610+Alexveselun@users.noreply.github.com> Date: Mon, 23 Oct 2023 18:09:06 +0300 Subject: [PATCH] feat(article): added google translate customization (#399) --- .../src/assets/articles/articlesList.ts | 6 +- ...-translate-customization-under-nextjs.html | 22 +- ...-translate-customization-under-nextjs.json | 2 +- .../src/assets/scully-routes.json | 2 +- .../Slava_Chub.jpg | Bin 0 -> 7385 bytes ...-translate-customization-under-nextjs.adoc | 449 ++++++++++++++++++ ...-translate-customization-under-nextjs.json | 12 + .../img1.png | Bin 0 -> 56039 bytes .../img2.png | Bin 0 -> 40854 bytes .../img3.png | Bin 0 -> 50364 bytes .../img4.gif | Bin 0 -> 1251573 bytes ...e_translate_customization_under_nextjs.png | Bin 0 -> 747100 bytes assets/articles/articlesList.ts | 6 +- 13 files changed, 481 insertions(+), 18 deletions(-) create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/Slava_Chub.jpg create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.adoc create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.json create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/img1.png create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/img2.png create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/img3.png create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/img4.gif create mode 100644 assets/articles/0082-google-translate-customization-under-nextjs/main_google_translate_customization_under_nextjs.png diff --git a/apps/valor-software-site/src/assets/articles/articlesList.ts b/apps/valor-software-site/src/assets/articles/articlesList.ts index c8696d1d7..e12d6a399 100644 --- a/apps/valor-software-site/src/assets/articles/articlesList.ts +++ b/apps/valor-software-site/src/assets/articles/articlesList.ts @@ -1,3 +1,3 @@ -export const articlesRefactoringTitlesList = ["0081-exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python", "0080-the-interview-under-the-hood", "0079-game-n-qwik-the-final-episode", "0078-game-n-qwik-episode-03", "0077-game-n-qwik-episode-02", "0076-game-n-qwik-episode-01", "0075-fostering-innovation-through-collaboration-outside-contributors-first-hand-experience", "0074-developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way", "0073-qwik-reaches-the-v1-so-does-qwik-nx", "0072-the-evolution-of-web-application-development", "0071-zero-cost-way-on-react-d3", "0070-multi-threading-for-impatient-rust-learners", "0069-module-federation-v7-featuring-delegate-modules-part-2", "0068-node-rust-friendship-forever-the-napi-rs-way", "0067-module-federation-v7-featuring-delegate-modules", "0066-design-processes-automation-with-ai-services", "0065-react-native-and-codepush", "0064-monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets", "0063-leveraging-angular-15-host-directives", "0062-module-federation-with-ssr-and-react-18", "0061-tackling-breaking-changes-using-nx-workspace-generators", "0060-medusa-the-new-year-dedicated-release", "0059-avoiding-common-pitfalls-with-controlvalueaccessors-in-angular", "0058-migrating-a-repo-to-an-nx-monorepo-while-retaining-history", "0057-valor-software-medusa-app-and-github", "0056-a-qwik-view-of-the-ranking-bar", "0055-rendering-nativescript-angular-templates-and-components-into-images", "0054-medusa-resources-overlimit-in-realtime-notification", "0053-modernization-with-module-federation-nx-and-react", "0052-module-federation-for-the-business", "0051-tasty-recipes-for-react-d3-the-ranking-bar", "0050-introduction-to-jetpack-compose-for-nativescript", "0049-module-federation-in-mobile-apps-powered-by-nativescript", "0048-webpack-plugin-written-by-chatgpt", "0047-introduction-to-swiftui-for-nativescript", "0046-change-is-the-only-way-to-stay-your-true-self", "0045-turbopack-new-hotness-or-promising-alpha", "0044-medusa-the-only-commercial-available-saas-platform-for-federated-applications", "0043-orchestrate-your-frontend-components-with-visual-dependency-graphs", "0042-next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced", "0041-nx-next-js-e-module-federation", "0040-nx-next-js-and-module-federation", "0039-debugging-ngrx-in-nativescript-with-redux-devtools", "0038-announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor", "0037-implementing-websockets-plugin-for-nativescript-using-react-native", "0036-tagtide-library-make-your-html-editor-friendly-and-more", "0035-diving-into-seeking-issue-with-mp3-files", "0034-performance-testing-via-artillery-io", "0033-arc-a-new-weapon-against-accessibility-bugs", "0032-setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes", "0031-ngx-bootstrap-v7-0-0-is-officially-released", "0030-how-to-deploy-firebase-preview-channels-on-travis-ci", "0029-scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform", "0028-designing-aggregator-app-from-a-to-z-part-2", "0027-designing-aggregator-app-from-a-to-z-part-1", "0026-multi-highlighting-for-draftjs", "0025-new-year-new-valor-new-you", "0024-incorporating-user-research-on-live-projects-part-4", "0023-incorporating-user-research-on-live-projects-part-3", "0022-incorporating-user-research-on-live-projects-part-2", "0021-incorporating-user-research-on-live-projects-part-1", "0020-why-you-might-want-to-switch-to-time-and-material-from-fixed-price", "0019-cross-site-scripting-xss-a-qa-engineers-guide", "0018-career-path-for-a-flat-structured-company", "0017-json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server", "0016-testing-ios-app-vulnerabilities-with-jailbreaking-part-1", "0015-benefits-of-agile-to-business-and-team", "0014-valor-software-named-top-development-company-in-ukraine-by-clutch", "0013-testing-with-protractor-how-to-fix-synchronization-issues", "0012-hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention", "0011-the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company", "0010-angular-and-seo-structured-data-for-rich-snippets", "0009-ngx-bootstrap-angular-ivy-is-here", "0008-webflow-custom-code-snippets-you-would-use-episode-1", "0007-testing-canvas-could-be-easier", "0006-case-study-of-applitools-or-not-only-cypress-cross-browser-testing", "0005-figma-as-a-presentation-tool-unifying-templates", "0004-cypress-testing-running-tests-in-parallel", "0003-quality-assured-what-it-really-takes-to-test-open-source-libraries", "0002-figma-vs-sketch-text-alignment-comparison", "0001-como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c"]; -export const articlesList = ["Exploring Asynchronous Programming Approaches in Python (Mastering Asynchronous Programming in Python)", "The Interview Under the Hood", "Game-n-Qwik. The Final Episode.", "Game-n-Qwik. Episode 03.", "Game-n-Qwik. Episode 02.", "Game-n-Qwik. Episode 01.", "Fostering Innovation Through Collaboration: Outside Contributor's First-Hand Experience", "Developing a Desktop Application via Rust and NextJS. The Tauri Way.", "Qwik reaches the v1, so does qwik-nx!", "The Evolution of Web Application Development", "Zero-cost Way on React & D3.", "Multi-threading for Impatient Rust Learners.", "Module Federation v7 featuring Delegate Modules Part 2", "Node & Rust: Friendship Forever. The NAPI-rs Way.", "Module Federation v7 featuring Delegate Modules", "Design processes automation with AI services", "React Native and CodePush", "Monitoring the Progress of an HTTP Request in NestJS via WebSockets", "Leveraging @angular 15 host directives", "Module Federation with SSR and React 18", "Tackling breaking changes using Nx Workspace generators", "Medusa the New Year-dedicated Release", "Avoiding common pitfalls with ControlValueAccessors in Angular", "Migrating a repo to an Nx monorepo while retaining history", "Valor Software Medusa app and GitHub", "A Qwik View of the Ranking Bar", "Rendering NativeScript Angular Templates and Components into Images", "Medusa Resources Overlimit in Realtime Notification", "Modernization with Module Federation, Nx and React", "Module Federation for the Business", "Tasty Recipes for React & D3. The Ranking Bar", "Introduction to Jetpack Compose for NativeScript", "Module Federation in mobile apps powered by NativeScript", "Webpack Plugin written by ChatGPT", "Introduction to SwiftUI for NativeScript", "Change is the only way to stay your true self", "Turbopack, new Hotness or promising Alpha", "Medusa – the Only Commercial Available SaaS Platform for Federated Applications", "Orchestrate your frontend components with visual dependency graphs!", "Next.js Module Federation and Module Federation SSR plugins are being open-sourced", "Nx, Next.js, e Module Federation", "Nx, Next.js, and Module Federation", "Debugging NgRx in NativeScript with Redux DevTools", "Announcing strategic partnership with Zack Jackson, the Module Federation inventor", "Implementing WebSockets plugin for NativeScript using React Native", "TagTide library: make your HTML editor-friendly and more", "Diving into seeking issue with MP3 files", "Performance Testing via Artillery.io", "ARC – a new weapon against accessibility bugs", "Setting up your project on GCP fast using Terraform and Kubernetes", "ngx-bootstrap v7.0.0 is officially released!", "How to deploy Firebase Preview Channels on Travis CI", "Scully Helped us Reach a 99 Lighthouse Score for a B2C Platform", "Designing Aggregator App from A to Z – Part 2", "Designing Aggregator App from A to Z — Part 1", "Multi-highlighting for DraftJS", "New year, new Valor, new you", "Incorporating user research on live projects — Part 4", "Incorporating user research on live projects — Part 3", "Incorporating user research on live projects — Part 2", "Incorporating user research on live projects — Part 1", "Why you might want to switch to Time and Material from Fixed Price", "Cross-Site Scripting (XSS): a QA Engineer's Guide", "Career Path for a Flat-structured company", "JSON Web Token Authorization with Access and Refresh Tokens in Angular Application with Node.js Server", "Testing iOS App Vulnerabilities with Jailbreaking. Part 1.", "Benefits of Agile to Business and Team", "Valor Software Named Top Development Company in Ukraine by Clutch", "Testing with Protractor: how to fix synchronization issues", "Hacktoberfest 2019 is coming, and ngx-bootstrap strives for your attention!", "The 4 biggest lessons we learned while building a startup product as an outsource company", "Angular and SEO: Structured Data for Rich Snippets", "ngx-bootstrap: Angular Ivy is here", "Webflow custom code snippets you would use. Episode 1", "Testing Canvas could be easier", "Case study of Applitools or not only Cypress cross-browser testing", "Figma as a presentation tool: Unifying templates", "Cypress testing: Running tests in parallel", "Quality Assured: What It Really Takes To Test Open Source Libraries", "Figma Vs Sketch: Text alignment comparison", "Como o Scully nos ajudou a atingir 99 pontos no Lighthouse para uma plataforma B2C"]; -const orderNumberForNextArticle = 82; \ No newline at end of file +export const articlesRefactoringTitlesList = ["0082-google-translate-customization-under-nextjs", "0081-exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python", "0080-the-interview-under-the-hood", "0079-game-n-qwik-the-final-episode", "0078-game-n-qwik-episode-03", "0077-game-n-qwik-episode-02", "0076-game-n-qwik-episode-01", "0075-fostering-innovation-through-collaboration-outside-contributors-first-hand-experience", "0074-developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way", "0073-qwik-reaches-the-v1-so-does-qwik-nx", "0072-the-evolution-of-web-application-development", "0071-zero-cost-way-on-react-d3", "0070-multi-threading-for-impatient-rust-learners", "0069-module-federation-v7-featuring-delegate-modules-part-2", "0068-node-rust-friendship-forever-the-napi-rs-way", "0067-module-federation-v7-featuring-delegate-modules", "0066-design-processes-automation-with-ai-services", "0065-react-native-and-codepush", "0064-monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets", "0063-leveraging-angular-15-host-directives", "0062-module-federation-with-ssr-and-react-18", "0061-tackling-breaking-changes-using-nx-workspace-generators", "0060-medusa-the-new-year-dedicated-release", "0059-avoiding-common-pitfalls-with-controlvalueaccessors-in-angular", "0058-migrating-a-repo-to-an-nx-monorepo-while-retaining-history", "0057-valor-software-medusa-app-and-github", "0056-a-qwik-view-of-the-ranking-bar", "0055-rendering-nativescript-angular-templates-and-components-into-images", "0054-medusa-resources-overlimit-in-realtime-notification", "0053-modernization-with-module-federation-nx-and-react", "0052-module-federation-for-the-business", "0051-tasty-recipes-for-react-d3-the-ranking-bar", "0050-introduction-to-jetpack-compose-for-nativescript", "0049-module-federation-in-mobile-apps-powered-by-nativescript", "0048-webpack-plugin-written-by-chatgpt", "0047-introduction-to-swiftui-for-nativescript", "0046-change-is-the-only-way-to-stay-your-true-self", "0045-turbopack-new-hotness-or-promising-alpha", "0044-medusa-the-only-commercial-available-saas-platform-for-federated-applications", "0043-orchestrate-your-frontend-components-with-visual-dependency-graphs", "0042-next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced", "0041-nx-next-js-e-module-federation", "0040-nx-next-js-and-module-federation", "0039-debugging-ngrx-in-nativescript-with-redux-devtools", "0038-announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor", "0037-implementing-websockets-plugin-for-nativescript-using-react-native", "0036-tagtide-library-make-your-html-editor-friendly-and-more", "0035-diving-into-seeking-issue-with-mp3-files", "0034-performance-testing-via-artillery-io", "0033-arc-a-new-weapon-against-accessibility-bugs", "0032-setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes", "0031-ngx-bootstrap-v7-0-0-is-officially-released", "0030-how-to-deploy-firebase-preview-channels-on-travis-ci", "0029-scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform", "0028-designing-aggregator-app-from-a-to-z-part-2", "0027-designing-aggregator-app-from-a-to-z-part-1", "0026-multi-highlighting-for-draftjs", "0025-new-year-new-valor-new-you", "0024-incorporating-user-research-on-live-projects-part-4", "0023-incorporating-user-research-on-live-projects-part-3", "0022-incorporating-user-research-on-live-projects-part-2", "0021-incorporating-user-research-on-live-projects-part-1", "0020-why-you-might-want-to-switch-to-time-and-material-from-fixed-price", "0019-cross-site-scripting-xss-a-qa-engineers-guide", "0018-career-path-for-a-flat-structured-company", "0017-json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server", "0016-testing-ios-app-vulnerabilities-with-jailbreaking-part-1", "0015-benefits-of-agile-to-business-and-team", "0014-valor-software-named-top-development-company-in-ukraine-by-clutch", "0013-testing-with-protractor-how-to-fix-synchronization-issues", "0012-hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention", "0011-the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company", "0010-angular-and-seo-structured-data-for-rich-snippets", "0009-ngx-bootstrap-angular-ivy-is-here", "0008-webflow-custom-code-snippets-you-would-use-episode-1", "0007-testing-canvas-could-be-easier", "0006-case-study-of-applitools-or-not-only-cypress-cross-browser-testing", "0005-figma-as-a-presentation-tool-unifying-templates", "0004-cypress-testing-running-tests-in-parallel", "0003-quality-assured-what-it-really-takes-to-test-open-source-libraries", "0002-figma-vs-sketch-text-alignment-comparison", "0001-como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c"]; +export const articlesList = ["Google Translate customization under NextJS", "Exploring Asynchronous Programming Approaches in Python (Mastering Asynchronous Programming in Python)", "The Interview Under the Hood", "Game-n-Qwik. The Final Episode.", "Game-n-Qwik. Episode 03.", "Game-n-Qwik. Episode 02.", "Game-n-Qwik. Episode 01.", "Fostering Innovation Through Collaboration: Outside Contributor's First-Hand Experience", "Developing a Desktop Application via Rust and NextJS. The Tauri Way.", "Qwik reaches the v1, so does qwik-nx!", "The Evolution of Web Application Development", "Zero-cost Way on React & D3.", "Multi-threading for Impatient Rust Learners.", "Module Federation v7 featuring Delegate Modules Part 2", "Node & Rust: Friendship Forever. The NAPI-rs Way.", "Module Federation v7 featuring Delegate Modules", "Design processes automation with AI services", "React Native and CodePush", "Monitoring the Progress of an HTTP Request in NestJS via WebSockets", "Leveraging @angular 15 host directives", "Module Federation with SSR and React 18", "Tackling breaking changes using Nx Workspace generators", "Medusa the New Year-dedicated Release", "Avoiding common pitfalls with ControlValueAccessors in Angular", "Migrating a repo to an Nx monorepo while retaining history", "Valor Software Medusa app and GitHub", "A Qwik View of the Ranking Bar", "Rendering NativeScript Angular Templates and Components into Images", "Medusa Resources Overlimit in Realtime Notification", "Modernization with Module Federation, Nx and React", "Module Federation for the Business", "Tasty Recipes for React & D3. The Ranking Bar", "Introduction to Jetpack Compose for NativeScript", "Module Federation in mobile apps powered by NativeScript", "Webpack Plugin written by ChatGPT", "Introduction to SwiftUI for NativeScript", "Change is the only way to stay your true self", "Turbopack, new Hotness or promising Alpha", "Medusa – the Only Commercial Available SaaS Platform for Federated Applications", "Orchestrate your frontend components with visual dependency graphs!", "Next.js Module Federation and Module Federation SSR plugins are being open-sourced", "Nx, Next.js, e Module Federation", "Nx, Next.js, and Module Federation", "Debugging NgRx in NativeScript with Redux DevTools", "Announcing strategic partnership with Zack Jackson, the Module Federation inventor", "Implementing WebSockets plugin for NativeScript using React Native", "TagTide library: make your HTML editor-friendly and more", "Diving into seeking issue with MP3 files", "Performance Testing via Artillery.io", "ARC – a new weapon against accessibility bugs", "Setting up your project on GCP fast using Terraform and Kubernetes", "ngx-bootstrap v7.0.0 is officially released!", "How to deploy Firebase Preview Channels on Travis CI", "Scully Helped us Reach a 99 Lighthouse Score for a B2C Platform", "Designing Aggregator App from A to Z – Part 2", "Designing Aggregator App from A to Z — Part 1", "Multi-highlighting for DraftJS", "New year, new Valor, new you", "Incorporating user research on live projects — Part 4", "Incorporating user research on live projects — Part 3", "Incorporating user research on live projects — Part 2", "Incorporating user research on live projects — Part 1", "Why you might want to switch to Time and Material from Fixed Price", "Cross-Site Scripting (XSS): a QA Engineer's Guide", "Career Path for a Flat-structured company", "JSON Web Token Authorization with Access and Refresh Tokens in Angular Application with Node.js Server", "Testing iOS App Vulnerabilities with Jailbreaking. Part 1.", "Benefits of Agile to Business and Team", "Valor Software Named Top Development Company in Ukraine by Clutch", "Testing with Protractor: how to fix synchronization issues", "Hacktoberfest 2019 is coming, and ngx-bootstrap strives for your attention!", "The 4 biggest lessons we learned while building a startup product as an outsource company", "Angular and SEO: Structured Data for Rich Snippets", "ngx-bootstrap: Angular Ivy is here", "Webflow custom code snippets you would use. Episode 1", "Testing Canvas could be easier", "Case study of Applitools or not only Cypress cross-browser testing", "Figma as a presentation tool: Unifying templates", "Cypress testing: Running tests in parallel", "Quality Assured: What It Really Takes To Test Open Source Libraries", "Figma Vs Sketch: Text alignment comparison", "Como o Scully nos ajudou a atingir 99 pontos no Lighthouse para uma plataforma B2C"]; +const orderNumberForNextArticle = 83; \ No newline at end of file diff --git a/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.html b/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.html index ca7987550..eb16f45b6 100644 --- a/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.html +++ b/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.html @@ -130,7 +130,7 @@

The main part

The header includes the language switcher component (will be described later)

  • -

    The central part includes four paragraphs regarding Lorem Ipsum explanation

    +

    The central part includes four paragraphs regarding Lorem Ipsum explanation

  • The footer contains a button as a link to the source of the content

    @@ -342,8 +342,10 @@

    The LanguageSwitcher component

    Working principles

    -

    It’s time to gather all the information above and explain how the solution works. -The start point is placed in src/pages/_document.tsx

    +

    It’s time to gather all the information above and explain how the solution works.

    +
    +
    +

    The start point is placed in src/pages/_document.tsx

    @@ -412,10 +414,10 @@

    There are three scripts there

    It’s important. More information regarding the above you can find here. Let me provide you some related theory.

    -

    beforeInteractive: Load the script before any Next.js code and before any page hydration occurs.

    +

    beforeInteractive: Load the script before any Next.js code and before any page hydration occurs.

    -

    afterInteractive: (default) Load the script early but after some hydration on the page occurs.

    +

    afterInteractive: (default) Load the script early but after some hydration on the page occurs.

    @@ -440,7 +442,7 @@

    Conclusion

    and switch the language, say, Deutsch. However, the issue is that the standard Google Translate bar is still on top.

    -
    +
    img1
    @@ -448,7 +450,7 @@

    Conclusion

    We definitely ought to fix it. Let’s add a couple of the following changes to src/styles/globals.css

    -
    +
    img2
    @@ -456,7 +458,7 @@

    Conclusion

    Much better now!

    -
    +
    img3
    @@ -532,13 +534,13 @@

    Conclusion

    http-server
    -
    +
    img4
    -

    The final solution is here.

    +

    The final solution is here.

    diff --git a/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.json b/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.json index d502bdd53..7643d6c45 100644 --- a/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.json +++ b/apps/valor-software-site/src/assets/articles/google-translate-customization-under-nextjs/google-translate-customization-under-nextjs.json @@ -7,6 +7,6 @@ "authorImg": "assets/articles/google-translate-customization-under-nextjs/Slava_Chub.jpg" , "author": "Vyacheslav Chub", "position": "Full Stack Software Engineer", -"date": "Tue Oct 17 2023 10:45:55 GMT+0000 (Coordinated Universal Time)", +"date": "Mon Oct 23 2023 10:45:55 GMT+0000 (Coordinated Universal Time)", "seoDescription": "Multilingual Implementation in NextJS Solution" } diff --git a/apps/valor-software-site/src/assets/scully-routes.json b/apps/valor-software-site/src/assets/scully-routes.json index e1cb928f3..585efc75c 100644 --- a/apps/valor-software-site/src/assets/scully-routes.json +++ b/apps/valor-software-site/src/assets/scully-routes.json @@ -1 +1 @@ -[{"route":"/404"},{"route":"/"},{"route":"/press-release/rs-pack-rust-based-web-bundler"},{"route":"/press-release/nestjs-rspack-cicd-performance"},{"route":"/services"},{"route":"/services/quality-assurance"},{"route":"/services/devops"},{"route":"/services/product-ownership-and-project-management"},{"route":"/services/support-&-Maintenance"},{"route":"/services/design"},{"route":"/services/software-engineering"},{"route":"/clients/startups"},{"route":"/clients/smbs"},{"route":"/clients/enterprises"},{"route":"/clients/non-profit"},{"route":"/clients"},{"route":"/careers"},{"route":"/articles"},{"route":"/articles/exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python"},{"route":"/articles/exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python.html"},{"route":"/articles/the-interview-under-the-hood"},{"route":"/articles/the-interview-under-the-hood.html"},{"route":"/articles/game-n-qwik-the-final-episode"},{"route":"/articles/game-n-qwik-the-final-episode.html"},{"route":"/articles/game-n-qwik-episode-03"},{"route":"/articles/game-n-qwik-episode-03.html"},{"route":"/articles/game-n-qwik-episode-02"},{"route":"/articles/game-n-qwik-episode-02.html"},{"route":"/articles/game-n-qwik-episode-01"},{"route":"/articles/game-n-qwik-episode-01.html"},{"route":"/articles/fostering-innovation-through-collaboration-outside-contributors-first-hand-experience"},{"route":"/articles/fostering-innovation-through-collaboration-outside-contributors-first-hand-experience.html"},{"route":"/articles/developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way"},{"route":"/articles/developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way.html"},{"route":"/articles/qwik-reaches-the-v1-so-does-qwik-nx"},{"route":"/articles/qwik-reaches-the-v1-so-does-qwik-nx.html"},{"route":"/articles/the-evolution-of-web-application-development"},{"route":"/articles/the-evolution-of-web-application-development.html"},{"route":"/articles/zero-cost-way-on-react-d3"},{"route":"/articles/zero-cost-way-on-react-d3.html"},{"route":"/articles/multi-threading-for-impatient-rust-learners"},{"route":"/articles/multi-threading-for-impatient-rust-learners.html"},{"route":"/articles/module-federation-v7-featuring-delegate-modules-part-2"},{"route":"/articles/module-federation-v7-featuring-delegate-modules-part-2.html"},{"route":"/articles/node-rust-friendship-forever-the-napi-rs-way"},{"route":"/articles/node-rust-friendship-forever-the-napi-rs-way.html"},{"route":"/articles/module-federation-v7-featuring-delegate-modules"},{"route":"/articles/module-federation-v7-featuring-delegate-modules.html"},{"route":"/articles/design-processes-automation-with-ai-services"},{"route":"/articles/design-processes-automation-with-ai-services.html"},{"route":"/articles/react-native-and-codepush"},{"route":"/articles/react-native-and-codepush.html"},{"route":"/articles/monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets"},{"route":"/articles/monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets.html"},{"route":"/articles/leveraging-angular-15-host-directives"},{"route":"/articles/leveraging-angular-15-host-directives.html"},{"route":"/articles/module-federation-with-ssr-and-react-18"},{"route":"/articles/module-federation-with-ssr-and-react-18.html"},{"route":"/articles/tackling-breaking-changes-using-nx-workspace-generators"},{"route":"/articles/tackling-breaking-changes-using-nx-workspace-generators.html"},{"route":"/articles/medusa-the-new-year-dedicated-release"},{"route":"/articles/medusa-the-new-year-dedicated-release.html"},{"route":"/articles/avoiding-common-pitfalls-with-controlvalueaccessors-in-angular"},{"route":"/articles/avoiding-common-pitfalls-with-controlvalueaccessors-in-angular.html"},{"route":"/articles/migrating-a-repo-to-an-nx-monorepo-while-retaining-history"},{"route":"/articles/migrating-a-repo-to-an-nx-monorepo-while-retaining-history.html"},{"route":"/articles/valor-software-medusa-app-and-github"},{"route":"/articles/valor-software-medusa-app-and-github.html"},{"route":"/articles/a-qwik-view-of-the-ranking-bar"},{"route":"/articles/a-qwik-view-of-the-ranking-bar.html"},{"route":"/articles/rendering-nativescript-angular-templates-and-components-into-images"},{"route":"/articles/rendering-nativescript-angular-templates-and-components-into-images.html"},{"route":"/articles/medusa-resources-overlimit-in-realtime-notification"},{"route":"/articles/medusa-resources-overlimit-in-realtime-notification.html"},{"route":"/articles/modernization-with-module-federation-nx-and-react"},{"route":"/articles/modernization-with-module-federation-nx-and-react.html"},{"route":"/articles/module-federation-for-the-business"},{"route":"/articles/module-federation-for-the-business.html"},{"route":"/articles/tasty-recipes-for-react-d3-the-ranking-bar"},{"route":"/articles/tasty-recipes-for-react-d3-the-ranking-bar.html"},{"route":"/articles/introduction-to-jetpack-compose-for-nativescript"},{"route":"/articles/introduction-to-jetpack-compose-for-nativescript.html"},{"route":"/articles/module-federation-in-mobile-apps-powered-by-nativescript"},{"route":"/articles/module-federation-in-mobile-apps-powered-by-nativescript.html"},{"route":"/articles/webpack-plugin-written-by-chatgpt"},{"route":"/articles/webpack-plugin-written-by-chatgpt.html"},{"route":"/articles/introduction-to-swiftui-for-nativescript"},{"route":"/articles/introduction-to-swiftui-for-nativescript.html"},{"route":"/articles/change-is-the-only-way-to-stay-your-true-self"},{"route":"/articles/change-is-the-only-way-to-stay-your-true-self.html"},{"route":"/articles/turbopack-new-hotness-or-promising-alpha"},{"route":"/articles/turbopack-new-hotness-or-promising-alpha.html"},{"route":"/articles/medusa-the-only-commercial-available-saas-platform-for-federated-applications"},{"route":"/articles/medusa-the-only-commercial-available-saas-platform-for-federated-applications.html"},{"route":"/articles/orchestrate-your-frontend-components-with-visual-dependency-graphs"},{"route":"/articles/orchestrate-your-frontend-components-with-visual-dependency-graphs.html"},{"route":"/articles/next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced"},{"route":"/articles/next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced.html"},{"route":"/articles/nx-next-js-e-module-federation"},{"route":"/articles/nx-next-js-e-module-federation.html"},{"route":"/articles/nx-next-js-and-module-federation"},{"route":"/articles/nx-next-js-and-module-federation.html"},{"route":"/articles/debugging-ngrx-in-nativescript-with-redux-devtools"},{"route":"/articles/debugging-ngrx-in-nativescript-with-redux-devtools.html"},{"route":"/articles/announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor"},{"route":"/articles/announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor.html"},{"route":"/articles/implementing-websockets-plugin-for-nativescript-using-react-native"},{"route":"/articles/implementing-websockets-plugin-for-nativescript-using-react-native.html"},{"route":"/articles/tagtide-library-make-your-html-editor-friendly-and-more"},{"route":"/articles/tagtide-library-make-your-html-editor-friendly-and-more.html"},{"route":"/articles/diving-into-seeking-issue-with-mp3-files"},{"route":"/articles/diving-into-seeking-issue-with-mp3-files.html"},{"route":"/articles/performance-testing-via-artillery-io"},{"route":"/articles/performance-testing-via-artillery-io.html"},{"route":"/articles/arc-a-new-weapon-against-accessibility-bugs"},{"route":"/articles/arc-a-new-weapon-against-accessibility-bugs.html"},{"route":"/articles/setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes"},{"route":"/articles/setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes.html"},{"route":"/articles/ngx-bootstrap-v7-0-0-is-officially-released"},{"route":"/articles/ngx-bootstrap-v7-0-0-is-officially-released.html"},{"route":"/articles/how-to-deploy-firebase-preview-channels-on-travis-ci"},{"route":"/articles/how-to-deploy-firebase-preview-channels-on-travis-ci.html"},{"route":"/articles/scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform"},{"route":"/articles/scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform.html"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-2"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-2.html"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-1"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-1.html"},{"route":"/articles/multi-highlighting-for-draftjs"},{"route":"/articles/multi-highlighting-for-draftjs.html"},{"route":"/articles/new-year-new-valor-new-you"},{"route":"/articles/new-year-new-valor-new-you.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-4"},{"route":"/articles/incorporating-user-research-on-live-projects-part-4.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-3"},{"route":"/articles/incorporating-user-research-on-live-projects-part-3.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-2"},{"route":"/articles/incorporating-user-research-on-live-projects-part-2.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-1"},{"route":"/articles/incorporating-user-research-on-live-projects-part-1.html"},{"route":"/articles/why-you-might-want-to-switch-to-time-and-material-from-fixed-price"},{"route":"/articles/why-you-might-want-to-switch-to-time-and-material-from-fixed-price.html"},{"route":"/articles/cross-site-scripting-xss-a-qa-engineers-guide"},{"route":"/articles/cross-site-scripting-xss-a-qa-engineers-guide.html"},{"route":"/articles/career-path-for-a-flat-structured-company"},{"route":"/articles/career-path-for-a-flat-structured-company.html"},{"route":"/articles/json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server"},{"route":"/articles/json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server.html"},{"route":"/articles/testing-ios-app-vulnerabilities-with-jailbreaking-part-1"},{"route":"/articles/testing-ios-app-vulnerabilities-with-jailbreaking-part-1.html"},{"route":"/articles/benefits-of-agile-to-business-and-team"},{"route":"/articles/benefits-of-agile-to-business-and-team.html"},{"route":"/articles/valor-software-named-top-development-company-in-ukraine-by-clutch"},{"route":"/articles/valor-software-named-top-development-company-in-ukraine-by-clutch.html"},{"route":"/articles/testing-with-protractor-how-to-fix-synchronization-issues"},{"route":"/articles/testing-with-protractor-how-to-fix-synchronization-issues.html"},{"route":"/articles/hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention"},{"route":"/articles/hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention.html"},{"route":"/articles/the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company"},{"route":"/articles/the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company.html"},{"route":"/articles/angular-and-seo-structured-data-for-rich-snippets"},{"route":"/articles/angular-and-seo-structured-data-for-rich-snippets.html"},{"route":"/articles/ngx-bootstrap-angular-ivy-is-here"},{"route":"/articles/ngx-bootstrap-angular-ivy-is-here.html"},{"route":"/articles/webflow-custom-code-snippets-you-would-use-episode-1"},{"route":"/articles/webflow-custom-code-snippets-you-would-use-episode-1.html"},{"route":"/articles/testing-canvas-could-be-easier"},{"route":"/articles/testing-canvas-could-be-easier.html"},{"route":"/articles/case-study-of-applitools-or-not-only-cypress-cross-browser-testing"},{"route":"/articles/case-study-of-applitools-or-not-only-cypress-cross-browser-testing.html"},{"route":"/articles/figma-as-a-presentation-tool-unifying-templates"},{"route":"/articles/figma-as-a-presentation-tool-unifying-templates.html"},{"route":"/articles/cypress-testing-running-tests-in-parallel"},{"route":"/articles/cypress-testing-running-tests-in-parallel.html"},{"route":"/articles/quality-assured-what-it-really-takes-to-test-open-source-libraries"},{"route":"/articles/quality-assured-what-it-really-takes-to-test-open-source-libraries.html"},{"route":"/articles/figma-vs-sketch-text-alignment-comparison"},{"route":"/articles/figma-vs-sketch-text-alignment-comparison.html"},{"route":"/articles/como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c"},{"route":"/articles/como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c.html"},{"route":"/articles/career-path-for-a-flat-structured-sompany"},{"route":"/articles/testing-with-protractor-how-to-fix-synchroniza"},{"route":"/articles/the-partnership-press-release-zack-jackson-and-valor-software.html"},{"route":"/articles/Debugging_NgRx_in_NativeScript_with_Redux_DevTools"},{"route":"/projects"},{"route":"/projects/booking"},{"route":"/projects/terminus"},{"route":"/projects/ashes-of-creation"},{"route":"/projects/dollar-street"},{"route":"/projects/tablesready"},{"route":"/projects/liberty-flights"},{"route":"/projects/breethe"},{"route":"/projects/booking"},{"route":"/projects/booking.html"},{"route":"/projects/ashes-of-creation"},{"route":"/projects/ashes-of-creation.html"},{"route":"/projects/terminus"},{"route":"/projects/terminus.html"},{"route":"/projects/careerbuilder"},{"route":"/projects/careerbuilder.html"},{"route":"/projects/zuora"},{"route":"/projects/zuora.html"},{"route":"/projects/dollar-street"},{"route":"/projects/dollar-street.html"},{"route":"/projects/liberty-flights"},{"route":"/projects/liberty-flights.html"},{"route":"/projects/souqalmal"},{"route":"/projects/souqalmal.html"},{"route":"/projects/priceshredder"},{"route":"/projects/priceshredder.html"},{"route":"/projects/gapminder-offline"},{"route":"/projects/gapminder-offline.html"},{"route":"/projects/tablesready"},{"route":"/projects/tablesready.html"},{"route":"/projects/breethe"},{"route":"/projects/breethe.html"},{"route":"/projects/stackblitz"},{"route":"/projects/stackblitz.html"},{"route":"/projects/renaizant"},{"route":"/projects/renaizant.html"},{"route":"/projects/cinnabon"},{"route":"/projects/cinnabon.html"},{"route":"/projects/ngtalks"},{"route":"/projects/ngtalks.html"},{"route":"/projects/qualtrax"},{"route":"/projects/qualtrax.html"},{"route":"/projects/thisdot"},{"route":"/projects/thisdot.html"},{"route":"/projects/ngatlanta"},{"route":"/projects/ngatlanta.html"},{"route":"/projects/vizabi"},{"route":"/projects/vizabi.html"},{"route":"/projects/netifi"},{"route":"/projects/netifi.html"},{"route":"/privacy-policy"},{"route":"/subscription-confirmed"},{"route":"/module-federation"}] \ No newline at end of file +[{"route":"/404"},{"route":"/"},{"route":"/press-release/rs-pack-rust-based-web-bundler"},{"route":"/press-release/nestjs-rspack-cicd-performance"},{"route":"/services"},{"route":"/services/quality-assurance"},{"route":"/services/devops"},{"route":"/services/product-ownership-and-project-management"},{"route":"/services/support-&-Maintenance"},{"route":"/services/design"},{"route":"/services/software-engineering"},{"route":"/clients/startups"},{"route":"/clients/smbs"},{"route":"/clients/enterprises"},{"route":"/clients/non-profit"},{"route":"/clients"},{"route":"/careers"},{"route":"/articles"},{"route":"/articles/google-translate-customization-under-nextjs"},{"route":"/articles/google-translate-customization-under-nextjs.html"},{"route":"/articles/exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python"},{"route":"/articles/exploring-asynchronous-programming-approaches-in-python-mastering-asynchronous-programming-in-python.html"},{"route":"/articles/the-interview-under-the-hood"},{"route":"/articles/the-interview-under-the-hood.html"},{"route":"/articles/game-n-qwik-the-final-episode"},{"route":"/articles/game-n-qwik-the-final-episode.html"},{"route":"/articles/game-n-qwik-episode-03"},{"route":"/articles/game-n-qwik-episode-03.html"},{"route":"/articles/game-n-qwik-episode-02"},{"route":"/articles/game-n-qwik-episode-02.html"},{"route":"/articles/game-n-qwik-episode-01"},{"route":"/articles/game-n-qwik-episode-01.html"},{"route":"/articles/fostering-innovation-through-collaboration-outside-contributors-first-hand-experience"},{"route":"/articles/fostering-innovation-through-collaboration-outside-contributors-first-hand-experience.html"},{"route":"/articles/developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way"},{"route":"/articles/developing-a-desktop-application-via-rust-and-nextjs-the-tauri-way.html"},{"route":"/articles/qwik-reaches-the-v1-so-does-qwik-nx"},{"route":"/articles/qwik-reaches-the-v1-so-does-qwik-nx.html"},{"route":"/articles/the-evolution-of-web-application-development"},{"route":"/articles/the-evolution-of-web-application-development.html"},{"route":"/articles/zero-cost-way-on-react-d3"},{"route":"/articles/zero-cost-way-on-react-d3.html"},{"route":"/articles/multi-threading-for-impatient-rust-learners"},{"route":"/articles/multi-threading-for-impatient-rust-learners.html"},{"route":"/articles/module-federation-v7-featuring-delegate-modules-part-2"},{"route":"/articles/module-federation-v7-featuring-delegate-modules-part-2.html"},{"route":"/articles/node-rust-friendship-forever-the-napi-rs-way"},{"route":"/articles/node-rust-friendship-forever-the-napi-rs-way.html"},{"route":"/articles/module-federation-v7-featuring-delegate-modules"},{"route":"/articles/module-federation-v7-featuring-delegate-modules.html"},{"route":"/articles/design-processes-automation-with-ai-services"},{"route":"/articles/design-processes-automation-with-ai-services.html"},{"route":"/articles/react-native-and-codepush"},{"route":"/articles/react-native-and-codepush.html"},{"route":"/articles/monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets"},{"route":"/articles/monitoring-the-progress-of-an-http-request-in-nestjs-via-websockets.html"},{"route":"/articles/leveraging-angular-15-host-directives"},{"route":"/articles/leveraging-angular-15-host-directives.html"},{"route":"/articles/module-federation-with-ssr-and-react-18"},{"route":"/articles/module-federation-with-ssr-and-react-18.html"},{"route":"/articles/tackling-breaking-changes-using-nx-workspace-generators"},{"route":"/articles/tackling-breaking-changes-using-nx-workspace-generators.html"},{"route":"/articles/medusa-the-new-year-dedicated-release"},{"route":"/articles/medusa-the-new-year-dedicated-release.html"},{"route":"/articles/avoiding-common-pitfalls-with-controlvalueaccessors-in-angular"},{"route":"/articles/avoiding-common-pitfalls-with-controlvalueaccessors-in-angular.html"},{"route":"/articles/migrating-a-repo-to-an-nx-monorepo-while-retaining-history"},{"route":"/articles/migrating-a-repo-to-an-nx-monorepo-while-retaining-history.html"},{"route":"/articles/valor-software-medusa-app-and-github"},{"route":"/articles/valor-software-medusa-app-and-github.html"},{"route":"/articles/a-qwik-view-of-the-ranking-bar"},{"route":"/articles/a-qwik-view-of-the-ranking-bar.html"},{"route":"/articles/rendering-nativescript-angular-templates-and-components-into-images"},{"route":"/articles/rendering-nativescript-angular-templates-and-components-into-images.html"},{"route":"/articles/medusa-resources-overlimit-in-realtime-notification"},{"route":"/articles/medusa-resources-overlimit-in-realtime-notification.html"},{"route":"/articles/modernization-with-module-federation-nx-and-react"},{"route":"/articles/modernization-with-module-federation-nx-and-react.html"},{"route":"/articles/module-federation-for-the-business"},{"route":"/articles/module-federation-for-the-business.html"},{"route":"/articles/tasty-recipes-for-react-d3-the-ranking-bar"},{"route":"/articles/tasty-recipes-for-react-d3-the-ranking-bar.html"},{"route":"/articles/introduction-to-jetpack-compose-for-nativescript"},{"route":"/articles/introduction-to-jetpack-compose-for-nativescript.html"},{"route":"/articles/module-federation-in-mobile-apps-powered-by-nativescript"},{"route":"/articles/module-federation-in-mobile-apps-powered-by-nativescript.html"},{"route":"/articles/webpack-plugin-written-by-chatgpt"},{"route":"/articles/webpack-plugin-written-by-chatgpt.html"},{"route":"/articles/introduction-to-swiftui-for-nativescript"},{"route":"/articles/introduction-to-swiftui-for-nativescript.html"},{"route":"/articles/change-is-the-only-way-to-stay-your-true-self"},{"route":"/articles/change-is-the-only-way-to-stay-your-true-self.html"},{"route":"/articles/turbopack-new-hotness-or-promising-alpha"},{"route":"/articles/turbopack-new-hotness-or-promising-alpha.html"},{"route":"/articles/medusa-the-only-commercial-available-saas-platform-for-federated-applications"},{"route":"/articles/medusa-the-only-commercial-available-saas-platform-for-federated-applications.html"},{"route":"/articles/orchestrate-your-frontend-components-with-visual-dependency-graphs"},{"route":"/articles/orchestrate-your-frontend-components-with-visual-dependency-graphs.html"},{"route":"/articles/next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced"},{"route":"/articles/next-js-module-federation-and-module-federation-ssr-plugins-are-being-open-sourced.html"},{"route":"/articles/nx-next-js-e-module-federation"},{"route":"/articles/nx-next-js-e-module-federation.html"},{"route":"/articles/nx-next-js-and-module-federation"},{"route":"/articles/nx-next-js-and-module-federation.html"},{"route":"/articles/debugging-ngrx-in-nativescript-with-redux-devtools"},{"route":"/articles/debugging-ngrx-in-nativescript-with-redux-devtools.html"},{"route":"/articles/announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor"},{"route":"/articles/announcing-strategic-partnership-with-zack-jackson-the-module-federation-inventor.html"},{"route":"/articles/implementing-websockets-plugin-for-nativescript-using-react-native"},{"route":"/articles/implementing-websockets-plugin-for-nativescript-using-react-native.html"},{"route":"/articles/tagtide-library-make-your-html-editor-friendly-and-more"},{"route":"/articles/tagtide-library-make-your-html-editor-friendly-and-more.html"},{"route":"/articles/diving-into-seeking-issue-with-mp3-files"},{"route":"/articles/diving-into-seeking-issue-with-mp3-files.html"},{"route":"/articles/performance-testing-via-artillery-io"},{"route":"/articles/performance-testing-via-artillery-io.html"},{"route":"/articles/arc-a-new-weapon-against-accessibility-bugs"},{"route":"/articles/arc-a-new-weapon-against-accessibility-bugs.html"},{"route":"/articles/setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes"},{"route":"/articles/setting-up-your-project-on-gcp-fast-using-terraform-and-kubernetes.html"},{"route":"/articles/ngx-bootstrap-v7-0-0-is-officially-released"},{"route":"/articles/ngx-bootstrap-v7-0-0-is-officially-released.html"},{"route":"/articles/how-to-deploy-firebase-preview-channels-on-travis-ci"},{"route":"/articles/how-to-deploy-firebase-preview-channels-on-travis-ci.html"},{"route":"/articles/scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform"},{"route":"/articles/scully-helped-us-reach-a-99-lighthouse-score-for-a-b2c-platform.html"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-2"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-2.html"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-1"},{"route":"/articles/designing-aggregator-app-from-a-to-z-part-1.html"},{"route":"/articles/multi-highlighting-for-draftjs"},{"route":"/articles/multi-highlighting-for-draftjs.html"},{"route":"/articles/new-year-new-valor-new-you"},{"route":"/articles/new-year-new-valor-new-you.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-4"},{"route":"/articles/incorporating-user-research-on-live-projects-part-4.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-3"},{"route":"/articles/incorporating-user-research-on-live-projects-part-3.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-2"},{"route":"/articles/incorporating-user-research-on-live-projects-part-2.html"},{"route":"/articles/incorporating-user-research-on-live-projects-part-1"},{"route":"/articles/incorporating-user-research-on-live-projects-part-1.html"},{"route":"/articles/why-you-might-want-to-switch-to-time-and-material-from-fixed-price"},{"route":"/articles/why-you-might-want-to-switch-to-time-and-material-from-fixed-price.html"},{"route":"/articles/cross-site-scripting-xss-a-qa-engineers-guide"},{"route":"/articles/cross-site-scripting-xss-a-qa-engineers-guide.html"},{"route":"/articles/career-path-for-a-flat-structured-company"},{"route":"/articles/career-path-for-a-flat-structured-company.html"},{"route":"/articles/json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server"},{"route":"/articles/json-web-token-authorization-with-access-and-refresh-tokens-in-angular-application-with-node-js-server.html"},{"route":"/articles/testing-ios-app-vulnerabilities-with-jailbreaking-part-1"},{"route":"/articles/testing-ios-app-vulnerabilities-with-jailbreaking-part-1.html"},{"route":"/articles/benefits-of-agile-to-business-and-team"},{"route":"/articles/benefits-of-agile-to-business-and-team.html"},{"route":"/articles/valor-software-named-top-development-company-in-ukraine-by-clutch"},{"route":"/articles/valor-software-named-top-development-company-in-ukraine-by-clutch.html"},{"route":"/articles/testing-with-protractor-how-to-fix-synchronization-issues"},{"route":"/articles/testing-with-protractor-how-to-fix-synchronization-issues.html"},{"route":"/articles/hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention"},{"route":"/articles/hacktoberfest-2019-is-coming-and-ngx-bootstrap-strives-for-your-attention.html"},{"route":"/articles/the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company"},{"route":"/articles/the-4-biggest-lessons-we-learned-while-building-a-startup-product-as-an-outsource-company.html"},{"route":"/articles/angular-and-seo-structured-data-for-rich-snippets"},{"route":"/articles/angular-and-seo-structured-data-for-rich-snippets.html"},{"route":"/articles/ngx-bootstrap-angular-ivy-is-here"},{"route":"/articles/ngx-bootstrap-angular-ivy-is-here.html"},{"route":"/articles/webflow-custom-code-snippets-you-would-use-episode-1"},{"route":"/articles/webflow-custom-code-snippets-you-would-use-episode-1.html"},{"route":"/articles/testing-canvas-could-be-easier"},{"route":"/articles/testing-canvas-could-be-easier.html"},{"route":"/articles/case-study-of-applitools-or-not-only-cypress-cross-browser-testing"},{"route":"/articles/case-study-of-applitools-or-not-only-cypress-cross-browser-testing.html"},{"route":"/articles/figma-as-a-presentation-tool-unifying-templates"},{"route":"/articles/figma-as-a-presentation-tool-unifying-templates.html"},{"route":"/articles/cypress-testing-running-tests-in-parallel"},{"route":"/articles/cypress-testing-running-tests-in-parallel.html"},{"route":"/articles/quality-assured-what-it-really-takes-to-test-open-source-libraries"},{"route":"/articles/quality-assured-what-it-really-takes-to-test-open-source-libraries.html"},{"route":"/articles/figma-vs-sketch-text-alignment-comparison"},{"route":"/articles/figma-vs-sketch-text-alignment-comparison.html"},{"route":"/articles/como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c"},{"route":"/articles/como-o-scully-nos-ajudou-a-atingir-99-pontos-no-lighthouse-para-uma-plataforma-b2c.html"},{"route":"/articles/career-path-for-a-flat-structured-sompany"},{"route":"/articles/testing-with-protractor-how-to-fix-synchroniza"},{"route":"/articles/the-partnership-press-release-zack-jackson-and-valor-software.html"},{"route":"/articles/Debugging_NgRx_in_NativeScript_with_Redux_DevTools"},{"route":"/projects"},{"route":"/projects/booking"},{"route":"/projects/terminus"},{"route":"/projects/ashes-of-creation"},{"route":"/projects/dollar-street"},{"route":"/projects/tablesready"},{"route":"/projects/liberty-flights"},{"route":"/projects/breethe"},{"route":"/projects/booking"},{"route":"/projects/booking.html"},{"route":"/projects/ashes-of-creation"},{"route":"/projects/ashes-of-creation.html"},{"route":"/projects/terminus"},{"route":"/projects/terminus.html"},{"route":"/projects/careerbuilder"},{"route":"/projects/careerbuilder.html"},{"route":"/projects/zuora"},{"route":"/projects/zuora.html"},{"route":"/projects/dollar-street"},{"route":"/projects/dollar-street.html"},{"route":"/projects/liberty-flights"},{"route":"/projects/liberty-flights.html"},{"route":"/projects/souqalmal"},{"route":"/projects/souqalmal.html"},{"route":"/projects/priceshredder"},{"route":"/projects/priceshredder.html"},{"route":"/projects/gapminder-offline"},{"route":"/projects/gapminder-offline.html"},{"route":"/projects/tablesready"},{"route":"/projects/tablesready.html"},{"route":"/projects/breethe"},{"route":"/projects/breethe.html"},{"route":"/projects/stackblitz"},{"route":"/projects/stackblitz.html"},{"route":"/projects/renaizant"},{"route":"/projects/renaizant.html"},{"route":"/projects/cinnabon"},{"route":"/projects/cinnabon.html"},{"route":"/projects/ngtalks"},{"route":"/projects/ngtalks.html"},{"route":"/projects/qualtrax"},{"route":"/projects/qualtrax.html"},{"route":"/projects/thisdot"},{"route":"/projects/thisdot.html"},{"route":"/projects/ngatlanta"},{"route":"/projects/ngatlanta.html"},{"route":"/projects/vizabi"},{"route":"/projects/vizabi.html"},{"route":"/projects/netifi"},{"route":"/projects/netifi.html"},{"route":"/privacy-policy"},{"route":"/subscription-confirmed"},{"route":"/module-federation"}] \ No newline at end of file diff --git a/assets/articles/0082-google-translate-customization-under-nextjs/Slava_Chub.jpg b/assets/articles/0082-google-translate-customization-under-nextjs/Slava_Chub.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a730ee24f09ef7e32f165a74255c3c5577a1fa83 GIT binary patch literal 7385 zcmb7}Wl$VZx2|WH83ui@)ZA_y`R1&j)KS^%K@ z_nRdNq_POUsfkvm9T;c27yzoxW?H8&>`T=sCXi-k0T8p@w%bW;GK*EHz>dC%SB{YW zt})t1pz#-Bo%S z!9>V9DY`xob{7mruo&uF;FGoOscD%PsuaTdo zohRo|c0e?4z1iRw14(;rIK57F&!KM)R(+%Dh!fx2RYb&?k$5)wpT!d+8GR+Q?CiB| zCF+Pj##Oki9Q4-1ldfcaMTZ|xRn+ANc+u3N=1JFl>QA%KbK8_n%PlM7!!4T+Bh9i8 z133(Jhfg?_(xOv|V)TUFu2Z^jGq8{olOCb;RpWKGxA?^qk$0nZNxL*sUri6S70Mgl z^(;ec(7n6{d}Yn2hA<1~HJ<>_ijzLq1myn~8~_3Uk-*QI|3_~moacogkswcKAt}%9 zouwfeEPOTJ@EPM^6jKpm$XEMIw3g*eCxx*tyDfI)2f{z!A|q_*s?Qm9w`c2bn1%Rr z1`;3u3H1MD0Dzy@6bbmB1fYKjfPJjFfDg(-UREO?n}9^sjWD%LWX9 zL2&V?xg?SCX;e*|2&ibeU&rU+aH<8=be%zY=%h@|T*d>t*Z)^t0mYGiFZ-q)?|Svt z<@_emmOBe(L8#m(*obk2$crJ&%x~~)wr|?XEJZd)1SwHvKDM$;-pD2^D4YzneSybq z-!$hzNZpy%bvyT$^HpouKIEUw?WAI-Yqz(RqapH4&ue83GC_3{?dvyby~XAuR~jzy zZOw(kOX4V(MWzk3A-WP$X34CW63)BcI1>cj=`p|?>;8RaYI(56UW|!Ot;;&@So`(1 zj`^0U4l8&3Io8~X$m2d7PNFtrmlT<(x`dTVm*cgIHhL`Q!BWzk9l*I$by z_swBmtc9~HN9cRizm$t7HR=vALr;L1sR`FKDc`BALwY*j2x0X-tUfitS(%4e<;aih zg8_FH*6+MoId5p50J>@u+2d7k+1KAowt1r@VBc%e4%@u63-gOj<;9Q^U$X1jqP34q zhr%Zw3qq%`(&2$&6!`p#eV`kjjF~R_R|2K^ACg5v$$}RambS@kq=@|Cc56%5{tc@_ zHo{-MK_3VT;(ImbTEQoY4w}>3#|3|b8dvULs&2l0(H6Ji70CQ@zX4dZ!C0kCC^(fd z<)|K7O>m0*^U<*Vv8M&)v`FHuYvbTliDIc&l6#TLY5`tx7jkyZpk`A+J&9yf0r#R* zZF{LrbJ5~(M1#HE8tv!|ucBd<#8k>uZ#})t{dKW{Zh~42FC&oyeWTu5R!TN&lS0P|A=(H%jtamWp>k}6)k9;2$*T#ECjg$ZCB`y- zsT?y&Ws9-!&xr2&UpUy z@cRlAhsJZ={ma~X8@+u6sh?C0S@)&i+N&18jQwhtRttgMK77IXdSs>>`|=&%tj>RP z$!}tIE+?MfRmS|LAfWykEr@zML7=!%+7F!9aB>Bms@1UVQImR3!dX4+_Xn`nD`cH2 zSEt%T9XAyPQqA(FNDE(Y&hT12B%Gso`n)TYQ!wbv8r{~}VctikDNT7uF)e`Hx|F=( zK6~K;Ok-pTO%_IFjyF4*^z_mC;ij7ii|-O_Q{)Uuv#YrHt5Nz*8PUD4h9x6=D!*@g zt1)BRFyw5UHNpRjU)V5r^H%?C&PGn5jB?SiZ<_anF|=+SzTKG9#PXY?u!0wE_Qq-R zS9z`cKG~ndMff1?PnN;lmA+3De|s6_alXQBS#5Nc>?(ssmgL%PSjSKY%jJi^Xx&3? zx+tm9Meo%1B_&&MFwH z9doW~CSClpkVxGj)AD$% zpw0qhl5LZ3-0qyLC74l}kD17n?OkiWKUJf#uwj+AqLE)dZqFJ8E{VBrS>$0HkU~fk zUI9fqPBJn#2m=%F68QT3?B3{u0bV3Xx(XXf%QQ($MN z)suwlY&!MowG=cJG1g*Y;ZWE4=nKpCZ0khLss^mX^zDmBzPPtsu z--PjB)f^S9FM@9$^Vo;qOX$j2-syi{(1A)}Xkylp^*&~cWETZp$D%V;e= zr5sJ>minF^pTylGQTfu#<=IfM)`_ibFD#+X2;B|~?G)498`LM~v8TeYT3nfuqhp&lg z?%gY45LFh&k;hZAOvp9K^W!`IdSlCS5bC$7!-Hzb7oMA#TGo`|skZSdO0W;8dFyM7 z4HymBe98YO!nY4^vJ?)V`fOXi%onbZRKbJ#I_DjU!J`I$x54Ut@26uO1TlHt`bB_Y zd5wy;OYgA`T1%t6w3a_+OG4qFh!2`WG zsY$rzFx%U77wb12p+Y|bQ!alb|Frwg&6oV@1ZlOo;*IUq1hUz@F|Z?a{+TiuaGps9 z2?zo|N@*BG(o*P*|<42TO2l9PJ_EQUoKsE*X&26 z2CJE{ek2=A-akJ4MIWe-ygkuGUbX##W~-XoZsqTag}@DID#=fl_7P#lRZEWJ^ZW7@ zm(eP-FLN1i(;JRZ3njymZI$91BAU4!FVBnzIBg3wR{r+t6cZlvAmVM9 z2CE0Rns= z%4_wyre>U0YK4`Y!?8!KOM!jC_uTmn5y-BofBsE61bmIw-_FEy#K>C!BxYO+kU}>y0)0@V{A>B8Hm)&;u zCv@EYWwY^5GT^6?xLM`(9kx+ZF{qk{(bB*S?wkA&@;8y}p7hEkh07gY3)C#+7NR!- zzW?;D(Xz|`tcC2x( z_SW<2obd10m}#+R22d?R9lEA$3@<-zFmJ;3?xSEdapB%rI#)UO@Y%qyhmNK6DN^&efjM)rHV$ho+%PR)RMo;Yg z<7j3h-n6!N*I)cXle9@OHFvT|=$$AkE>;em{c_1k;55`Lw*K=Iq!W3eD~l`RuRmGD zVj=OX>o4=fUT^ipCdPAhn>jScv0;M*LwZg<&(3um8S)wz<>s z1$2s>Zy3<*@>keq`hmf$3S)~4|M?;Y~u+hkC#Rlo^ zmW$nuBW-r^;_`ZaA$Hrq2vHEClI7m}!neQRvESe>e3Or6PJCG<^B7mHS6vyKN3WZRJVx#^ zLYMjV3N}6F74dyk*etYcEJBlE5HmYX8;`eBRnfGggevTZc}n{VE?#?7tcE(GpA0uD z;C$m9vFT(+MI$XLOSYe-frD`y!7!b#y*+DfMQu?fb@g@d2BB5hK$noGD;C;{1?^CB zPg`@F%LE7Nv{2=3iA=Hvn?HN(mrwUnY(WUFZ>*(*wM)IEaMz;tHS7ePsR?d90qeBQ z3U%3~o#5azlgp#xy|v5V>d2kU#xyzBnVpOHa)&)MC{ND;#s{k%>u{;D>Xs-WcQ5#wW; z+c=skxd~N{_k5!^+nQx%TL%kqDNeP~+a$CSFfjoUKL;Qe0c_02_ih*TM>0U<19HH3 zYOV0@2pSq|{#fHM>cX0FxVJ1lfBj|!cF@WTDAq1f$Z|_It;xQwOKPQ}a(B=QDeZ-R`$qE@v~9b$B#pfe$8x zYF>?}tS#Qg3@j`*H>Xg83|EZP%jeD~OiunrVX4*mER3Ich0|Y7!Dd~Ps^Qz?!+IF* zyH7O8O{s#!jgAg9j(*D)dJ_@UP12ik52%Bz~SnNt&4jlfdTJNf?FE1 zltVGs`wjE=reD=9cMf+67RI*HpT7}^vBEO(wd5?Qj zI#_30_y|UA5CMPX6JQ6!9>yNC7{&^+4%2GvF0F=KuuZ!quJ*0b<4uJJY^@~se4(T< z239gMwqZIyidU$eUiuaGW;^&c64BEgWM_H3 zwxFb^gj8ku%FPXXbwdLTkXZ;qWaYIZVvcP59F^>`nBuhd7MxD;Wl^U-g9S@y4cazg zSkn|m>L{pj4EFQ@Y}>VNa_m#dPr4@Er-8PyQK5mNtA_wL!%oL>>RYF4*NH7uZGD78 zplF+N6ega^#afw$^brG(Je?^-J-gG7%UX5P_G0eGVute`fKja3yL*qt-yZVLc?4Ey znl8yN`UO8SncV&GkN`mw_UDw4?r5>_{nz93bAN#3m;f7|AID87ru`PiOM%UxPn+PJ z-(kmYNAuzI+C5wW%5g!Pm!I3f^|Y6c6RQmrO~bE8q1C`^9$wxtWm$I44ZQ(6K~~$E zhGp}4234$)+@_Nx#g%K8dkxp|6!gTW%!D`x=ZMzjG&(8i8(tEwEva^FB1OR; z#=ASp2zqG~bWQ({&3YdT`yqb67(cd_H{Y*06PGS`sTCpAQCbi64mtWS^_japFEh|- zjv@{#DgUH1U4P}c``y1XYVf7i_S=Mb{=FH|S84P3k@A+arh!5lQ^wU1WKTQkRYoN^ z9iFF1!#65H9VBet>AO2bHKPgY4|bJm?rranRHN$99zUb)f#R$iZuN2z>&{|o#r%L` z-5YKS?B-~d*-zM^baCT0)lUE)gr4tlxEPs=*s6my0rLc8ohc>=p3e#+VXF!wZQfM(< z9M0^>!{pk6JVjqs#a?Ze;S#2!60FBGLty6PWT38!9p(?$ulI+yBXJv9iRVv%#5R<36Tqm!W&I{rC3?nsH+@E@~LcN^XCiZW)H> zQk{f}{}Aox=Z!Q$ql@^e*}bo`!mx}_XI%8z!IXuq2HzKZl&HL23m?GJUAY{*Tx5Hl zt!`h^eN|qYYZQk|O_eT$>P@CCqAHInQa1DT*h**IES3?0)o4K4Wh-avOo7E-Tv5OZcR%$M*Gl*{sRyT&;}F)l5~3g?2rs+W9_#BWe?z zsiaB@=@j#j0=fkE1sqfgNE7oBgj%I0-vS1c<+rl};3a>tm}EIb+*Z^ zNBW%Ts97ZnBP|Ui@28G2>swpn^T^dJamt*r_+n1PNuSGm$i!XM9LZ@o!9AQ-<~L_z zPy&wgd7}YU-%{1WwZgL*=z0w%10FKY@CF)lmpM(v%A6?It9%tR`i5E%bF}`TpXsP` z;ONU4TCY2)x!VXZ)3Jvs2cxINA-$7v5UKl&3FkEbtJi5Kh%2|p85SH^wpc=9AxMJ? zzW^{?aS9u3l6+CpcXzL}UmH?IPFl$AJzoq$RblbYH3)q7`U9wg1*dZ*OyJC{SZpVC zFLZ>p=r?}we1Ev+6u3SrOJ!+8SHbz)kbse3pFwNL@VSk{%tt4Zo zgiJhBqk67Bpq8vVgc9Gn!{;M)rU{>vyf|7)!kElhNW9lPr@R%vvNf`M(jAE6Q?EQ0 zCF<(1czoFM_!8+59{k{?`rA38S#rIEP@KdFkuU#A=6`Xd!MLKmJzdig98 z7zhF)Lm>Zg|Ns0y5(oyyeMVsj9u zRNN2R9SSz9-q=szuC4%nw!Xv8Bw5}qt(fNa2bGRDzE=@{N(Sv+l@7}tYPs#N4 z_}gjcy>-ZNOHi&>a%fQP_@4OT`!ORB-;UAL$3uHR)lcFi4etn# Z!8PHgYW362wp2XTPit_bDB;ume*s7-oR nextjs-gtrans-demo +Would you like to use TypeScript? -> Yes +Would you like to use ESLint? -> No +Would you like to use Tailwind CSS? -> Yes +Would you like to use `src/` directory? -> Yes +Would you like to use App Router? -> No +Would you like to customize the default import alias? -> No +---- + +Also, install one extra dependency. + +[, code] +---- +npm i nookies --save +---- + +Now we can run the app +[, code] +---- +npm run dev +---- + +It's time to implement the solution into the app. Please don't worry if you don't find some expected components during placing the code. Future steps will resolve it. + +=== The main part + +Let's change content in https://github.com/buchslava/nextjs-gtrans-demo/blob/main/src/pages/index.tsx[src/pages/index.tsx, window=_blank] + +[, code] +---- +import { LanguageSwitcher } from "./lang-switcher"; + +export default function Home() { + return ( +
    +
    + +
    +
    +
    +
    +

    + What is Lorem Ipsum? +

    +

    + Lorem Ipsum is simply dummy text of the printing and typesetting + industry.... +

    +
    + // This is a part of the content. Please take the full version for the original solution! +
    + +
    + ); +} +---- + +I recommend temporarily forgetting the #LanguageSwitcher# component and focusing on the content mentioned above. The file contains three logical parts. + +* The header includes the language switcher component (will be described later) +* The central part includes four paragraphs regarding #Lorem Ipsum# explanation +* The footer contains a button as a link to the source of the content + +Let's change https://github.com/buchslava/nextjs-gtrans-demo/blob/main/src/pages/_document.tsx[src/pages/_document.tsx, window=_blank] + +[, code] +---- +import { Html, Head, Main, NextScript } from "next/document"; +import Script from "next/script"; + +export default function Document() { + return ( + + +