Figa documentation

Multi-Language Support


Considering that there will be users from multiple different countries, you might need to add the support for multiple help you with that, we have made the template compatible with the multiple language functionality.

You can find the dropdown that changes the language in the header.

How does multi-language functionality works?

We have used the packages @ngx-translate/core and @ngx-translate/http-loader, you can install it by running the following commands in the terminal.

npm install @ngx-translate/core

npm install @ngx-translate/http-loader

You will find language translator logic and design at below given path:

src ==> app ==> shared ==> components ==> header ==> widgets ==>header-language

Implementing Language Translate Feature


After you finished installing above mentioned packages in your project, follow the below given steps to add the multi-language support.

languages.components.html

Our Html component for language translate will look like this

<div (clickOutside)="closeMenu()" class="text-language position-relative"
 [ngClass]="{ 
  'border-language': router.url === '/home/cafe' || router.url === '/home/marketing' || router.url === '/home/digital-agency', 
  'button-language': router.url === '/home/my-wedding' || router.url === '/home/portfolio' || router.url === '/home/startup'}" >
  <button class="btn dropdown-toggle" type="button" (click)="openMenu()">
    <i class="flag-icon flag-icon-{{ selectedLanguage.icon }}"></i> {{ selectedLanguage.code | uppercase }}
  </button>
  <ul class="dropdown-menu language-dropdown" [class.show]="open">
    @for(language of languages; track language){
    <li>
      <a href="javascript:void(0)" class="dropdown-item" (click)="selectLanguage(language)" [class.active]="language.code === selectedLanguage.code">
        <div class="flag-icon flag-icon-{{ language.icon }}"></div>
        <span> {{ language.language }}</span>
      </a>
    </li>
    }
  </ul>
</div>
languages.components.ts

Language change logic and configuration:

import { CommonModule } from '@angular/common';
import { Component } from '@angular/core';
import { Router } from '@angular/router';

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

import { OutsideDirective } from '@app/shared/directives/outside.directive';
import { languages } from '@app/shared/interface/menu';

@Component({
  selector: 'app-header-language',
  imports: [OutsideDirective, CommonModule],
  templateUrl: './header-language.component.html',
  styleUrl: './header-language.component.scss',
})
export class HeaderLanguageComponent {
  public open: boolean = false;
  public languages: languages[] = [
    {
      language: 'English',
      code: 'en',
      icon: 'us',
    },
    {
      language: 'Français',
      code: 'fr',
      icon: 'fr',
    }, // Add More Language
  ];

  public selectedLanguage: languages = {
    language: 'English',
    code: 'en',
    icon: 'us',
  };

  constructor(
    private translate: TranslateService,
    public router: Router,
  ) {}

  ngOnInit() {
    let language = localStorage.getItem('language');

    if (language == null) {
      localStorage.setItem('language', JSON.stringify(this.selectedLanguage));
      this.translate.use(this.selectedLanguage.code);
    } else {
      this.selectedLanguage = JSON.parse(language);
      this.translate.use(this.selectedLanguage.code);
    }
  }

  selectLanguage(language: languages) {
    this.open = false;
    this.translate.use(language.code);
    this.selectedLanguage = language;
    localStorage.setItem('language', JSON.stringify(this.selectedLanguage));
  }

  openMenu() {
    this.open = !this.open;
  }

  closeMenu() {
    this.open = false;
  }
}

JSON files for different languages

To translate words we have to provide the translation for each word, that we will do in a json file.

languages JSON for english Language en.json
{
  "home": "Home",
  "design_agency": "Design Agency",
  "digital_agency": "Digital Agency",
  "ad_agency": "Ad Agency",
  "consultancy_demo": "Consultancy",
  "marketing": "Marketing",
  "portfolio": "Portfolio",
  "seo_agency": "SEO Agency",
  "startup": "Startup",
  "my_wedding": "My Wedding",
  "charity": "Charity",
  "event": "Event",
  "wedding_planner": "Wedding Planner",
  "cafe": "Cafe",
}
languages JSON for french Language fr.json
{
  "home": "Accueil",
  "design_agency": "Agence de Design",
  "digital_agency": "Agence Digitale",
  "ad_agency": "Agence de Publicité",
  "consultancy_demo": "Conseil",
  "marketing": "Marketing",
  "portfolio": "Portfolio",
  "seo_agency": "Agence SEO",
  "startup": "Start-up",
  "my_wedding": "Mon Mariage",
  "charity": "Charité",
  "event": "Événement",
  "wedding_planner": "Organisateur de Mariage",
  "cafe": "Café",
}

Now We just need to configure the settings for language change in our app.config.ts file. Add the following code in your app.config.ts file.

{
  import { ApplicationConfig, importProvidersFrom } from '@angular/core';
  import { provideRouter } from '@angular/router';
  
  import { HttpClient, HttpClientModule } from '@angular/common/http';
  import { BrowserModule } from '@angular/platform-browser';
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
  import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
  import { routes } from './app.routes';
  
  export function HttpLoaderFactory(http: HttpClient) {
    return new TranslateHttpLoader(http, "./assets/i18n/", ".json");
  }
  
  export const appConfig: ApplicationConfig = {
    providers: [
      provideRouter(routes),
      importProvidersFrom(
        BrowserModule,
        HttpClientModule,
        BrowserAnimationsModule,
        TranslateModule.forRoot({
        loader: {
          provide: TranslateLoader,
          useFactory: HttpLoaderFactory,
          deps: [HttpClient],
        },
        defaultLanguage: 'en'
      }),
      )
    ]
  };
  }

For Example:

Use a variable as follows:

<h4>{{  some_variable | translate }}></h4>

Warning: Make sure that if you are using a variable then you have added the translation for every word possible in that variable in the jsonfile.