Table of Contents
✅ Step 1: Install Vue I18n
✅ Step 2: Prepare Language Files
✅ Step 3: Set Up i18n in Your App
For Vue 3 (Composition API):
For Vue 2 (Options API):
✅ Step 4: Use Translations in Components
In Templates:
In JavaScript (Vue 3 Composition API):
In Vue 2 Options API:
✅ Step 5: Change Language at Runtime
✅ Optional: Lazy Load Translations (for large apps)
✅ Bonus: Detect User's Preferred Language
Summary
Home Web Front-end Vue.js How to implement internationalization (i18n) in a Vue app?

How to implement internationalization (i18n) in a Vue app?

Jul 26, 2025 am 08:37 AM
vue globalization

Install Vue I18n: Vue 3 uses npm install vue-i18n@next, Vue 2 uses npm install vue-i18n; 2. Create language files such as en.json and es.json in the locales directory, supporting nested structures; 3. Create instances in Vue 3 through createI18n and mount them in main.js, Vue 2 through Vue.use(VueI18n) and instantiate VueI18n; 4. Use {{ $t('key') }} interpolation in the template, use useI18n's t function in the Vue 3 Composition API, use this.$t in the Vue 2 Options API; 5. Use this.$i18n.locale = lang (Vue 2) or i18n.global.locale.value = lang (Vue 3) to realize runtime language switching; 6. Optionally, lazy loading of translation files is achieved through dynamic import to optimize performance; 7. The user's browser language can be detected through navigator.language and automatically set locale; through the above steps, multi-language support for Vue applications can be fully realized.

How to implement internationalization (i18n) in a Vue app?

Implementing internationalization (i18n) in a Vue app is straightforward with the help of Vue I18n , the official internationalization plugin. Here's how to set it up step by step for both Vue 3 and Vue 2.

How to implement internationalization (i18n) in a Vue app?

✅ Step 1: Install Vue I18n

For Vue 3 (use Vue I18n v9):

 npm install vue-i18n@next

For Vue 2 (use Vue I18n v8):

How to implement internationalization (i18n) in a Vue app?
 npm install vue-i18n

✅ Step 2: Prepare Language Files

Create a folder (eg, locales ) to store translation files.

Example: locales/en.json

How to implement internationalization (i18n) in a Vue app?
 {
  "greeting": "Hello!",
  "description": "Welcome to our application."
}

Example: locales/es.json

 {
  "greeting": "¡Hola!",
  "description": "Bienvenido a nuestra aplicación."
}

You can also support nested structures:

 {
  "home": {
    "title": "Home Page",
    "welcome": "Welcome, {name}!"
  }
}

✅ Step 3: Set Up i18n in Your App

For Vue 3 (Composition API):

Create i18n.js or i18n/index.js :

 import { createI18n } from 'vue-i18n'
import en from '../locales/en.json'
import es from '../locales/es.json'

const messages = {
  en,
  es
}

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

export default i18n

Then, in your main.js :

 import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n'

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

For Vue 2 (Options API):

In main.js :

 import Vue from 'vue'
import VueI18n from 'vue-i18n'
import en from './locales/en.json'
import es from './locales/es.json'

Vue.use(VueI18n)

const i18n = new VueI18n({
  locale: 'en',
  fallbackLocale: 'en',
  messages: { en, es }
})

new Vue({
  i18n,
  render: h => h(App)
}).$mount('#app')

✅ Step 4: Use Translations in Components

In Templates:

 <template>
  <div>
    <p>{{ $t(&#39;greeting&#39;) }}</p>
    <p>{{ $t(&#39;description&#39;) }}</p>
    <p>{{ $t(&#39;home.welcome&#39;, { name: &#39;Alice&#39; }) }}</p>
  </div>
</template>

In JavaScript (Vue 3 Composition API):

 import { useI18n } from &#39;vue-i18n&#39;

export default {
  setup() {
    const { t } = useI18n()
    console.log(t(&#39;greeting&#39;))
    return { t }
  }
}

In Vue 2 Options API:

 export default {
  created() {
    console.log(this.$t(&#39;greeting&#39;))
  }
}

✅ Step 5: Change Language at Runtime

Add a method to switch languages dynamically:

 // In a component
methods: {
  changeLocale(lang) {
    this.$i18n.locale = lang
  }
}
 <button @click="changeLocale(&#39;en&#39;)">English</button>
<button @click="changeLocale(&#39;es&#39;)">Español</button>

Note: In Vue 3 with createI18n , you may need to use i18n.global.locale.value = lang if using the global instance.

 import { i18n } from &#39;./i18n&#39;
i18n.global.locale.value = &#39;es&#39;

✅ Optional: Lazy Load Translations (for large apps)

To reduce bundle size, load translations on demand:

 const messages = {
  en: () => import(&#39;../locales/en.json&#39;),
  es: () => import(&#39;../locales/es.json&#39;)
}

const i18n = createI18n({
  locale: &#39;en&#39;,
  fallbackLocale: &#39;en&#39;,
  messages
})

Vue I18n will handle async loading automatically.


✅ Bonus: Detect User's Preferred Language

Use browser language detection:

 const userLang = navigator.language || navigator.userLanguage
const locale = userLang.startsWith(&#39;es&#39;) ? &#39;es&#39; : &#39;en&#39;
i18n.global.locale.value = locale

Summary

  • Use vue-i18n for translations.
  • Store translations in JSON files.
  • Set up the i18n instance and plug it into Vue.
  • Use $t() in templates and code.
  • Change locale dynamically.
  • Optionally lazy-load translations and detect browser language.

With this setup, your Vue app can support multiple languages cleanly and efficiently.

The above is the detailed content of How to implement internationalization (i18n) in a Vue app?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Beginner's Guide to RimWorld: Odyssey
1 months ago By Jack chen
PHP Variable Scope Explained
3 weeks ago By 百草
Tips for Writing PHP Comments
3 weeks ago By 百草
Commenting Out Code in PHP
3 weeks ago By 百草

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1508
276
What is the significance of Vue's reactivity transform (experimental, then removed) and its goals? What is the significance of Vue's reactivity transform (experimental, then removed) and its goals? Jun 20, 2025 am 01:01 AM

ReactivitytransforminVue3aimedtosimplifyhandlingreactivedatabyautomaticallytrackingandmanagingreactivitywithoutrequiringmanualref()or.valueusage.Itsoughttoreduceboilerplateandimprovecodereadabilitybytreatingvariableslikeletandconstasautomaticallyreac

What is server side rendering SSR in Vue? What is server side rendering SSR in Vue? Jun 25, 2025 am 12:49 AM

Server-siderendering(SSR)inVueimprovesperformanceandSEObygeneratingHTMLontheserver.1.TheserverrunsVueappcodeandgeneratesHTMLbasedonthecurrentroute.2.ThatHTMLissenttothebrowserimmediately.3.Vuehydratesthepage,attachingeventlistenerstomakeitinteractive

How to build a component library with Vue? How to build a component library with Vue? Jul 10, 2025 pm 12:14 PM

Building a Vue component library requires designing the structure around the business scenario and following the complete process of development, testing and release. 1. The structural design should be classified according to functional modules, including basic components, layout components and business components; 2. Use SCSS or CSS variables to unify the theme and style; 3. Unify the naming specifications and introduce ESLint and Prettier to ensure the consistent code style; 4. Display the usage of components on the supporting document site; 5. Use Vite and other tools to package as NPM packages and configure rollupOptions; 6. Follow the semver specification to manage versions and changelogs when publishing.

How to implement transitions and animations in Vue? How to implement transitions and animations in Vue? Jun 24, 2025 pm 02:17 PM

ToaddtransitionsandanimationsinVue,usebuilt-incomponentslikeand,applyCSSclasses,leveragetransitionhooksforcontrol,andoptimizeperformance.1.WrapelementswithandapplyCSStransitionclasseslikev-enter-activeforbasicfadeorslideeffects.2.Useforanimatingdynam

How to use PHP to develop a Q&A community platform Detailed explanation of PHP interactive community monetization model How to use PHP to develop a Q&A community platform Detailed explanation of PHP interactive community monetization model Jul 23, 2025 pm 07:21 PM

1. The first choice for the Laravel MySQL Vue/React combination in the PHP development question and answer community is the first choice for Laravel MySQL Vue/React combination, due to its maturity in the ecosystem and high development efficiency; 2. High performance requires dependence on cache (Redis), database optimization, CDN and asynchronous queues; 3. Security must be done with input filtering, CSRF protection, HTTPS, password encryption and permission control; 4. Money optional advertising, member subscription, rewards, commissions, knowledge payment and other models, the core is to match community tone and user needs.

How to develop AI intelligent form system with PHP PHP intelligent form design and analysis How to develop AI intelligent form system with PHP PHP intelligent form design and analysis Jul 25, 2025 pm 05:54 PM

When choosing a suitable PHP framework, you need to consider comprehensively according to project needs: Laravel is suitable for rapid development and provides EloquentORM and Blade template engines, which are convenient for database operation and dynamic form rendering; Symfony is more flexible and suitable for complex systems; CodeIgniter is lightweight and suitable for simple applications with high performance requirements. 2. To ensure the accuracy of AI models, we need to start with high-quality data training, reasonable selection of evaluation indicators (such as accuracy, recall, F1 value), regular performance evaluation and model tuning, and ensure code quality through unit testing and integration testing, while continuously monitoring the input data to prevent data drift. 3. Many measures are required to protect user privacy: encrypt and store sensitive data (such as AES

Free entrance to Vue finished product resources website. Complete Vue finished product is permanently viewed online Free entrance to Vue finished product resources website. Complete Vue finished product is permanently viewed online Jul 23, 2025 pm 12:39 PM

This article has selected a series of top-level finished product resource websites for Vue developers and learners. Through these platforms, you can browse, learn, and even reuse massive high-quality Vue complete projects online for free, thereby quickly improving your development skills and project practice capabilities.

What are custom plugins in Vue? What are custom plugins in Vue? Jun 26, 2025 am 12:37 AM

To create a Vue custom plug-in, follow the following steps: 1. Define the plug-in object containing the install method; 2. Extend Vue by adding global methods, instance methods, directives, mixing or registering components in install; 3. Export the plug-in for importing and use elsewhere; 4. Register the plug-in through Vue.use (YourPlugin) in the main application file. For example, you can create a plugin that adds the $formatCurrency method for all components, and set Vue.prototype.$formatCurrency in install. When using plug-ins, be careful to avoid excessive pollution of global namespace, reduce side effects, and ensure that each plug-in is

See all articles