All Projects β†’ intlify β†’ Vite Plugin Vue I18n

intlify / Vite Plugin Vue I18n

Licence: mit
🌐 Vite plugin for Vue I18n

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Vite Plugin Vue I18n

Android Gradle Localization Plugin
Gradle plugin for generating localized string resources
Stars: ✭ 100 (+108.33%)
Mutual labels:  i18n, plugin
Androidlocalizeplugin
🌏 Android localization plugin. support multiple languages, no need to apply for key.
Stars: ✭ 352 (+633.33%)
Mutual labels:  i18n, plugin
Vue Cli Plugin I18n
🌐 Vue CLI plugin to add vue-i18n to your Vue Project
Stars: ✭ 172 (+258.33%)
Mutual labels:  i18n, plugin
Vue I18n
🌐 Internationalization plugin for Vue.js
Stars: ✭ 6,502 (+13445.83%)
Mutual labels:  i18n, plugin
Vue I18next
Internationalization for vue using the i18next i18n ecosystem.
Stars: ✭ 172 (+258.33%)
Mutual labels:  i18n, plugin
Ununiga
[μ€λŠ”μ΄κ°€] ν•œκΈ€ 쑰사(助詞) λŒ€μ‘ I18n engine extension
Stars: ✭ 34 (-29.17%)
Mutual labels:  i18n, plugin
Elasticsearch Ukrainian Lemmatizer
Ukrainian lemmatizer plugin for ElasticSearch
Stars: ✭ 44 (-8.33%)
Mutual labels:  plugin
Steambridge
A UE4 implementation of the Steamworks API.
Stars: ✭ 48 (+0%)
Mutual labels:  plugin
Sublimall Server
Server behind Sublimall SublimeText plugin
Stars: ✭ 43 (-10.42%)
Mutual labels:  plugin
Jellyfin Plugin Lastfm
LastFM plugin for the Jellyfin media system. Fork of the Emby Last.FM plug-in
Stars: ✭ 43 (-10.42%)
Mutual labels:  plugin
Flutter country picker
A Flutter Country Picker Widget with support to country dialing codes
Stars: ✭ 49 (+2.08%)
Mutual labels:  plugin
Zsh Fzy
Use the fzy fuzzy-finder in Zsh
Stars: ✭ 48 (+0%)
Mutual labels:  plugin
Scxcodeminimap
Sublime Text like Minimap for Xcode
Stars: ✭ 1,037 (+2060.42%)
Mutual labels:  plugin
Dotenv Webpack
A secure webpack plugin that supports dotenv and other environment variables and only exposes what you choose and use.
Stars: ✭ 1,022 (+2029.17%)
Mutual labels:  plugin
Honeybot
πŸ›© A python IRC bot with simple plugins dev. Ignited in mauritius, first-timers friendly!
Stars: ✭ 48 (+0%)
Mutual labels:  plugin
Baseplug
MVC audio plugin framework for rust
Stars: ✭ 44 (-8.33%)
Mutual labels:  plugin
Consulo Csharp
Languages: C#
Stars: ✭ 48 (+0%)
Mutual labels:  plugin
Yoast Seo For Typo3
Yoast SEO plugin for TYPO3
Stars: ✭ 43 (-10.42%)
Mutual labels:  plugin
Pytest Mimesis
Mimesis integration with the pytest test runner. This plugin provider useful fixtures based on providers from Mimesis.
Stars: ✭ 46 (-4.17%)
Mutual labels:  plugin
Umi Plugin Apollo
Apollo graphql plugin for umi
Stars: ✭ 48 (+0%)
Mutual labels:  plugin

🌐 @intlify/vite-plugin-vue-i18n

Test npm

Vite plugin for Vue I18n

⭐️ Features

  • i18n resources pre-compilation
  • i18n custom block
  • Static bundle importing
  • Bundling optimizations

πŸ’Ώ Installation

NPM

$ npm i --save-dev @intlify/vite-plugin-vue-i18n

YARN

$ yarn add -D @intlify/vite-plugin-vue-i18n

⚠️ Notice

When this plugin is installed, Vue I18n can only use the Composition API, and if you want to use the Legacy API, you need to set the compositionOnly option to false.

Also, if you do a production build with vite, Vue I18n will automatically bundle the runtime only module. If you need on-demand compilation with Message compiler, you need to set the runtimeOnly option to false.

πŸš€ Usage

i18n resources pre-compilation

Since [email protected], The locale messages are handled with message compiler, which converts them to javascript functions after compiling. After compiling, message compiler converts them into javascript functions, which can improve the performance of the application.

However, with the message compiler, the javascript function conversion will not work in some environments (e.g. CSP). For this reason, [email protected] and later offer a full version that includes compiler and runtime, and a runtime only version.

If you are using the runtime version, you will need to compile before importing locale messages by managing them in a file such as .json.

Vite Config

the below example that examples/composition/vite.config.ts:

import path from 'path'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueI18n from '@intlify/vite-plugin-vue-i18n'

export default defineConfig({
  plugins: [
    vue(), // you need to install `@vitejs/plugin-vue`
    vueI18n({
      // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
      // compositionOnly: false,

      // you need to set i18n resource including paths !
      include: path.resolve(__dirname, './path/to/src/locales/**')
    })
  ]
})

i18n custom block

the below example that examples/composition/App.vue have i18n custom block:

<template>
  <form>
    <label>{{ t('language') }}</label>
    <select v-model="locale">
      <option value="en">en</option>
      <option value="ja">ja</option>
    </select>
  </form>
  <p>{{ t('hello') }}</p>
</template>

<script>
import { useI18n } from 'vue-i18n'

export default {
  name: 'App',
  setup() {
    const { locale, t } = useI18n({
      inheritLocale: true
    })

    return { locale, t }
  }
}
</script>

<i18n>
{
  "en": {
    "language": "Language",
    "hello": "hello, world!"
  },
  "ja": {
    "language": "言θͺž",
    "hello": "γ“γ‚“γ«γ‘γ―γ€δΈ–η•ŒοΌ"
  }
}
</i18n>

Locale Messages formatting

You can be used by specifying the following format in the lang attribute:

  • json (default)
  • yaml
  • json5

example yaml foramt:

<i18n lang="yaml">
en:
  hello: "Hello World!"
ja:
  hello: "γ“γ‚“γ«γ‘γ―γ€δΈ–η•ŒοΌ"
</i18n>

Static bundle importing

vite-plugin-vue-i18n allows you to statically bundle i18n resources such as json or yaml specified by the include option of the plugin described below as locale messages with the import syntax.

In this case, only one i18n resource can be statically bundled at a time with import syntax, so the these code will be redundant for multiple locales.

import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
/*
 * The i18n resources in the path specified in the plugin `include` option can be read
 * as vue-i18n optimized locale messages using the import syntax
 */
import en from './src/locales/en.json'
import ja from './src/locales/ja.yaml'
import fr from './src/locales/fr.json5'

const i18n = createI18n({
  locale: 'en',
  messages: {
    en,
    ja,
    fr
  }
})

const app = createApp()
app.use(i18n).mount('#app)

vite-plugin-vue-i18n can use the vite (rollup) mechanism to import all locales at once, using the special identifier @intlify/vite-plugin-vue-i18n/messages, as the bellow:

import { createApp } from 'vue'
import { createI18n } from 'vue-i18n'
/*
 * All i18n resources specified in the plugin `include` option can be loaded
 * at once using the import syntax
 */
import messages from '@intlify/vite-plugin-vue-i18n/messages'

const i18n = createI18n({
  locale: 'en',
  messages
})

const app = createApp()
app.use(i18n).mount('#app)

Client Types

If you want type definition of @intlify/vite-plugin-vue-i18n/messages, add vite-plugin-vue-i18n/client to compilerOptions.types of your tsconfig:

{
  "compilerOptions": {
    "types": ["@intlify/vite-plugin-vue-i18n/client"]
  }
}

Bundle optimizations

vite-plugin-vue-i18n allows you to support bundle size optimization provided by vue-i18n.

πŸ“¦ Automatic Vue I18n bundling

As noted here, NPM provides many different builds of Vue I18n.

vite-plugin-vue-i18n will automatically select and bundle Vue I18n build according to the following vite behavior:

  • vite dev: vue-i18n.esm-bundler.js
  • vite build: vue-i18n.runtime.esm-bundler.js

About details, See the here

πŸ”§ Options

You can specify options in the plugin option to support bundle size optimization provided by vue-i18n.

The same thing can be configured with the define option, but the plugin option is more friendly. Especially if you are using typescript, you can use intelisense.

About details, See the below section

include

  • Type: string | string[] | undefined

  • Default: undefined

    A minimatch pattern, or array of patterns, you can specify a path to pre-compile i18n resources files. The extensions of i18n resources to be precompiled are as follows:

    - json
    - json5
    - yaml
    - yml
    

    Note json resources matches this option, it will be handled before the internal json plugin of Vite, and will not be processed afterwards, else the option doesn't match, the Vite side will handle.

runtimeOnly

  • Type: boolean

  • Default: true

    Whether or not to automatically use Vue I18n runtime-only in production build, set in the vue-i18n field of Vite resolve.alias option. If false is specified, Vue I18n (vue-i18n) package.json module field will be used.

    For more details, See here

compositionOnly

  • Type: boolean

  • Default: true

    Whether to make vue-i18n's API only composition API. By default the legacy API is tree-shaken.

    For more details, See here

fullInstall

  • Type: boolean

  • Default: true

    Whether to install the full set of APIs, components, etc. provided by Vue I18n. By default, all of them will be installed.

    If false is specified, buld-in components and directive will not be installed in vue and will be tree-shaken.

    For more details, See here

forceStringify

  • Type: boolean

  • Default: false

    Whether pre-compile number and boolean values as message functions that return the string value.

    for example, the following json resources:

    {
      "trueValue": true,
      "falseValue": false,
      "nullValue": null,
      "numberValue": 1
    }
    

    after pre-compiled (development):

    export default {
      "trueValue": (()=>{const fn=(ctx) => {const { normalize: _normalize } = ctx;return _normalize(["true"])};fn.source="true";return fn;})(),
      "falseValue": (()=>{const fn=(ctx) => {const { normalize: _normalize } = ctx;return _normalize(["false"])};fn.source="false";return fn;})(),
      "nullValue": (()=>{const fn=(ctx) => {const { normalize: _normalize } = ctx;return _normalize(["null"])};fn.source="null";return fn;})(),
      "numberValue": (()=>{const fn=(ctx) => {const { normalize: _normalize } = ctx;return _normalize(["1"])};fn.source="1";return fn;})()
    }
    

πŸ“œ Changelog

Details changes for each release are documented in the CHANGELOG.md.

❗️ Issues

Please make sure to read the Issue Reporting Checklist before opening an issue. Issues not conforming to the guidelines may be closed immediately.

©️ License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].