Slide 1

Slide 1 text

State of Vue I18n kazupon

Slide 2

Slide 2 text

KAZUPON Vue.js Core Team Member Vue.js Japan User Group Organizer Creator of Vue I18n & Intlify @kazu_pon kazupon

Slide 3

Slide 3 text

Working at Plaid,inc. One of the largest SaaS Company in Japan i18n of product `KARTE`

Slide 4

Slide 4 text

Vue I18n

Slide 5

Slide 5 text

What’s Vue I18n? • Internationalization for Vue.js plugin • Features • Translation • Pluralization • Datetime Format • Number Format • Translation per SFC • … and more!

Slide 6

Slide 6 text

Official Tooling • Bundler middleware • webpack: @intlify/vue-i18n-loader • rollup: @intlify/rollup-plugin-vue-i18n • vite: @intlify/vite-plugin-vue-i18n

Slide 7

Slide 7 text

Official Tooling • Vue CLI Plugin • @intlify/vue-cli-plugin-i18n $ vue add i18n Scaffolding Setup

Slide 8

Slide 8 text

Official Tooling • ESLint Plugin • @intlify/eslint-plugin-vue-i18n

Slide 9

Slide 9 text

Official Tooling • Vue Jest Processor • vue-i18n-jest • Vue I18n Extensions • @intlify/vue-i18n-extensions • Vue I18n Locale Message Tools • vue-i18n-locale-message • Intlify CLI • @intlify/cli

Slide 10

Slide 10 text

Third Party Tooling • Nuxt I18n • Babel Edit • i18n Ally • IntlliJ IDEA Plugin • vue-i18n-extract

Slide 11

Slide 11 text

Vue I18n stats • NPM (Feb 2021) • over 180 releases • 34 Million downloads (total) • Used from over 15,000 packages • JSDelivr • 4 Million downloads / month

Slide 12

Slide 12 text

Vue I18n stats • Used from over 5,200 Vue / Nuxt Apps (Feb, 2021) Vue Telescope

Slide 13

Slide 13 text

Vue I18n Histories 2015 2016 2014 2017 2018 2019 2020 Feb Vue v0.8 Oct Vue v1 Sep Vue v2 Sep Vue v3 May Vue I18n v0 Jan Vue I18n v1 June Vue I18n v2 Apr Vue I18n v3 May Vue I18n v4 Feb Vue I18n v5 Apr Vue I18n v6 May Vue I18n v7 June Vue I18n v8 Initial Release! Vue v1 Support! Vue v2 Support! Add many features! - i18n custom block - Datetime Format - Number Format - Component Interpolation - Custom format - SSR - TypeScript type definitions - … and more

Slide 14

Slide 14 text

Vue I18n Current • Current Version • v8.22.4 • Stable version for Vue 2

Slide 15

Slide 15 text

Vue I18n has been growing!

Slide 16

Slide 16 text

… Today

Slide 17

Slide 17 text

Finally

Slide 18

Slide 18 text

Vue I18n v9 has been released!! 🎉 🎉 🎉

Slide 19

Slide 19 text

Vue I18n v9

Slide 20

Slide 20 text

V9 Development • Dec 20, 2019 • Released Vue 3 initial alpha version • Jan 6, 2020 • Started Vue I18n v9 development repo: https://github.com/intlify/vue-i18n-next vue-i18n-next over 600 commits, 9 related tooling development • Feb, 2021 • Released Vue I18n v9!

Slide 21

Slide 21 text

Full scratch implementation • The Why • Maintenance and enhancement has becoming very difficult … • By re-designing and re-writing, Vue I18n could get solidify foundation as an i18n library.

Slide 22

Slide 22 text

Layered modules

Slide 23

Slide 23 text

Layered modules • Structured with Monorepo packages vue-i18n @intlify/core @intlify/core-base @intlify/message- compiler @intlify/message- resolver @intlify/runtime Entry layer Core layer Utility layer

Slide 24

Slide 24 text

Layered modules • Better maintainability • More bundle size shavable • More extensible • Expose APIs per package • Low-level i18n APIs: @intlify/core-base • Compiler APIs: @intlify/message-compiler

Slide 25

Slide 25 text

Hybrid APIs

Slide 26

Slide 26 text

Hybrid APIs • Composition API • Optimized for Vue 3 Composition API • Legacy API • Almost Compatible v8.x API • Based on Low Level i18n API (@intlify/core-base) Low Level i18n API Composition API Legacy API

Slide 27

Slide 27 text

Hybrid APIs • Example Composition API Legacy API

Slide 28

Slide 28 text

Message Compiler

Slide 29

Slide 29 text

Message Compiler • Compiler for Vue I18n Message Format • Scanner • Tokenizer • Parser • Transformer • Generator • Generate Message Function from Message

Slide 30

Slide 30 text

Message Compiler • Compile Process ‘Hi, {name} !’ Tokenizer H i , { n a m e } ! Scanner scan & tokenize Hi, { name } ! Tokens Parser Hi, { name } ! syntax analysis type: text value: ‘Hi,’ type: named key: ‘name’ type: text value: ‘ !’ type: message items: […] AST Transformer type: text value: ‘Hi,’ type: named key: ‘name’ type: text value: ‘ !’ type: message items: […] walk & transform Pre-processed AST Generator walk & generate type: text value: ‘Hi,’ type: named key: ‘name’ type: text value: ‘ !’ type: message items: […] Message "function __msg__ (ctx) { … return _normalize([ \\"hi \\”, _interpolate(_named(\\”name\\")), \\” !\\" ]) }" Message Function

Slide 31

Slide 31 text

Message Compiler • Can detect syntax errors at compilation • Report User-friendly error

Slide 32

Slide 32 text

Message Compiler • Source-map Support

Slide 33

Slide 33 text

Message Compiler • Expose Compiler API • Use-cases • Linter: @intlify/eslint-plugin-vue-i18n • CLI: @intlfiy/cli • … and depends on your idea!

Slide 34

Slide 34 text

Pre-Compilation

Slide 35

Slide 35 text

Pre-Compilation • Pre-compile locale messages by using official bundler middleware (e.g. @intlify/vue-i18n-loader) Pre-Compile yaml javascript

Slide 36

Slide 36 text

Pre-Compilation • Improve App performance with reduce locale messages compilation costs String Case Pre-Compilation Case Reduce locale messages compilation costs!

Slide 37

Slide 37 text

Vue DevTools Integration

Slide 38

Slide 38 text

Vue Devtools Integration • Extend Component Inspector Local Scope Custom tag

Slide 39

Slide 39 text

Vue Devtools Integration • i18n Resource Inspector Listed Scopes Inspect Selected Scope

Slide 40

Slide 40 text

Vue Devtools Integration • Vue I18n Timeline • Events - missing - fallback - message-resolve - message-compilation - message-evaluation - compile-error

Slide 41

Slide 41 text

Bundle Size Optimization

Slide 42

Slide 42 text

Bundle Size Optimization • Vue I18n v9 different builds • global build: vue-i18n(.runtime).global(.prod).js • esm-browser build: vue-i18n(.runtime).esm-browser(.prod).js • esm-bundler build: vue-i18n(.runtime).esm-bundler.js • cjs build: vue-i18n.cjs(.prod).js

Slide 43

Slide 43 text

Bundle Size Optimization • Runtime + Message Compiler vs. Runtime only • Runtime + Message Compiler (Default) vue-i18n.esm-bundler.js • Runtime Only vue-i18n.runtime.esm-bundler.js You can reduce message complier size!

Slide 44

Slide 44 text

Bundle Size Optimization • Feature Flags • `__VUE_I18N_FULL_INSTALL__` • `true` (default): Vue I18n APIs + built-in components + directive • `false`: Vue I18n APIs • `__VUE_I18N_LEGACY_API__` • `true` (default): Legacy API + Composition API • `false`: Composition API

Slide 45

Slide 45 text

Bundle Size Optimization • Case: vite-vue-i18n-starter `vendor.xxxx.js` • No Optimization (Full install / Full API / Runtime + Message Compiler) 27.83 KB • Full Optimization: (Composition API / Runtime) 22.00 KB Reduce bundle size about 20% with Tree-Shaking!

Slide 46

Slide 46 text

New Toolings

Slide 47

Slide 47 text

New Toolings • Vite Plugin • @intlify/vite-plugin-vue-i18n • Setup Vue 3 Composition API + Vue I18n Composition API • Intlify CLI • @intlify/cli • `compile` command Locale messages pre-compilation

Slide 48

Slide 48 text

Next Milestone “Beetle” Plan

Slide 49

Slide 49 text

Message Format Syntax • Enhancement Syntax like ICU message format NOTE: This current syntax is still unstable

Slide 50

Slide 50 text

Main Packages Improvement • vue-i18n • Type inference for TypeScript • Custom formatter • @intlify/core-base • Low level i18n APIs improvement • @intlify/message-resolver • pluggable resolver support

Slide 51

Slide 51 text

Tooling Improvement • Bundler middleware • Monorepo management • ESLint Plugin • JSON / YAML parser performance • Vue I18n Processor • vue-jest@v5 support • Intlify CLI • Port from vue-i18n-locale-message

Slide 52

Slide 52 text

… And • Provide IE 11 Compatibility Build • Move kazupon/vue-i18n repo to intlify org • vue-i18n-next codes to intlify/vue-i18n repo

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

https://intilfy.dev Intlify is a project that aims to improve Developer Experience in software internationalization. We will aim to improve the Developer Experience of internationalization by providing libraries, frameworks, and tools that break down barriers to internationalization. Mission “ ”

Slide 55

Slide 55 text

• Vue I18n is part of Intlify project. • We'll be working on solving i18n problem while also working on the Vue ecosystem. • As Vue I18n is growing, Intlify project member wanted. • If you are interested in intlify, please ask me.

Slide 56

Slide 56 text

Thanks! https://github.com/sponsors/kazupon