Internacionalización con Vue I18n: configurar multiidioma
Clase 51 de 53 • Curso Profesional de Vue.js 2
Contenido del curso
CLI y Dev Tools
- 3

Instalación de Vue.js: Node, Dev Tools y CLI
06:13 min - 4

Crear una aplicación Vue con CLI y webpack
12:49 min - 5

Cómo funciona webpack.config.js
10:38 min - 6

Babel: transpilador de JavaScript moderno
05:06 min - 7

ESLint con Standard JS: linteo automático en webpack
15:34 min - 8

Configuración de Sass y Bulma en Vue
06:18 min - 9

Cómo configurar Pug en Vue con webpack
04:23 min - 10
Diseño de Mockups: Práctica y Colaboración en Comunidad
00:20 min - 11
Creación de Vistas con Mockups y Vue.js
00:32 min
Manipulación del DOM
- 12

Expresiones en Vue: sintaxis doble llave
03:49 min - 13

Diferencia entre v-show y v-if en el DOM
06:22 min - 14

Qué es data binding en Vue.js
04:11 min - 15

Computed properties en Vue.js: cómo crearlas
04:13 min - 16

Qué son los watchers de Vue
02:25 min - 17

Eventos Vue: directiva v-on y métodos format
06:12 min - 18

Cómo construir una interfaz de búsqueda completa en Vue
19:03 min - 19
Manipulación del DOM con Vue.js: Práctica y Ejercicios
03:00 min
REST y HTTP
Sistema de Componentes
- 23

Cómo crear componentes en Vue
08:46 min - 24

Componentes Layout en Vue con Bulma
09:50 min - 25

Reactividad en Vue: $set y Object.assign
06:14 min - 26

Hooks del ciclo de vida en Vue.js
05:38 min - 27

Comunicación padre-hijo con props en Vue
23:27 min - 28

Eventos en Vue: comunicar hijo a padre
12:04 min - 29

Slots: HTML dinámico en componentes Vue
13:42 min - 30

Plugin Event Bus: comunicar componentes sin relación en Vue
19:19 min
Vue Router
Extendiendo VueJS
Clases, Animaciones y Transiciones36
Vuex
- 39

Cómo Vuex centraliza estados en Vue
03:41 min - 40

Instalación de Vuex con estado único
17:32 min - 41

Cómo usar mutations y commit en Vuex
08:16 min - 42

Getters de Vuex: mapGetters y store sincronizado
07:35 min - 43

Cómo dispatch ejecuta actions asincrónicas en ViewX
07:54 min - 44

Instalación de Viewex en Platzi Music
26:37 min
Nuxt.js
Deploy a Producción con Now
Conclusiones
Bonus
La internacionalización en Vue puede ser simple y confiable si se usa bien. Aquí verás cómo implementar soporte multiidioma con la librería vue-i18n, desde la instalación hasta el cambio de idioma en vivo, usando un objeto de mensajes y la función $t para renderizar textos. Todo con prácticas claras y repetibles en proyectos reales.
¿Qué es la internacionalización y cómo ayuda vue i18n?
La internacionalización, también llamada I dieciocho N, es la capacidad de una aplicación para funcionar en distintos idiomas y regiones. Con vue-i18n —no oficial, pero mantenida por un contribuidor activo— se logra una configuración rápida, soporte para múltiples idiomas y buena experiencia en producción. La idea central: traducir textos a partir de un objeto JavaScript y usar un plugin para exponer métodos de traducción en los componentes.
¿Cómo instalar y preparar el plugin?
- Instala la librería con npm:
npm i -S vue-i18n
- Crea src/i18n.js, importa Vue y vue-i18n, e inicializa el plugin.
// src/i18n.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
const messages = {
en: {
search: 'search',
about: 'about'
},
es: {
search: 'búsqueda',
about: 'nosotros'
}
}
const i18n = new VueI18n({
messages,
locale: 'en' // idioma por defecto
})
export default i18n
- Inserta i18n en main.js para inyectarlo como plugin y habilitar sus métodos en los componentes.
// main.js
import Vue from 'vue'
import App from './App.vue'
import i18n from '@/i18n'
new Vue({
i18n,
render: h => h(App)
}).$mount('#app')
¿Qué estructura de mensajes necesitas?
- Usa un objeto messages con una clave por idioma, por ejemplo en y es.
- Define claves de texto consistentes: search y about en ambos idiomas.
- Mantén las mismas keys en todos los idiomas para evitar errores.
¿Cómo aplicar las traducciones en los componentes?
El método central es $t: recibe una clave como string y devuelve el texto traducido según el idioma activo. Evita valores sin comillas: Vue intentará buscarlos en data.
¿Cómo usar la función $t de forma segura?
- Pasa siempre la clave entre comillas: '$t(\'search\')'.
- Verifica que la clave exista en cada idioma dentro de messages.
- Mantén nombres cortos y semánticos para las claves.
Ejemplo en Header.vue reemplazando textos fijos por claves:
<!-- Header.vue -->
<template>
<nav>
<a>{{ $t('search') }}</a>
<a>{{ $t('about') }}</a>
</nav>
</template>
¿Cómo permitir el cambio de idioma en tiempo real?
Agrega opciones en el header con un método selectLang que actualice this.$i18n.locale. El cambio es reactivo y actualiza los textos al instante.
<template>
<nav>
<a @click="selectLang('en')">🇬🇧</a>
<a @click="selectLang('es')">🇪🇸</a>
<a>{{ $t('search') }}</a>
<a>{{ $t('about') }}</a>
</nav>
</template>
<script>
export default {
methods: {
selectLang(lang) {
this.$i18n.locale = lang
}
}
}
</script>
- Cambiar locale en tiempo real: usa this.$i18n.locale con el valor recibido.
- El plugin expone $i18n y $t en los componentes una vez inyectado.
- La UI alterna entre inglés y español mostrando search/about o búsqueda/nosotros.
¿Qué habilidades y keywords consolidas al implementar i18n?
Dominas una secuencia clara que acelera la adopción de multiidioma y mejora la mantenibilidad del código.
- Instalación con npm i -S vue-i18n.
- Registro del plugin con Vue.use(VueI18n).
- Diseño de un objeto messages por idioma.
- Consistencia de claves: la misma key en todos los idiomas.
- Uso de $t para renderizar traducciones.
- Cambio dinámico de locale con this.$i18n.locale.
- Inyección del plugin desde main.js para disponibilidad global.
- Integración con router y mención a reactividad junto a Vuex en el flujo general.
¿Tienes dudas sobre cómo organizar las claves o escalar a más idiomas? Comparte tu caso en los comentarios y conversemos soluciones prácticas.