Introducción a Vue-i18n: Creando Sitios Web Multilingües desde Cero

Configuración Inicial

Para comenzar, necesitamos un proyecto Vue base. Utilizaremos Vue CLI para la creación, ya que simplifica el proceso inicial:

npm install -g @vue/cli
vue create mi-proyecto-multilingüe
cd mi-proyecto-multilingüe

Instalación de Vue-i18n

Una vez con el proyecto base, procedemos a instalar el paquete de internacionalización:

npm install vue-i18n

Estructura de Archivos

Organizareoms los archivos de idioma en una carpeta dedicada. Dentro del directorio src, creamos una carpeta locales con los archivos de traducción:

  • src/locales/es.js (Español)
  • src/locales/en.js (Inglés)

Creación de Archivos de Traducción

En cada archivo, definimos las traducciones como objetos JavaScript:

// src/locales/es.js
export default {
  mensaje: '¡Hola Mundo!',
  boton: 'Cambiar Idioma',
  titulo: 'Sitio Web Multilingüe'
}

// src/locales/en.js
export default {
  mensaje: 'Hello World!',
  boton: 'Switch Language',
  titulo: 'Multilingual Website'
}

Configuración Principal

Modificamos el archivo main.js para inicializar Vue-i18n:

import Vue from 'vue'
import VueI18n from 'vue-i18n'
import App from './App.vue'

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: 'es', // idioma por defecto
  fallbackLocale: 'en', // idioma alternativo
  messages: {
    es: require('./locales/es.js'),
    en: require('./locales/en.js')
  }
})

new Vue({
  i18n,
  render: h => h(App)
}).$mount('#app')

Implementación en Componentes

En nuestros componentes Vue, utilizamos el método $t para acceder a las traducciones:

<template>
  <div>
    <h1>{{ $t('titulo') }}</h1>
    <p>{{ $t('mensaje') }}</p>
    <button @click="alternarIdioma">{{ $t('boton') }}</button>
  </div>
</template>

<script>
export default {
  methods: {
    alternarIdioma() {
      const nuevoIdioma = this.$i18n.locale === 'es' ? 'en' : 'es';
      this.$i18n.locale = nuevoIdioma;
      // Guardar preferencia en localStorage
      localStorage.setItem('idioma', nuevoIdioma);
    }
  },
  created() {
    // Restaurar idioma guardado
    const idiomaGuardado = localStorage.getItem('idioma');
    if (idiomaGuardado) {
      this.$i18n.locale = idiomaGuardado;
    }
  }
}
</script>

Consideraciones Técnicas

Al implementar Vue-i18n, es importante tener en cuenta:

  • Consistencia en las claves de traducción entre idiomas
  • Manejo de contenido dinámico con parámetros
  • Adaptación de diseños para diferentes longitudes de texto
  • Persistencia de la preferencia de idioma del usuario

Avanzado: Formateo de Fechas y Números

Vue-i18n permite extender la funcionalidad para formatear fechas y números según la configuración regional:

// En main.js
import { createI18n } from 'vue-i18n'
import { createDateFormat } from '@intlify/vue-i18n-bridge'

const i18n = createI18n({
  legacy: false,
  locale: 'es',
  messages: {
    es: {
      formatoFecha: new Intl.DateTimeFormat('es-ES', { 
        year: 'numeric', 
        month: 'long', 
        day: 'numeric' 
      })
    },
    en: {
      formatoFecha: new Intl.DateTimeFormat('en-US', { 
        year: 'numeric', 
        month: 'long', 
        day: 'numeric' 
      })
    }
  }
})

// En componente
const fecha = new Date()
console.log(this.$i18n.formatoFecha.format(fecha))

Conclusión

Vue-i18n ofrece una solución robusta y flexible para la internacionalización en aplicaciones Vue. Con una configuración inicial sencilla y una API intuitiva, los desarrolladores pueden implementar soporte multilingüe de manera eficiente, mejorando la accesibilidad y alcance de sus proyecots.

Etiquetas: vue.js vue-i18n Internacionalización i18n desarrollo web multilingüe

Publicado el 7-27 12:09