Voltar para o Blog
Internacionalização no Vue 3

Internacionalização no Vue 3

Domine a internacionalização no Vue 3 com vue-i18n. Um guia completo para implementar suporte multi-idiomas em aplicações Vue.


Primeiro instale a biblioteca

Você precisa instalar a lib do vue-i18n@9

npm install vue-i18n@9 --save

Crie o arquivo de configuração nos seus arquivos src do Vue App

Arquivo com o nome i18n.js e este conteúdo abaixo

import { nextTick } from 'vue';
import { createI18n } from 'vue-i18n';

let i18n;

export const SUPPORT_LOCALES = ['pt', 'en', 'es'];

export function setI18nLanguage(locale) {
  loadLocaleMessages(locale);

  if (i18n.mode === 'legacy') {
    i18n.global.locale = locale;
  } else {
    i18n.global.locale.value = locale;
  }

  document.querySelector('html').setAttribute('lang', locale);
  localStorage.setItem('lang', locale);
}

export async function loadLocaleMessages(locale) {
  // carrega mensagens de localidade com importação dinâmica
  const messages = await import(
    /* webpackChunkName: "locale-[request]" */ `./locales/${locale}.json`
  );

  // define localidade e mensagem de localidade
  i18n.global.setLocaleMessage(locale, messages.default);

  return nextTick();
}

export default function setupI18n() {
  if(!i18n) {
    let locale = localStorage.getItem('lang') || 'pt';

    i18n = createI18n({
      globalInjection: true,
      legacy: false,
      locale: locale,
      fallbackLocale: 'pt'
    });

    setI18nLanguage(locale);
  }
  return i18n;
}

Importe este arquivo i18n.js no seu main.js do Vue

Use este import do arquivo i18n.js na configuração do App

import i18n from './i18n';

Exemplo com main.js com import

Próximo exemplo com implementação de import no seu Vue com .use(i18n())

import { createApp } from 'vue'

import App from './App.vue'

import i18n from './i18n';

createApp(App)
  .use(i18n())
  .mount('#app')

Está ótimo, agora você precisa criar seus arquivos de tradução e usar nos seus componentes

Crie Arquivos de localidades traduzidas

Na pasta src você precisa criar esta pasta com o nome locales e na pasta locales você cria todos os arquivos json com nome de exemplo en.json ou pt.json ou es.json com suas ocorrências de tradução seguindo este exemplo json abaixo

nome do arquivo: locales/en.json

{
  "languages": {
    "pt": "Portuguese",
    "en": "English",
    "es": "Spanish"
  },
  "title": {
    "config": "Configuration"
  }
}

nome do arquivo: locales/pt.json

{
  "languages": {
    "pt": "Português",
    "en": "Inglês",
    "es": "Espanhol"
  },
  "title": {
    "config": "Configurações"
  }
}

nome do arquivo: locales/es.json

{
  "languages": {
    "pt": "Portugués",
    "en": "Inglés",
    "es": "Español"
  },
  "title": {
    "config": "Configurações"
  }
}

Muito bom, arquivos com traduções inglês, português e espanhol

Agora use sua tradução em componentes

Agora você precisa usar a tradução no componente e criar um select ou botão para mudar o idioma da localidade com o hook global useI18n

Um exemplo básico de uso no componente com um select para mudança de idioma

<script setup>
import { watch } from 'vue';
import { useI18n } from 'vue-i18n';
import { SUPPORT_LOCALES as supportLocales, setI18nLanguage } from '../i18n';

const { locale } = useI18n({ useScope: 'global' });
watch(locale, (val) => {
  setI18nLanguage(val);
});
</script>

<template>
  <h1>{{ $t('title.config') }}</h1>
  <select class="App-language" v-model="locale">
    <option
      v-for="optionLocale in supportLocales"
      :key="`locale-${optionLocale}`"
      :value="optionLocale">{{ optionLocale }}
    </option>
  </select>
</template>

Pronto, você é um bom hacker e seu Vue 3 tem internacionalização com vários idiomas e acesso internacional para muitas pessoas em todo o mundo. Bons estudos e um ótimo #hacktoberfest

Referências

Se precisar de referências, siga a lista abaixo com mais exemplos

Precisa de ajuda?

Comente ou fale comigo Tenho prazer em ajudar você e prazer em conhecê-lo.

Obrigado por ler!

Quer conversar sobre o tema ou tem um projeto em mente? Vamos nos falar.