Skip to content

Subconjunto de tamaño pequeño de Vue I18n

petite-vue-i18n es una distribución alternativa de Vue I18n, que proporciona solo características mínimas.

¿Cuál es la diferencia con Vue I18n?

  • El tamaño es más pequeño que vue-i18n
    • CDN o sin un Bundler
      • Reducción del tamaño del paquete: runtime + compiler ~32%, runtime solo ~45%
      • petite-vue-i18n: runtime + compiler ~9.61KB, runtime solo ~5.51KB (build de producción, compresión brotli)
      • vue-i18n: runtime + compiler ~14.18KB, runtime solo ~10.12KB (build de producción, compresión brotli)
    • Módulos ES para navegador
      • Reducción del tamaño del paquete: runtime + compiler ~32%, runtime solo ~45%
      • petite-vue-i18n: runtime + compiler ~10.51KB, runtime solo ~6.20KB (build de producción, compresión brotli)
      • vue-i18n: runtime + compiler ~15.40KB, runtime solo ~11.12KB (build de producción, compresión brotli)
    • Tamaño del paquete de la aplicación
  • La API heredada no es compatible, solo la API de composición
  • Las APIs para los siguientes formatos de fecha y hora, formatos numéricos y utilidades no están incluidas. Solo traducción
    • n, $n
    • d, $d
    • rt, $rt
    • tm, $tm
    • getDateTimeFormat, setDateTimeFormat, mergeDateTimeFormat
    • getNumberFormat, setNumberFormat, mergeNumberFormat
  • Los únicos mensajes locales que se pueden manejar son clave-valores simples. Si necesitas manejar mensajes locales jerárquicos, necesitas personalizarlos usando la API
  • El algoritmo de fallback local es el orden del array especificado en fallbackLocale
  • La directiva personalizada v-t no está incluida
  • Los siguientes componentes proporcionados por vue-i18n no están incluidos
    • Traducción i18n-t
    • Formato de Fecha y Hora i18n-d
    • Formato Numérico i18n-n

Caso de uso de petite-vue-i18n

vue-i18n incluye varias características i18n tales como traducción, formato de fechas y formatos numéricos. Algunos proyectos solo utilizan la traducción y no los formatos de fecha. Actualmente, incluso en ese caso, el código para esa característica está incluido.

Si tu proyecto solo usa las API t o $t para traducción, te recomendamos usar petite-vue-i18n mejor que vue-i18n. Y si tu proyecto necesita las funciones de vue-i18n, puedes migrar fácilmente desde petite-vue-i18n hacia vue-i18n. Esto significa que es una mejora progresiva.

Instalación

Básicamente, es lo mismo que instalar vue-i18n. La única diferencia es que la parte de la URL o ruta se cambia de vue-i18n a petite-vue-i18n.

CDN

Necesitas insertar los siguientes scripts al final de <head>:

html
<script src="https://unpkg.com/vue@next"></script>
<script src="https://unpkg.com/petite-vue-i18n"></script>

El siguiente es el código de aplicación con la etiqueta script:

html
<script>
const { createApp } = Vue
const { createI18n } = PetiteVueI18n

const i18n = createI18n({
  // opciones de vue-i18n aquí...
})

const app = createApp({
  // opciones de vue aquí...
})

app.use(i18n)
app.mount('#app')
</script>

Gestores de paquetes

sh
npm install petite-vue-i18n@next --save
sh
yarn add petite-vue-i18n@next
sh
pnpm add petite-vue-i18n@next
js
import { createApp } from 'vue'
import { createI18n } from 'petite-vue-i18n'

const i18n = createI18n({
  // opciones de vue-i18n aquí...
})

const app = createApp({
  // opciones de vue aquí...
})

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

Usos

Hola mundo

Plantilla:

html
<div id="app">
  <h1>{{ t('hello world') }}</h1>
</div>

Scripts:

js
const { createApp } = Vue
const { createI18n, useI18n } = PetiteVueI18n
// o para módulos ES
// import { createApp } from 'vue'
// import { createI18n } from 'petite-vue-i18n'

const i18n = createI18n({
  locale: 'en',
  messages: {
    en: {
      'hello world': 'Hello world!'
    },
    ja: {
      'hello world': 'こんにちは、世界!'
    }
  }
})

// definir componente App
const App = {
  setup() {
    const { t } = useI18n()
    return { t }
  }
}

const app = createApp(App)

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

Usar el mismo resolvedor de mensajes y fallback de idioma como vue-i18n

En petite-vue-i18n, el resolvedor de mensajes y el fallback de idioma usan implementaciones simples para optimizar el tamaño del código, tal como se describe en la sección de diferencias, como se muestra abajo:

  • resolvedor de mensaje
    • Resuelve mensajes locales estilo clave-valor
    • Acerca de la implementación, mira aquí
  • fallback de idioma
    • Hace fallback según el orden del array especificado en fallbackLocale
    • Si se especifica un idioma simple como cadena, hace fallback a ese idioma
    • Acerca de la implementación, mira aquí

Si quieres usar el mismo resolvedor de mensajes y fallback de idioma como vue-i18n, puedes cambiarlos usando la API.

Ten en cuenta que por ahora, solo se soportan empaquetadores como vite y webpack.

Necesitas instalar @intlify/core-base en tu proyecto con un gestor de paquetes.

sh
npm install --save @intlify/core-base@next
sh
yarn add @intlify/core-base@next
sh
pnpm add @intlify/core-base@next

Entonces, en el punto de entrada de la aplicación, configura el resolvedor de mensajes y fallback de idioma usando la API como se muestra a continuación:

js
import { createApp } from 'vue'
import {
  createI18n,
  registerMessageResolver, // registrar la API del resolvedor de mensajes
  registerLocaleFallbacker, // registrar la API del fallback de idioma
} from 'petite-vue-i18n'
import {
  resolveValue, // resolvedor de mensajes de vue-i18n usado por defecto
  fallbackWithLocaleChain // fallback de idioma de vue-i18n usado por defecto
} from '@intlify/core-base'

// registrar resolvedor de mensajes de vue-i18n
registerMessageResolver(resolveValue)

// registrar fallback de idioma de vue-i18n
registerLocaleFallbacker(fallbackWithLocaleChain)

// código adicional...
// ...

Con la configuración anterior, el resolución de mensajes locales y el fallback de idioma se manejarán de la misma manera que en vue-i18n, ten en cuenta que el tamaño del código aumentará ligeramente.

Configurar el plugin del empaquetador

Si estás construyendo tu aplicación con una herramienta de compilación como vite, debes configurarla. Por favor establece la opción 'module' en @intlify/unplugin-vue-i18n en la configuración como se muestra a continuación.

NOTE

Sobre la configuración de @intlify/unplugin-vue-i18n, mira la sección 'rendimiento' y la documentación de @intlify/unplugin-vue-i18n

IMPORTANT

La versión de @intlify/unplugin-vue-i18n debe ser 5.1.0 o superior

diff
 // vite.config.ts
 import { defineConfig } from 'vite'
 import { resolve, dirname } from 'node:path'
 import { fileURLToPath } from 'url'
 import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'

 export default defineConfig({
   /* ... */
   plugins: [
     /* ... */
     VueI18nPlugin({
       /* opciones */
+      module: 'petite-vue-i18n',
       // opción de pre-compilación de recursos de mensajes locales
       include: resolve(dirname(fileURLToPath(import.meta.url)), './path/to/src/locales/**'),
     }),
   ],
 })

Cambiar sin modificar el identificador de importación

Puedes cambiar desde vue-i18n a petite-vue-i18n en tu aplicación usando alias npm sin modificar el identificador de importación.

package.json:

diff
 {
   // ...
   "dependencies": {
     "vue": "^3.4.14",
-     "vue-i18n": "^10.0.0"
+     "vue-i18n": "npm:petite-vue-i18n@^10.0.0"
   },
 }

Necesitas @intlify/unplugin-vue-i18n para construir tu aplicación.