Package Exports
- @intlify/vue-i18n-extensions
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@intlify/vue-i18n-extensions) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
๐ @intlify/vue-i18n-extensions
Extensions for vue-i18n
NOTE: โ ๏ธ This next branch is development branch for Vue 3! The version for Vue 2 is now in master branch!
This library exports the following extensions:
โญ Features
- Server-side rendering for
v-tcustom directive - Pre-Translation
๐ฟ Installation
$ npm i --save-dev @intlify/vue-i18n-extensions@next๐ Extensions
Server-side rendering for v-t custom directive
You can use tnrasform offered with this package, to support Server-side rendering for v-t custom directives.
In order to use this feature, you need to specify to Vue compiler option.
The following example that use compile of @vue/compiler-ssr:
import * as runtimeDom from '@vue/runtime-dom'
import { compile } from '@vue/compiler-ssr'
import { defineComponent, createSSRApp } from 'vue'
import { renderToString } from '@vue/server-renderer'
import { createI18n, useI18n } from 'vue-i18n'
import { transformVTDirective } from '@intlify/vue-i18n-extensions'
// create i18n instance
const i18n = createI18n({
locale: 'ja',
messages: {}
})
// get transform from `transformVTDirective` function
const transformVT = transformVTDirective()
// compile your source
const source = `<div v-t="{ path: 'dessert', locale: 'en', plural: 2, args: { name: 'banana' } }"/>`
const { code } = compile(source, {
mode: 'function',
directiveTransforms: { t: transformVT } // <- you need to specify to `directiveTransforms` option!
})
// render functionalization
const render = Function('require', 'Vue', code)(require, runtimeDom)
// e.g. set render function to App component
const App = defineComponent({
setup() {
return useI18n({
locale: 'en',
inheritLocale: false,
messages: {
en: {
apple: 'no apples | one apple | {count} apples',
banana: 'no bananas | {n} banana | {n} bananas',
dessert: 'I eat @:{name}!'
}
}
})
},
ssrRender: render
})
// create SSR app
const app = createSSRApp(App)
// install vue-i18n
app.use(i18n)
console.log(await renderToString(app))
// output -> <div>I eat 2 bananas!</div>`Pre-Translation with using v-t custom directive
You can pre-translation i18n locale messsages of vue-i18n.
โ ๏ธ NOTE: Only the scope of global i18n locale messages can be pre-translated !!
โ ๏ธ NOTE: Currently only
v-tcustom directive is supported !!
In order to use this feature, you need to specify to Vue compiler option.
The following example that use compile of @vue/compiler-dom:
import { compile } from '@vue/compiler-dom'
import { createI18n } from 'vue-i18n'
import { transformVTDirective } from '@intlify/vue-i18n-extensions'
// create i18n instance
const i18n = createI18n({
locale: 'ja',
messages: {
en: {
hello: 'hello'
},
ja: {
hello: 'ใใใซใกใฏ'
}
}
})
// get transform from `transformVTDirective` function, with `i18n` option
const transformVT = transformVTDirective({ i18n })
const { code } = compile(`<p v-t="'hello'"></p>`, {
mode: 'function',
hoistStatic: true,
prefixIdentifiers: true,
directiveTransforms: { t: transformVT } // <- you need to specify to `directiveTransforms` option!
})
console.log(code)
/*
output ->
const { createVNode: _createVNode, openBlock: _openBlock, createBlock: _createBlock } = Vue
return function render(_ctx, _cache) {
return (_openBlock(), _createBlock(\\"div\\", null, \\"ใใใซใกใฏ๏ผ\\"))
}
*/The following configration example of vue-loader:
const { VueLoaderPlugin } = require('vue-loader')
const { createI18n } = require('vue-i18n')
const { transformVTDirective } = require('@intlify/vue-i18n-extensions')
const i18n = createI18n({
locale: 'ja',
messages: {
en: {
hello: 'hello'
},
ja: {
hello: 'ใใใซใกใฏ'
}
}
})
const transformVT = transformVTDirective(i18n)
module.exports = {
module: {
// ...
rules: [
{
test: /\.vue$/,
use: [
{
loader: 'vue-loader',
options: {
compilerOptions: {
directiveTransforms: { t: transformVT }
}
}
}
]
},
// ...
]
},
plugins: [new VueLoaderPlugin()]
}You can specify the transform resulting from transformVTDirective in the compiler options for each package offered by vue-next, and tool chains:
@vue/compiler-core(optionsatbaseCompilefunction)@vue/compiler-dom(optionsatcompilefunction)@vue/compiler-ssr(optionsatcompilefunction)@vue/compiler-sfc(compilerOptionsatcompileTemplatefunction)vue-loader(compilerOptionsatoptions)rollup-plugin-vue(compilerOptionsatOptions)vite(vueCompilerOptionsatCoreOptions)
API
About details, See docs