<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ivan Simeonov</title>
    <description>The latest articles on Forem by Ivan Simeonov (@ivannicksimeonov).</description>
    <link>https://forem.com/ivannicksimeonov</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1023197%2F1eac8764-2daf-4dee-a404-6184b8befcd7.jpeg</url>
      <title>Forem: Ivan Simeonov</title>
      <link>https://forem.com/ivannicksimeonov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ivannicksimeonov"/>
    <language>en</language>
    <item>
      <title>Ngx-Translate: Internationalization (i18n) library for Angular</title>
      <dc:creator>Ivan Simeonov</dc:creator>
      <pubDate>Thu, 23 Feb 2023 07:00:03 +0000</pubDate>
      <link>https://forem.com/ivannicksimeonov/ngx-translate-internationalization-i18n-library-for-angular-1d4e</link>
      <guid>https://forem.com/ivannicksimeonov/ngx-translate-internationalization-i18n-library-for-angular-1d4e</guid>
      <description>&lt;h1&gt;
  
  
  Internationalization in Angular using ngx-translate
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Table of content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;
Optional steps

&lt;ul&gt;
&lt;li&gt;Create Angular project&lt;/li&gt;
&lt;li&gt;Add Bootstrap and flag-icons libraries&lt;/li&gt;
&lt;li&gt;Update the html and styles&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

Ngx-Translate

&lt;ul&gt;
&lt;li&gt;Add ngx-translate to the project&lt;/li&gt;
&lt;li&gt;Translation Module and HttpLoader Setup&lt;/li&gt;
&lt;li&gt;Translation Service Setup&lt;/li&gt;
&lt;li&gt;Creation of JSON Translation files&lt;/li&gt;
&lt;li&gt;Translations usage in templates and code&lt;/li&gt;
&lt;li&gt;Bonus HTML Tags&lt;/li&gt;
&lt;li&gt;Default Browser language&lt;/li&gt;
&lt;li&gt;Runtime language changes&lt;/li&gt;
&lt;li&gt;Bonus Get Browser Language&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Summary&lt;/li&gt;

&lt;li&gt;Contact Me&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Internationalization (i18n) is the process of adapting software to support multiple languages and cultures. In the world of Angular, &lt;a href="http://www.ngx-translate.com/" rel="noopener noreferrer"&gt;ngx-translate&lt;/a&gt; is a popular library that helps developers add i18n support to their projects. By using ngx-translate, developers can easily translate static text in their applications, as well as dynamic content that is generated by user interactions. With its simple API and comprehensive documentation, ngx-translate makes it easy for developers to add internationalization to their Angular projects and ensure that their applications are accessible to users around the world. In this article, we will explore how to add ngx-translate to an Angular project and how to use it to create a multilingual user interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optional steps
&lt;/h2&gt;

&lt;p&gt;For the purposes of this tutorial, before integrating ngx-translate into an Angular project, we will have to first create one. Then we will add a styling library, such as Bootstrap and update the HTML and styles. At this stage we will ensure that the application is styled correctly and ready for the addition of i18n support. These steps are optional, but they will help to improve the overall look and feel of the application and make the integration of ngx-translate smoother and more successful.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Create Agnular project&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I assume you already have the basic knowledge and you have your local environment ready to use AngularCLI. To create an empty Angular project using the AngularCLI, simply run the following command in the terminal window:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    ng new internation-demo


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After running the command above, the ng client will ask you if you want to add Angular routing and what stylesheet format would you like to use. In my case, I decided to add the routing and use SCSS. In this tutorial, we won't use the routing and the UI will be created with Bootstrap, so it doesn't matter, which one will you choose.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

? Would you like to add Angular routing? Yes
? Which stylesheet format would you like to use? SCSS


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Add Bootstrap and flags icons libraries&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In order to create the designs with ease, we will add Bootstrap and flag-icons libraries.&lt;/p&gt;

&lt;p&gt;To add the libraries, run the following commands in terminal opened in the root of the project:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install bootstrap
npm i flag-icons


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then in order use the styles, classes, etc., we will add them to the &lt;code&gt;angular.json&lt;/code&gt; (there are other ways as well, f.e. importing them to the index.html, etc. but I personally prefer to add them to the angular.json).&lt;/p&gt;

&lt;p&gt;Open angular.json file of your project and include:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"node_modules/bootstrap/dist/css/bootstrap.min.css"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"node_modules/flag-icons/sass/flag-icons.scss",


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;into the &lt;code&gt;projects-&amp;gt;architect-&amp;gt;build-&amp;gt;styles&lt;/code&gt; array&lt;br&gt;
and&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

"node_modules/bootstrap/dist/js/bootstrap.js"


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;into &lt;code&gt;projects-&amp;gt;architect-&amp;gt;build-&amp;gt;scripts&lt;/code&gt; array&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Update the html and styles&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Firstly, open the &lt;code&gt;app.component.html&lt;/code&gt; and remove all the automatically generated code. Let's add our basic template that will be translated later on:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;nav class="navbar navbar-dark bg-dark fixed-top"&amp;gt;
  &amp;lt;div class="container-fluid"&amp;gt;
    &amp;lt;a class="navbar-brand"&amp;gt;Internationalization&amp;lt;/a&amp;gt;
    &amp;lt;div class="d-flex"&amp;gt;
      &amp;lt;span class="fi fi-us me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-de me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-it me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-es me-2"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;
&amp;lt;div class="container-fluid mt-3"&amp;gt;
  &amp;lt;h1&amp;gt;What is ngx-translate&amp;lt;/h1&amp;gt;
  &amp;lt;p&amp;gt;
    NGX-Translate is an internationalization library for Angular. It lets you define translations for your content in
    different languages and switch between them easily.
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    It gives you access to a service, a directive and a pipe to handle any dynamic or static content.
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    NGX-Translate is also extremely modular. It is written in a way that makes it really easy to replace any part with a
    custom implementation in case the existing one doesn't fit your needs.
  &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h5&gt;
  
  
  Please consider the fact that the fixed navbar will overlay your other content, unless you add padding to the top of the body. Lets add the following code into the &lt;code&gt;styles.scss&lt;/code&gt; file:
&lt;/h5&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

body {
    padding-top: 65px;
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After completion of the optional steps described above, we can start the app using &lt;code&gt;ng serve -o&lt;/code&gt; command and we will see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-dashboard.png" alt="app-dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Ngx Translate
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Add ngx translate to the project
&lt;/h3&gt;

&lt;p&gt;In order to use ngx-translate, first we have to install the npm module. Open a terminal in the root folder of your project and run the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install @ngx-translate/core


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;a href="https://github.com/ngx-translate/core" rel="noopener noreferrer"&gt;@ngx-translate/core&lt;/a&gt; provides the translation's fundamental procedures, such as the TranslateService and the translate pipe.&lt;/p&gt;

&lt;p&gt;There is no loader accessible by default. Although &lt;code&gt;setTranslation&lt;/code&gt; may be used to manually add translations, it is preferable to utilize a loader. You may either develop your own loader or use an existing one. You may, for example, use the TranslateHttpLoader to load translations from files using HttpClient. To use it, simple install the http-loader package with the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install @ngx-translate/http-loader


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;a href="https://github.com/ngx-translate/http-loader" rel="noopener noreferrer"&gt;@ngx-translate/http-loader&lt;/a&gt; dynamically loads translation files from your web server.&lt;/p&gt;

&lt;h3&gt;
  
  
  Translation Module and HttpLoader Setup
&lt;/h3&gt;

&lt;p&gt;Finally, in your Angular project, you may utilize ngx-translate. You must include &lt;code&gt;TranslateModule.forRoot()&lt;/code&gt; in your application's base NgModule.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;forRoot&lt;/code&gt; static method is a convention that both offers and configures services. Make sure you only call this function in your application's root module, which is usually called AppModule. You can customize the TranslateModule using this method by supplying a loader, a parser, and/or a missing translations handler.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {TranslateModule} from '@ngx-translate/core';

@NgModule({
    imports: [
        BrowserModule,
        TranslateModule.forRoot()
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Since we are going to use the &lt;code&gt;TranslateHttpLoader&lt;/code&gt;, we should also do the following changes in order to load our translations from &lt;code&gt;"/assets/i18n/[lang].json"&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add the &lt;code&gt;HttpLoaderFactory function&lt;/code&gt;, that is required for AOT (ahead of time) compilation in your project.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;HttpClientModule&lt;/code&gt; to the imports array in the &lt;code&gt;AppModule&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configure the &lt;code&gt;TranslateModule&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;HttpLoaderFactory method:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

// AoT requires an exported function for factories
export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;HttpClientModule &amp;amp; TranslateModule configuration&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

@NgModule({
    imports: [
        BrowserModule,
        HttpClientModule,
        TranslateModule.forRoot({
            loader: {
                provide: TranslateLoader,
                useFactory: HttpLoaderFactory,
                deps: [HttpClient]
            }
        })
    ],
    bootstrap: [AppComponent]
})



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Complete AppModule (app.module.ts) setup&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

import { HttpClient, HttpClientModule } from '@angular/common/http';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
import { TranslateHttpLoader } from '@ngx-translate/http-loader';

import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';

// AoT requires an exported function for factories
export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http);
}

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule,
    TranslateModule.forRoot({
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient],
      },
    }),
  ],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Translation Service Setup
&lt;/h3&gt;

&lt;p&gt;Since we have configured the &lt;code&gt;TranslationModule&lt;/code&gt; and the &lt;code&gt;TranslateHttpLoader&lt;/code&gt;, we can move to the next step and initialize the &lt;code&gt;TranslateService&lt;/code&gt; of our application. Let's jump into the AppComponent (app.component.ts) and initialize our service in the constructor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AppComponent (app.component.ts)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


import { Component } from '@angular/core';
import { TranslateService } from '@ngx-translate/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss'],
})
export class AppComponent {

  constructor(private translateService: TranslateService) {
    translateService.setDefaultLang('en');
    translateService.use('en');
  }
}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;As you can see from the code above, we have initialized the translation service. On the other hand, we have also added two other things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;translateService.setDefaultLang('en');&lt;/code&gt; - Adds a fallback language when a translation isn't found in the current language&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;translate.use('en');&lt;/code&gt; - Specifies the language to use, if it isn't available, the current loader will be used to get them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now let's start the application using the &lt;code&gt;ng serve -o&lt;/code&gt; command and you shall see the following (if you have followed the optional steps):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-dashboard.png" alt="app-dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The applications seems to work, but lets take a look at the browser console, where we have the following error:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;


Failed to load resource: the server responded with a status of 404 (Not Found)
Cannot GET /assets/i18n/en.json



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That is not unexpected. We have set the default and the fallback language to be &lt;code&gt;en&lt;/code&gt; and the &lt;code&gt;HttpLoader&lt;/code&gt; tries to load them from the server but we've not created that file yet. We will fix this in the next step.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creation of JSON Translation files
&lt;/h3&gt;

&lt;p&gt;Our demo application will support four languages: english, german, italian and spanish. Every single language will be stored in a separate JSON file, so let's create one for each. We will place those files in the &lt;code&gt;/assets/i18n/&lt;/code&gt; as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-assets-i18n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-assets-i18n.png" alt="app-assets-structure"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, since we've created the JSON files for every language, let's fill them with data following this best practices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create detailed keys&lt;/li&gt;
&lt;li&gt;use capital letters for the keys&lt;/li&gt;
&lt;li&gt;don't use translation text as IDs&lt;/li&gt;
&lt;li&gt;separate keys with multiple words with underscore (_)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;en.json&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
  "NAVBAR": {
    "TITLE": "Internationalization"
  },
  "MAIN_CONTENT": {
    "TITLE": "What is ngx-translate?",
    "DESC_P1": "NGX-Translate is an internationalization library for Angular. It lets you define translations for your content in different languages and switch between them easily.",
    "DESC_P2": "It gives you access to a service, a directive and a pipe to handle any dynamic or static content.",
    "DESC_P3": "NGX-Translate is also extremely modular. It is written in a way that makes it really easy to replace any part with a custom implementation in case the existing one doesn't fit your needs."
  }
}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;de.json&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
  "NAVBAR": {
    "TITLE": "Internationalisierung"
  },
  "MAIN_CONTENT": {
    "TITLE": "Was ist ngx-translate?",
    "DESC_P1": "NGX-Translate ist eine Internationalisierungsbibliothek für Angular. Mit ihr können Sie Übersetzungen für Ihre Inhalte in verschiedenen Sprachen definieren und einfach zwischen ihnen wechseln.",
    "DESC_P2": "Es gibt Ihnen Zugriff auf einen Service, eine Direktive und eine Pipe, um jeden dynamischen oder statischen Inhalt zu verarbeiten.",
    "DESC_P3": "NGX-Translate ist auch extrem modular. Es ist so geschrieben, dass es sehr einfach ist, jeden Teil durch eine benutzerdefinierte Implementierung zu ersetzen, falls die vorhandene nicht Ihren Bedürfnissen entspricht."
  }
}




&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;it.json&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
  "NAVBAR": {
    "TITLE": "Internazionalizzazione"
  },
  "MAIN_CONTENT": {
    "TITLE": "Cos'è ngx-translate?",
    "DESC_P1": "NGX-Translate è una libreria di internazionalizzazione per Angular. Consente di definire traduzioni per i contenuti in diverse lingue e di passare facilmente da una all'altra",
    "DESC_P2": "Permette di accedere a un servizio, una direttiva e una pipe per gestire qualsiasi contenuto dinamico o statico",
    "DESC_P3": "NGX-Translate è anche estremamente modulare. È scritto in modo tale da rendere molto semplice la sostituzione di qualsiasi parte con un'implementazione personalizzata, nel caso in cui quella esistente non sia adatta alle proprie esigenze."
  }
}




&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;es.json&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

{
  "NAVBAR": {
    "TITLE": "Internacionalización"
  },
  "MAIN_CONTENT": {
    "TITLE": "¿Qué es ngx-translate?",
    "DESC_P1": "NGX-Translate es una librería de internacionalización para Angular. Te permite definir traducciones para tu contenido en diferentes idiomas y cambiar entre ellas fácilmente.",
    "DESC_P2": "Te da acceso a un servicio, una directiva y una tubería para manejar cualquier contenido dinámico o estático",
    "DESC_P3": "NGX-Translate es también extremadamente modular. Está escrito de tal forma que resulta realmente sencillo sustituir cualquier parte por una implementación personalizada en caso de que la existente no se ajuste a tus necesidades."
  }
}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If you reload the application now and check the browser console, you will see that the error isn't there anymore.&lt;/p&gt;

&lt;h3&gt;
  
  
  Translations usage in templates and code
&lt;/h3&gt;

&lt;p&gt;Now our translation JSON files are ready, so we can jump into the AppComponent (app.component.html) and start using them by replacing the static texts with references to the keys in the JSON files. In the &lt;code&gt;ngx-translate&lt;/code&gt; are described multiple ways to add the translations but we will focus on the most popular and recommended one - using &lt;code&gt;translation pipe&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ex.:&lt;/strong&gt; &lt;code&gt;{{'key_id' | translate}}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AppComponent (app.component.ts) with translations added&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;nav class="navbar navbar-dark bg-dark fixed-top"&amp;gt;
  &amp;lt;div class="container-fluid"&amp;gt;
    &amp;lt;a class="navbar-brand"&amp;gt;{{ "NAVBAR.TITLE" | translate }}&amp;lt;/a&amp;gt;
    &amp;lt;div class="d-flex"&amp;gt;
      &amp;lt;span class="fi fi-us me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-de me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-it me-2"&amp;gt;&amp;lt;/span&amp;gt;
      &amp;lt;span class="fi fi-es me-2"&amp;gt;&amp;lt;/span&amp;gt;
    &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/nav&amp;gt;
&amp;lt;div class="container-fluid mt-3"&amp;gt;
  &amp;lt;h1&amp;gt;{{ "MAIN_CONTENT.TITLE" | translate }}&amp;lt;/h1&amp;gt;
  &amp;lt;p&amp;gt;
    {{ "MAIN_CONTENT.DESC_P1" | translate }}
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    {{ "MAIN_CONTENT.DESC_P2" | translate }}
  &amp;lt;/p&amp;gt;
  &amp;lt;p&amp;gt;
    {{ "MAIN_CONTENT.DESC_P3" | translate }}
  &amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;




&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Bonus HTML Tags
&lt;/h3&gt;

&lt;p&gt;We can use raw HTML tags within translations:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;en/de/it/es.json&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  ...
      "TITLE": "&amp;lt;a href='http://www.ngx-translate.com/'&amp;gt;What is ngx-translate?&amp;lt;/a&amp;gt;"
  ...


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And to render them, we simply using the &lt;code&gt;innerHTML&lt;/code&gt; attribute with pipe:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AppComponent (app.component.ts)&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  ...
  &amp;lt;h1 [innerHtml]="'MAIN_CONTENT.TITLE' | translate"&amp;gt;&amp;lt;/h1&amp;gt;
  ...


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
  
  
  Runtime language changes
&lt;/h3&gt;

&lt;p&gt;Now we have made all the configuration that we need, JSON files with the translations are created and the last thing that we are missing is to update the UI to switch between the language files we've created. To do so, let's do the following changes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add &lt;code&gt;changeLanguage&lt;/code&gt; function into the AppComponent (app.component.ts):&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  changeLanguage(language: string): void {
    this.translateService.use(language);
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Bind country flags to &lt;code&gt;click&lt;/code&gt; event in the template (app.component.html):&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;span class="fi fi-us me-2" (click)="changeLanguage('en')"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span class="fi fi-de me-2" (click)="changeLanguage('de')"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span class="fi fi-it me-2" (click)="changeLanguage('it')"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;span class="fi fi-es me-2" (click)="changeLanguage('es')"&amp;gt;&amp;lt;/span&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now reload the application and click on the different country flag to see the magic happening.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-usage-demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FIvanSimeonov%2Finternationalization-demo%2Fmain%2Fsrc%2Fassets%2Fimages%2Fapp-usage-demo.gif" alt="app-usage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats!!!👏👏👏&lt;br&gt;
You have successfully created an Angular application that supports four different languages!&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus Get Browser Language
&lt;/h3&gt;

&lt;p&gt;If you want to apply the browser language, you can use the &lt;code&gt;getBrowserLang()&lt;/code&gt; function. Keep in mind that it is really important to preset the default language, so when the browser language isn't found in our &lt;code&gt;/assets/i18n/&lt;/code&gt; folder, the application will still have a fallback language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AppComponent (app.component.ts)&lt;/strong&gt;&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;import { Component } from '@angular/core';&lt;br&gt;
import { TranslateService } from '@ngx-translate/core';&lt;/p&gt;

&lt;p&gt;@Component({&lt;br&gt;
  selector: 'app-root',&lt;br&gt;
  templateUrl: './app.component.html',&lt;br&gt;
  styleUrls: ['./app.component.scss'],&lt;br&gt;
})&lt;br&gt;
export class AppComponent {&lt;br&gt;
  defaultLang = 'en';&lt;/p&gt;

&lt;p&gt;constructor(private translateService: TranslateService) {&lt;br&gt;
    translateService.setDefaultLang(this.defaultLang);&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let browserLang = translateService.getBrowserLang();
if (browserLang) {
  translateService.use(browserLang);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;changeLanguage(language: string): void {&lt;br&gt;
    this.translateService.use(language);&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Summary&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;In conclusion, &lt;a href="http://www.ngx-translate.com/" rel="noopener noreferrer"&gt;ngx-translate&lt;/a&gt; is a valuable tool for Angular developers who want to add internationalization to their projects. Its ease of use, comprehensive documentation, and active development community make it a reliable and effective solution for adding i18n support. Whether you are building a large, complex application or a simple single-page app, ngx-translate can help you reach a global audience by making your application accessible in multiple languages. So, if you are looking for a way to add i18n support to your Angular project, consider giving ngx-translate a try.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The source code of this article can be found in my &lt;a href="https://github.com/IvanSimeonov/internationalization-demo" rel="noopener noreferrer"&gt;Github repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contact Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/IvanSimeonov" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📱 &lt;a href="https://www.linkedin.com/in/ivannicksimeonov/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;☕ &lt;a href="https://www.buymeacoffee.com/ivssim" rel="noopener noreferrer"&gt;Buy Me A Coffee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Ngx-Charts: Data visualization library for Angular</title>
      <dc:creator>Ivan Simeonov</dc:creator>
      <pubDate>Fri, 17 Feb 2023 17:36:44 +0000</pubDate>
      <link>https://forem.com/ivannicksimeonov/ngx-charts-data-visualization-library-for-angular-1cad</link>
      <guid>https://forem.com/ivannicksimeonov/ngx-charts-data-visualization-library-for-angular-1cad</guid>
      <description>&lt;h1&gt;
  
  
  Data visualization in Angular using ngx-charts
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Table of content
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Supported chart types&lt;/li&gt;
&lt;li&gt;Installation&lt;/li&gt;
&lt;li&gt;
Usage

&lt;ul&gt;
&lt;li&gt;Vertical Bar Chart example&lt;/li&gt;
&lt;li&gt;Pie Chart example&lt;/li&gt;
&lt;li&gt;Line Chart example&lt;/li&gt;
&lt;li&gt;Number Cards example&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Charts Preview&lt;/li&gt;

&lt;li&gt;Best practices&lt;/li&gt;

&lt;li&gt;Summary&lt;/li&gt;

&lt;li&gt;Contact Me&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When it comes to building web applications, data visualization plays a crucial role in helping users make sense of complex data sets. This is where &lt;a href="https://swimlane.gitbook.io/ngx-charts" rel="noopener noreferrer"&gt;ngx-charts&lt;/a&gt; comes in handy. Ngx-charts is a popular charting library for Angular projects that provides a wide range of customizable and interactive charts. With ngx-charts, you can easily add stunning charts to your Angular applications, whether you're building a dashboard, a reporting tool, or any other data visualization solution. This article will explore how to get started with ngx-charts, the different types of charts it offers, and how to customize them to suit your project's needs. Whether you're a seasoned Angular developer or just getting started, this article will help you add powerful data visualization to your projects using ngx-charts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supported chart types
&lt;/h2&gt;

&lt;p&gt;Ngx-Charts is a charting library for Angular that provides a wide variety of customizable and interactive chart types. The supported chart types in ngx-charts include line, area, bar, horizontal bar, pie, doughnut, gauge, heat map, force-directed graph, bubble chart and other variations.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The line and area charts are useful for showing trends over time or comparing values between two or more categories.&lt;/li&gt;
&lt;li&gt;The bar and horizontal bar charts are suitable for comparing values across different categories or showing data in a ranking format.&lt;/li&gt;
&lt;li&gt;The pie and doughnut charts are useful for showing data as parts of a whole and can help to quickly visualize data in a simple and concise way.&lt;/li&gt;
&lt;li&gt;The gauge chart is great for displaying progress towards a specific goal or target.&lt;/li&gt;
&lt;li&gt;The heat map chart can be used to show data distribution and patterns in a two-dimensional format, while the force-directed graph is ideal for visualizing complex relationships and network structures.&lt;/li&gt;
&lt;li&gt;The bubble chart is suitable for showing relationships between three or more data dimensions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, choosing the appropriate chart type in ngx-charts depends on the type of data you have and the insights you want to convey. With a good understanding of the supported chart types and their strengths, ngx-charts can help you create powerful and visually appealing data visualizations in your Angular project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;In order to use ngx-charts, first we have to install the npm module. Open a terminal in the root folder of your project and run the following command:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm i @swimlane/ngx-charts


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then we must also install the following peer-dependency:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm install @types/d3 --save-dev


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now that we have the npm module installed in our project, we may utilize ngx-charts. In order to do so, open the &lt;code&gt;AppModule(app.module.ts)&lt;/code&gt; and include the &lt;code&gt;NgxChartsModule&lt;/code&gt; in the imports arrays:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { NgxChartsModule } from "@swimlane/ngx-charts";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";

@NgModule({
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    AppRoutingModule,
    NgxChartsModule,
  ],
  providers: [],
  bootstrap: [AppComponent],
})
export class AppModule {}



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Keep in mind to add &lt;code&gt;BrowserAnimationsModule&lt;/code&gt; since charts are having animations as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Usage
&lt;/h2&gt;

&lt;p&gt;I will show you some basic examples of the charts I commonly use. Many chart options are customizable, but we will focus only on a few. If you want to see what customizable properties are there for the different charts, you can see them described &lt;a href="https://swimlane.gitbook.io/ngx-charts/examples" rel="noopener noreferrer"&gt;here&lt;/a&gt;. These charts are widely used in various industries, including business, finance, and science, and they can help you to effectively communicate complex data and insights.&lt;/p&gt;

&lt;p&gt;I will give a brief description of a couple of the different properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;view&lt;/strong&gt; - the dimensions of the chart [width, height]. If left undefined, the chart will fit the parent container size&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;results&lt;/strong&gt; - the chart data
scheme - the color scheme of the chart (custom scheme available as well)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xAxis&lt;/strong&gt; - show or hide the x axis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;yAxis&lt;/strong&gt; - show or hide the y axis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;showGridLines&lt;/strong&gt; - show or hide the grid lines (xAxis or yAxis must be shown in order to work)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Formatters&lt;/strong&gt; - format the text. Examples can be seen in the code snippets below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dataLabelFormatting&lt;/li&gt;
&lt;li&gt;tooltipText&lt;/li&gt;
&lt;li&gt;yAxisTickFormatting&lt;/li&gt;
&lt;li&gt;xAxisTickFormatting&lt;/li&gt;
&lt;li&gt;valueFormatting&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="https://swimlane.gitbook.io/ngx-charts/examples" rel="noopener noreferrer"&gt;Charts Properties Docs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;



&lt;h3&gt;
  
  
  Vertical Bar Chart example
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Code Snippets:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;app.component.html&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    &amp;lt;ngx-charts-bar-vertical
      [results]="dataVBC"
      [view]="viewVBC"
      [animations]="animationsVBC"
      [legend]="legendVBC"
      [xAxis]="xAxisVBC"
      [yAxis]="yAxisLabelVBC"
      [showYAxisLabel]="showYAxisLabelVBC"
      [yAxisLabel]="yAxisLabelVBC"
      [dataLabelFormatting]="dataLabelFormatterVBC"
    &amp;gt;&amp;lt;/ngx-charts-bar-vertical&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;app.component.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  // Options for Vertical Bar Chart

  dataVBC = DummyData.totalNominalGDP;
  viewVBC: [number, number] = [800, 300];
  animationsVBC = false;
  legendVBC = true;
  xAxisVBC = true;
  yAxisVBC = true;
  showYAxisLabelVBC = true;
  yAxisLabelVBC = "Amount in Trillions ($)";

  dataLabelFormatterVBC(tooltipText: any) {
    return "$" + tooltipText + " trillion";
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Result:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://gifyu.com/image/SqUyD" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs9.gifyu.com%2Fimages%2FVerticalBarChart.gif" alt="VerticalBarChart.gif"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Pie Chart example
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Code Snippets:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;app.component.html&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    &amp;lt;ngx-charts-pie-chart
      [results]="dataPC"
      [view]="viewPC"
      [animations]="animationPC"
      [scheme]="colorSchemePC"
      [labels]="labelsPC"
      [doughnut]="doughnut"
      [tooltipText]="percentageFormatterPC"
    &amp;gt;&amp;lt;/ngx-charts-pie-chart&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;app.component.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  // Options for Pie Chart

  dataPC = DummyData.totalPopulation;
  viewPC: [number, number] = [700, 400];
  animationPC = true;
  colorSchemePC = "vivid";
  labelsPC = true;
  doughnut = true;

  percentageFormatterPC(data: any): string {
    return data.value + "%";
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Result:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://gifyu.com/image/SqUyy" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.gifyu.com%2Fimages%2FDoughnatPieChart.gif" alt="DoughnutPieChart.gif"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Line Chart example
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Code Snippets:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;app.component.html&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    &amp;lt;ngx-charts-line-chart
      [results]="dataLC"
      [view]="viewLC"
      [animations]="animationsLC"
      [showGridLines]="showGridLinesLC"
      [legend]="legendLC"
      [legendTitle]="legendTitleLC"
      [roundDomains]="roundDomainsLC"
      [xAxis]="true"
      [yAxis]="true"
      [yAxisTickFormatting]="currencyFormatterLC"
      [xAxisTickFormatting]="dateFormatterLC"
    &amp;gt;&amp;lt;/ngx-charts-line-chart&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;app.component.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  // Options for Line Chart

  dataLC = DummyData.annualWageSalary;
  viewLC: [number, number] = [700, 300];
  animationsLC = true;
  showGridLinesLC = true;
  legendLC = true;
  legendTitleLC = "Countries";
  roundDomainsLC = true;
  xAxisLC = true;
  yAxisLC = true;

  currencyFormatterLC(moneyAmount: any): string {
    const currencyFormat = new Intl.NumberFormat("en-US", {
      style: "currency",
      currency: "USD",
    });
    return currencyFormat.format(moneyAmount);
  }

  dateFormatterLC(date: string): string {
    const datePipe = new DatePipe("en-US");
    let formatted = datePipe.transform(date);
    return formatted ? formatted : date;
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Result:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://gifyu.com/image/SqUyB" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3.gifyu.com%2Fimages%2FLineChart.gif" alt="LineChart.gif"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;h3&gt;
  
  
  Number Cards example
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Code Snippets:
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;app.component.html&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

    &amp;lt;ngx-charts-number-card
      [view]="viewNC"
      [animations]="animationsNC"
      [results]="dataNC"
      [scheme]="colorSchemeNC"
      [valueFormatting]="currencyFormatterNC"
    &amp;gt;&amp;lt;/ngx-charts-number-card&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;code&gt;app.component.ts&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  // Options for Number Cards
  dataNC = DummyData.highestAvgAnnualSalary;
  viewNC: [number, number] = [800, 150];
  animationsNC = true;
  colorSchemeNC = "fire";

  currencyFormatterNC(moneyAmount: any): string {
    const currencyFormat = new Intl.NumberFormat("en-US", {
      style: "currency",
      currency: "USD",
    });
    return currencyFormat.format(moneyAmount.value);
  }


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Result:
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://gifyu.com/image/SqUyG" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs9.gifyu.com%2Fimages%2FNumberCards.gif" alt="NumberCards.gif"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Data sets used for the charts can be found in &lt;code&gt;data.ts&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

export const totalNominalGDP = [
  {
    name: "USA",
    value: 23.17,
  },
  {
    name: "China",
    value: 16.28,
  },
  {
    name: "Japan",
    value: 5.15,
  },
  {
    name: "Germany",
    value: 4.25,
  },
  {
    name: "United Kingdom",
    value: 3.09,
  },
];

export const totalPopulation = [
  {
    name: "Rest",
    value: 53.24,
  },
  {
    name: "China",
    value: 18.47,
  },
  {
    name: "India",
    value: 17.7,
  },
  {
    name: "USA",
    value: 4.25,
  },
  {
    name: "Indonesia",
    value: 3.51,
  },
  {
    name: "Pakistan",
    value: 2.83,
  },
];

export const annualWageSalary = [
  {
    name: "USA",
    series: [
      {
        value: 39238,
        name: "2000-09-24T00:33:38.246Z",
      },
      {
        value: 45647,
        name: "2005-09-24T00:33:38.246Z",
      },
      {
        value: 53235,
        name: "2010-09-24T00:33:38.246Z",
      },
      {
        value: 59993,
        name: "2015-09-24T00:33:38.246Z",
      },
      {
        value: 71655,
        name: "2020-09-24T00:33:38.246Z",
      },
    ],
  },
  {
    name: "Bulgaria",
    series: [
      {
        value: 1910,
        name: "2000-09-24T00:33:38.246Z",
      },
      {
        value: 3030,
        name: "2005-09-24T00:33:38.246Z",
      },
      {
        value: 6180,
        name: "2010-09-24T00:33:38.246Z",
      },
      {
        value: 7110,
        name: "2015-09-24T00:33:38.246Z",
      },
      {
        value: 9320,
        name: "2020-09-24T00:33:38.246Z",
      },
    ],
  },
];

export const highestAvgAnnualSalary = [
  {
    name: "Luxembourg",
    value: 128169,
  },
  {
    name: "Switzerland",
    value: 94794,
  },
  {
    name: "Ireland",
    value: 87688,
  },
  {
    name: "Norway",
    value: 85358,
  },
  {
    name: "United States",
    value: 68309,
  },
];




&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;h2&gt;
  
  
  Charts Preview
&lt;/h2&gt;

&lt;p&gt;Developers can use the following URL - &lt;a href="https://swimlane.github.io/ngx-charts/#/ngx-charts/bar-vertical" rel="noopener noreferrer"&gt;Ngx-Charts Showcase&lt;/a&gt;, to explore the different chart types and their customization options in ngx-charts. This URL leads to the ngx-charts demo page, which provides a variety of sample charts that you can interact with and customize.&lt;/p&gt;

&lt;p&gt;Using the preview page, developers can experiment with different chart types, such as line, area, bar, pie, and gauge, and customize their appearance by changing colors, labels, and legends. The page also provides options to enable animations, tooltips, and legends, giving developers a better understanding of the different features available in ngx-charts.&lt;/p&gt;

&lt;p&gt;Overall, the demo page is a great resource for developers who want to get a better understanding of the capabilities of ngx-charts and experiment with different chart types and customization options.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best practices
&lt;/h2&gt;

&lt;p&gt;When using ngx-charts in your Angular project, there are several best practices that you should follow to ensure that you are getting the most out of the library. Here are a few tips to keep in mind:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep your data clean and consistent: Ensure that your data is clean and consistent before passing it to ngx-charts. This will ensure that your charts are accurate and easy to understand.&lt;/li&gt;
&lt;li&gt;Use appropriate chart types: Choose the appropriate chart type based on the data you want to visualize. Select the chart type that best presents your data and insights.&lt;/li&gt;
&lt;li&gt;Customize the appearance: Customize the appearance of your charts to make them visually appealing and on-brand. Use colors, fonts, and layouts that are consistent with the rest of your application.&lt;/li&gt;
&lt;li&gt;Optimize performance: Ensure that your charts are optimized for performance. Use lazy loading or pagination if you are displaying a large amount of data to prevent any performance issues.&lt;/li&gt;
&lt;li&gt;Test thoroughly: Test your charts thoroughly across different devices and screen sizes to ensure that they are displayed correctly and are easily readable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By following these best practices, you can create effective and visually appealing data visualizations using ngx-charts in your Angular project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In conclusion, &lt;a href="https://swimlane.gitbook.io/ngx-charts" rel="noopener noreferrer"&gt;ngx-charts&lt;/a&gt; is a powerful and flexible charting library that can help you add sophisticated data visualization to your Angular projects. With a wide range of chart types, easy customization options, and excellent documentation, ngx-charts makes it easy to build stunning charts that bring your data to life. Whether you're building a data-rich dashboard or a custom reporting tool, ngx-charts can help you create a seamless and intuitive user experience. By following the tips and techniques discussed in this article, you can leverage ngx-charts to enhance the data visualization capabilities of your Angular applications and deliver better insights to your users.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The source code of this article can be found in my &lt;a href="https://github.com/IvanSimeonov/charts-demo" rel="noopener noreferrer"&gt;Github repository&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Contact Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/IvanSimeonov" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📱 &lt;a href="https://www.linkedin.com/in/ivannicksimeonov/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;☕ &lt;a href="https://www.buymeacoffee.com/ivssim" rel="noopener noreferrer"&gt;Buy Me A Coffee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>VS Code Setup for Frontend Devs</title>
      <dc:creator>Ivan Simeonov</dc:creator>
      <pubDate>Thu, 09 Feb 2023 18:35:52 +0000</pubDate>
      <link>https://forem.com/ivannicksimeonov/vs-code-setup-for-frontend-devs-577f</link>
      <guid>https://forem.com/ivannicksimeonov/vs-code-setup-for-frontend-devs-577f</guid>
      <description>&lt;h1&gt;
  
  
  Table of Contents
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Introduction&lt;/li&gt;
&lt;li&gt;Theme&lt;/li&gt;
&lt;li&gt;Icons&lt;/li&gt;
&lt;li&gt;
Extensions

&lt;ul&gt;
&lt;li&gt;Auto Rename Tag&lt;/li&gt;
&lt;li&gt;Auto Close Tag&lt;/li&gt;
&lt;li&gt;Code Spell Checker&lt;/li&gt;
&lt;li&gt;CSS Peek&lt;/li&gt;
&lt;li&gt;DotENV&lt;/li&gt;
&lt;li&gt;Error Lens&lt;/li&gt;
&lt;li&gt;ESLint&lt;/li&gt;
&lt;li&gt;GitLens&lt;/li&gt;
&lt;li&gt;HTML Boilerplate&lt;/li&gt;
&lt;li&gt;HTML CSS Support&lt;/li&gt;
&lt;li&gt;Import Cost&lt;/li&gt;
&lt;li&gt;Live Server&lt;/li&gt;
&lt;li&gt;Markdown Preview Enhanced&lt;/li&gt;
&lt;li&gt;Path Intellisense&lt;/li&gt;
&lt;li&gt;Prettier - Code Formatter&lt;/li&gt;
&lt;li&gt;Project Manager&lt;/li&gt;
&lt;li&gt;REST Client&lt;/li&gt;
&lt;li&gt;Trailing Spaces&lt;/li&gt;
&lt;li&gt;Turbo Console Log&lt;/li&gt;
&lt;li&gt;Version Lens&lt;/li&gt;
&lt;li&gt;Angular Language Service&lt;/li&gt;
&lt;li&gt;ES7 React Redux React Native snippets&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Settings&lt;/li&gt;

&lt;li&gt;Conclusion&lt;/li&gt;

&lt;li&gt;

Contact Me &lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In this article, we will explore my personal setup for Visual Studio Code, the popular open-source code editor. I will share the themes, icons, and extensions that I use on a daily basis to enhance my coding experience. Whether you are a seasoned developer or just starting out, this article will give you some insights and inspiration to optimize your own setup. So, let's dive in and see what makes my VS Code setup unique!&lt;/p&gt;

&lt;h2&gt;
  
  
  Theme
&lt;/h2&gt;

&lt;p&gt;The VS Code theme  I most often use is the &lt;strong&gt;Default Dark+&lt;/strong&gt; theme provided by VS Code default settings, but from time to time, I switch to the &lt;strong&gt;One Dark Pro&lt;/strong&gt;. In general I prefer darker themes, so my eyes are not strained so much.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4g77q0ro47jaem5n1e5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4g77q0ro47jaem5n1e5w.png" alt="One Dark Pro" width="800" height="856"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=zhuangtongfa.Material-theme" rel="noopener noreferrer"&gt;Downlaod One Dark Pro&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Icons
&lt;/h2&gt;

&lt;p&gt;The icon pack that I use is the well-known &lt;strong&gt;Material Icon Theme&lt;/strong&gt;. I love it because it supports almost every file extension and can be customized for everyone's needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fredpgz387pv9m8ikhfhu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fredpgz387pv9m8ikhfhu.png" alt="Material Icon Theme" width="800" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme" rel="noopener noreferrer"&gt;Download Material Icon Theme&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Extensions
&lt;/h2&gt;

&lt;p&gt;Below, I will be discussing the various extensions that I utilize in Visual Studio Code to enhance my coding experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto Rename Tag
&lt;/h3&gt;

&lt;p&gt;Automatically rename paired HTML/XML tag, same as Visual Studio IDE does.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fformulahendry%2Fvscode-auto-rename-tag%2Ff3039ed7263c5ab94c6e2fa9995d3ad265ebc822%2Fimages%2Fusage.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fformulahendry%2Fvscode-auto-rename-tag%2Ff3039ed7263c5ab94c6e2fa9995d3ad265ebc822%2Fimages%2Fusage.gif" alt="Auto Rename Tag - Usage" width="1440" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag" rel="noopener noreferrer"&gt;Download Auto Rename Tag&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Auto Close Tag
&lt;/h3&gt;

&lt;p&gt;Automatically add HTML/XML close tag, same as Visual Studio IDE or Sublime Text does.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fformulahendry%2Fvscode-auto-close-tag%2F492b13866690b3ef54518d8c0ca99754556f78c6%2Fimages%2Fusage.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fformulahendry%2Fvscode-auto-close-tag%2F492b13866690b3ef54518d8c0ca99754556f78c6%2Fimages%2Fusage.gif" alt="Auto Close Tag - Usage" width="1440" height="938"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag" rel="noopener noreferrer"&gt;Download Auto Close Tag&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Spell Checker
&lt;/h3&gt;

&lt;p&gt;A basic spell checker that works well with code and documents.&lt;br&gt;
The goal of this spell checker is to help catch common spelling errors while keeping the number of false positives low.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fstreetsidesoftware%2Fvscode-spell-checker%2Fmain%2Fimages%2Fexample.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fstreetsidesoftware%2Fvscode-spell-checker%2Fmain%2Fimages%2Fexample.gif" alt="Code Spell Checker - Usage" width="745" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker" rel="noopener noreferrer"&gt;Download Code Spell Checker&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  CSS Peek
&lt;/h3&gt;

&lt;p&gt;This extension extends HTML and ejs code editing with Go To Definition and Go To Symbol in Workspace support for css/scss/less (classes and IDs) found in strings within the source code.&lt;/p&gt;

&lt;p&gt;The extension supports all the normal capabilities of symbol definition tracking, but does it for css selectors (classes, IDs and HTML tags). This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Peek: load the css file inline and make quick edits right there. (Ctrl+Shift+F12)&lt;/li&gt;
&lt;li&gt;Go To: jump directly to the css file or open it in a new editor (F12)&lt;/li&gt;
&lt;li&gt;Hover: show the definition in a hover over the symbol (Ctrl+hover)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition, it supports the Symbol Provider so you can quickly jump to the right CSS/SCSS/LESS code if you already know the class or ID name&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fpranaygp%2Fvscode-css-peek%2Fmaster%2Freadme%2Fworking.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fpranaygp%2Fvscode-css-peek%2Fmaster%2Freadme%2Fworking.gif" alt="CSS Peek - Usage" width="571" height="562"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek" rel="noopener noreferrer"&gt;Download CSS Peek&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  DotENV
&lt;/h3&gt;

&lt;p&gt;Syntax Highlighting support for Environment (.env) Files&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmikestead%2Fvscode-dotenv%2Fmaster%2Fimages%2Fscreenshot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmikestead%2Fvscode-dotenv%2Fmaster%2Fimages%2Fscreenshot.png" alt="DotENV - Usage" width="637" height="1041"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv" rel="noopener noreferrer"&gt;Download DotENV&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Error Lens
&lt;/h3&gt;

&lt;p&gt;ErrorLens turbo-charges language diagnostic features by making diagnostics stand out more prominently, highlighting the entire line wherever a diagnostic is generated by the language and also prints the message inline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fusernamehw%2Fvscode-error-lens%2Fmaster%2Fimg%2Fdemo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fusernamehw%2Fvscode-error-lens%2Fmaster%2Fimg%2Fdemo.png" alt="Error Lens - Usage" width="800" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=usernamehw.errorlens" rel="noopener noreferrer"&gt;Download Error Lens&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ESLint
&lt;/h3&gt;

&lt;p&gt;ESLint is a tool for identifying and reporting on patterns found in ECMAScript/JavaScript code, with the goal of making code more consistent and avoiding bugs.&lt;/p&gt;

&lt;p&gt;ESLint is completely pluggable. Every single rule is a plugin and you can add more at runtime. You can also add community plugins, configurations, and parsers to extend the functionality of ESLint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.logrocket.com%2Fwp-content%2Fuploads%2F2021%2F10%2Feslint-quick-fix.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fblog.logrocket.com%2Fwp-content%2Fuploads%2F2021%2F10%2Feslint-quick-fix.gif" alt="ESLint - Usage" width="730" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;Download ESLint&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  GitLens
&lt;/h3&gt;

&lt;p&gt;GitLens supercharges Git inside VS Code and unlocks untapped knowledge within each repository. It helps you to visualize code authorship at a glance via Git blame annotations and CodeLens, seamlessly navigate and explore Git repositories, gain valuable insights via rich visualizations and powerful comparison commands, and so much more.&lt;/p&gt;
&lt;h4&gt;
  
  
  Commit Graph
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcommit-graph-illustrated.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcommit-graph-illustrated.png" alt="GitLens Commit Graph - Usage" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Worktrees
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fworktrees-illustrated.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fworktrees-illustrated.png" alt="GitLens Worktrees - Usage" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Git blame file
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcode-lens.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcode-lens.png" alt="GitLens Git Blame 1 - Usage" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Git blame current line
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcurrent-line-blame.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fcurrent-line-blame.png" alt="GitLens Git Blame 2 - Usage" width="610" height="216"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Git blame status bar
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fstatus-bar.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fgitkraken%2Fvscode-gitlens%2Fmain%2Fimages%2Fdocs%2Fstatus-bar.png" alt="GitLens Git Blame 3 - Usage" width="610" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens" rel="noopener noreferrer"&gt;Download GitLens&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  HTML Boilerplate
&lt;/h3&gt;

&lt;p&gt;This extension provides the standard HTML boilerplate code used in all web applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.postimg.cc%2F8cSYsX41%2Fhtml-boilerplate-1-0-3.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.postimg.cc%2F8cSYsX41%2Fhtml-boilerplate-1-0-3.gif" alt="HTML Boilerplate - Usage" width="600" height="372"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=sidthesloth.html5-boilerplate" rel="noopener noreferrer"&gt;Download HTML Boilerplate&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  HTML CSS Support
&lt;/h3&gt;

&lt;p&gt;HTML id and class attribute completion for Visual Studio Code.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HTML id and class attribute completion.&lt;/li&gt;
&lt;li&gt;Supports linked and embedded style sheets.&lt;/li&gt;
&lt;li&gt;Supports template inheritance.&lt;/li&gt;
&lt;li&gt;Supports additional style sheets.&lt;/li&gt;
&lt;li&gt;Supports other HTML like languages.&lt;/li&gt;
&lt;li&gt;Validates CSS selectors on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0imnpm1svuyfwytp9nvq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0imnpm1svuyfwytp9nvq.png" alt="HTML CSS Support - Usage" width="800" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=ecmel.vscode-html-css" rel="noopener noreferrer"&gt;Download HTML CSS Support&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Import Cost
&lt;/h3&gt;

&lt;p&gt;This extension will display inline in the editor the size of the imported package. The extension utilizes webpack in order to detect the imported size.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcitw.dev%2F_next%2Fimage%3Furl%3D%252fposts%252fimport-cost%252f1quov3TFpgG2ur7myCLGtsA.gif%26w%3D1080%26q%3D75" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcitw.dev%2F_next%2Fimage%3Furl%3D%252fposts%252fimport-cost%252f1quov3TFpgG2ur7myCLGtsA.gif%26w%3D1080%26q%3D75" alt='I"Import' width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=wix.vscode-import-cost" rel="noopener noreferrer"&gt;Download Import Cost&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Live Server
&lt;/h3&gt;

&lt;p&gt;Launch a local development server with live reload feature for static &amp;amp; dynamic pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fritwickdey%2Fvscode-live-server%2F428e01caf02bfa7ee75741df0f02fc9d2b5b0999%2Fimages%2FScreenshot%2Fvscode-live-server-animated-demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fritwickdey%2Fvscode-live-server%2F428e01caf02bfa7ee75741df0f02fc9d2b5b0999%2Fimages%2FScreenshot%2Fvscode-live-server-animated-demo.gif" alt="Live Server - Usage" width="760" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer" rel="noopener noreferrer"&gt;Download Live Server&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Markdown Preview Enhanced
&lt;/h3&gt;

&lt;p&gt;Markdown Preview Enhanced is an extension that provides you with many useful functionalities such as automatic scroll sync, math typesetting, mermaid, PlantUML, pandoc, PDF export, code chunk, presentation writer, etc. A lot of its ideas are inspired by Markdown Preview Plus and RStudio Markdown.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F1908863%2F28495106-30b3b15e-6f09-11e7-8eb6-ca4ca001ab15.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F1908863%2F28495106-30b3b15e-6f09-11e7-8eb6-ca4ca001ab15.png" alt="Markdown Preview Enhanced - Usage" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=shd101wyy.markdown-preview-enhanced" rel="noopener noreferrer"&gt;Download Markdown Preview Enhanced&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Path Intellisense
&lt;/h3&gt;

&lt;p&gt;Visual Studio Code plugin that autocompletes filenames.&lt;br&gt;
To use Path Intellisense instead of the default autocompletion, the following configuration option must be added to your settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{ "typescript.suggest.paths": false }
{ "javascript.suggest.paths": false }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://i.giphy.com/iaHeUiDeTUZuo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/iaHeUiDeTUZuo.gif" alt="Path Intellisense - Usage" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=christian-kohler.path-intellisense" rel="noopener noreferrer"&gt;Download Path Intellisense&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prettier - Code Formatter
&lt;/h3&gt;

&lt;p&gt;Prettier is an opinionated code formatter. It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98op25c50q91ochd9w65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98op25c50q91ochd9w65.png" alt="Prettier - Usage" width="800" height="785"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Download Prettier - Code Formatter&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Manager
&lt;/h3&gt;

&lt;p&gt;It helps you to easily access your projects, no matter where they are located. Don't miss those important projects anymore.&lt;br&gt;
You can define your own Projects (also called Favorites), or choose for auto-detect Git, Mercurial or SVN repositories, VSCode folders, or any other folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy2ofyykflfmfinrqgb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsy2ofyykflfmfinrqgb7.png" alt="Project Manager - Usage" width="412" height="659"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager" rel="noopener noreferrer"&gt;Download Project Manager&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  REST Client
&lt;/h3&gt;

&lt;p&gt;REST Client allows you to send HTTP request and view the response in Visual Studio Code directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHuachao%2Fvscode-restclient%2Fmaster%2Fimages%2Fusage.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FHuachao%2Fvscode-restclient%2Fmaster%2Fimages%2Fusage.gif" alt="REST Client - Usage" width="720" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=humao.rest-client" rel="noopener noreferrer"&gt;Download REST Client&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Trailing Spaces
&lt;/h3&gt;

&lt;p&gt;A VS Code extension that allows you to highlight trailing spaces and delete them in a flash!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F16381287%2F27996497-05825060-64b1-11e7-8f1c-7a827b9f0a6f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F16381287%2F27996497-05825060-64b1-11e7-8f1c-7a827b9f0a6f.gif" alt="Trailing Spaces - Usage" width="759" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces" rel="noopener noreferrer"&gt;Download Trailing Spaces&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Turbo Console Log
&lt;/h3&gt;

&lt;p&gt;This extension make debugging much easier by automating the operation of writing meaningful log message.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimage.ibb.co%2Fdysw7p%2Finsert_log_message.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimage.ibb.co%2Fdysw7p%2Finsert_log_message.gif" alt="Turbo Console Log - Usage" width="600" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=ChakrounAnas.turbo-console-log" rel="noopener noreferrer"&gt;Download Turbo Console Log&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Version Lens
&lt;/h3&gt;

&lt;p&gt;This extension shows version information when opening a package or project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgitlab.com%2Fversionlens%2Fvscode-versionlens%2F-%2Fraw%2Fmaster%2Fimages%2Ffaq%2Fshow-releases.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgitlab.com%2Fversionlens%2Fvscode-versionlens%2F-%2Fraw%2Fmaster%2Fimages%2Ffaq%2Fshow-releases.gif" alt="Version Lens - Usage" width="407" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=pflannery.vscode-versionlens" rel="noopener noreferrer"&gt;Download Version Lens&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Angular Language Service
&lt;/h3&gt;

&lt;p&gt;This extension provides a rich editing experience for Angular templates, both inline and external templates.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fangular%2Fvscode-ng-language-service%2Fmain%2Fdemo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fangular%2Fvscode-ng-language-service%2Fmain%2Fdemo.gif" alt="Angular Language Service - Usage" width="917" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=Angular.ng-template" rel="noopener noreferrer"&gt;Download Angular Language Service&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  ES7 React Redux React Native snippets
&lt;/h3&gt;

&lt;p&gt;JavaScript and React/Redux snippets in ES7+ with Babel plugin features for VS Code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AnSYdau-OFSbwL2XV3q1QHA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F1400%2F1%2AnSYdau-OFSbwL2XV3q1QHA.gif" alt="ES7+ React/Redux/React-Native snippets - Usage" width="600" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=dsznajder.es7-react-js-snippets" rel="noopener noreferrer"&gt;Download ES7+ React/Redux/React-Native snippets&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;p&gt;The Docker extension makes it easy to build, manage, and deploy containerized applications from Visual Studio Code. It also provides one-click debugging of Node.js, Python, and .NET Core inside a container.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvscode-docker%2F22ac7d0af4fd2ce572ee7e87bde125733add42f8%2Fresources%2Freadme%2Fdocker-view-context-menu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvscode-docker%2F22ac7d0af4fd2ce572ee7e87bde125733add42f8%2Fresources%2Freadme%2Fdocker-view-context-menu.gif" alt="Docker - Usage" width="531" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker" rel="noopener noreferrer"&gt;Download Docker&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Kubernetes
&lt;/h3&gt;

&lt;p&gt;The extension for developers building applications to run in Kubernetes clusters and for DevOps staff troubleshooting Kubernetes applications.&lt;br&gt;
Works with any Kubernetes anywhere (Azure, Minikube, AWS, GCP and more!).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcode.visualstudio.com%2Fassets%2Fdocs%2Fazure%2Fkubernetes%2Fcreate-manifest.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcode.visualstudio.com%2Fassets%2Fdocs%2Fazure%2Fkubernetes%2Fcreate-manifest.gif" alt="Kubernetes - Usage" width="1842" height="1112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;⬇️ &lt;a href="https://marketplace.visualstudio.com/items?itemName=ms-kubernetes-tools.vscode-kubernetes-tools" rel="noopener noreferrer"&gt;Download Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Settings
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;JSON&lt;/code&gt; code below, shows my current VS Code settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// settings.json

{
  "breadcrumbs.enabled": true,
  "breadcrumbs.icons": true,
  "[css]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "editor.fontSize": 14,
  "editor.fontFamily": "Menlo, Monaco, 'Courier New', monospace",
  "editor.fontWeight": "normal",
  "editor.wordWrap": "on",
  "editor.autoClosingBrackets": "always",
  "editor.autoClosingQuotes": "always",
  "editor.autoClosingDelete": "always",
  "editor.codeLens": true,
  "editor.codeLensFontSize": 12,
  "editor.bracketPairColorization.enabled": true,
  "editor.guides.highlightActiveBracketPair": true,
  "editor.guides.bracketPairs": "active",
  "editor.minimap.size": "fit",
  "editor.minimap.scale": 1,
  "editor.defaultFormatter": "esbenp.prettier-vscode",
  "editor.formatOnSave": true,
  "editor.formatOnPaste": true,
  "editor.formatOnType": true,
  "editor.tabSize": 2,
  "editor.fastScrollSensitivity": 6,
  "editor.renderWhitespace": "none",
  "editor.accessibilitySupport": "off",
  "emmet.includeLanguages": {
    "javascript": "javascriptreact",
    "typescript": "typescriptreact"
  },
  "errorLens.enabled": true,
  "files.autoSave": "afterDelay",
  "files.autoSaveDelay": 500,
  "files.defaultLanguage": "${activeEditorLanguage}",
  "git.autofetch": true,
  "html.format.indentInnerHtml": true,
  "[html]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "javascript.updateImportsOnFileMove.enabled": "always",
  "[javascript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[json]": {
    "editor.defaultFormatter": "vscode.json-language-features"
  },
  "keyboard.touchbar.enabled": true,
  "liveServer.settings.donotShowInfoMsg": true,
  "liveServer.settings.CustomBrowser": "chrome",
  "liveServer.settings.port": 4201,
  "[markdown]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "terminal.integrated.fontSize": 14,
  "workbench.colorTheme": "Default Dark+",
  "workbench.iconTheme": "material-icon-theme",
  "workbench.editor.enablePreview": false,
  "workbench.startupEditor": "newUntitledFile",
  "workbench.editor.wrapTabs": true,
  "[typescriptreact]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "[typescript]": {
    "editor.defaultFormatter": "esbenp.prettier-vscode"
  },
  "redhat.telemetry.enabled": false,
  "typescript.suggest.paths": false,
  "javascript.suggest.paths": false
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, I shared my personalized Visual Studio Code setup, including the themes, icons, and extensions that I use on a daily basis. These tools help me to streamline my workflow, increase productivity, and provide a visually appealing interface. The combination of these elements is tailored to meet my specific needs and enhance my overall experience with the code editor. By sharing this setup, I hope to inspire others to customize their own VS Code environment and find the tools that work best for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Contact Me
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/IvanSimeonov" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📱 &lt;a href="https://www.linkedin.com/in/ivannicksimeonov/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;☕ &lt;a href="https://www.buymeacoffee.com/ivssim" rel="noopener noreferrer"&gt;Buy Me A Coffee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vibecoding</category>
      <category>refactorit</category>
      <category>productivity</category>
      <category>career</category>
    </item>
  </channel>
</rss>
