Skip to main content

Vue i18n: vue-i18n के साथ संपूर्ण अंतरराष्ट्रीयकरण सेटअप

इंस्टॉलेशन से प्रोडक्शन तक: Composition API के साथ vue-i18n कॉन्फ़िगर करें, CLDR नियमों से बहुवचन सँभालें, component interpolation का उपयोग करें और बेहतर locale fallback chains जोड़ें।

1

vue-i18n इंस्टॉल करें

vue-i18n, Vue.js के लिए आधिकारिक अंतरराष्ट्रीयकरण प्लगइन है। यह रिएक्टिव अनुवाद, ICU-शैली के बहुवचन, component interpolation, तारीख-समय और संख्याओं की फ़ॉर्मैटिंग तथा Options API और Composition API, दोनों के लिए सहायता देता है।

Terminal
npm install vue-i18n@9
2

vue-i18n कॉन्फ़िगर करें

createI18n() से एक i18n इंस्टेंस बनाएँ और उसे Vue प्लगइन के रूप में रजिस्टर करें। अपने locale messages परिभाषित करें, डिफ़ॉल्ट locale सेट करें और fallback locale कॉन्फ़िगर करें। vue-i18n, legacy (Options API) और composition (Composition API), दोनों मोड का समर्थन करता है।

src/i18n.ts
// src/i18n.ts
import { createI18n } from 'vue-i18n'
import en from './locales/en.json'
import de from './locales/de.json'

const i18n = createI18n({
  legacy: false,           // Use Composition API mode
  locale: 'en',            // Default locale
  fallbackLocale: 'en',   // Fallback locale
  messages: { en, de },
})

export default i18n
src/main.ts
// src/main.ts
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n'

const app = createApp(App)
app.use(i18n)
app.mount('#app')
यदि आपको 'Not available in legacy mode' त्रुटियाँ दिखाई देती हैं, तो आप Composition API के i18n कॉल (useI18n()) को legacy mode कॉन्फ़िगरेशन के साथ मिला रहे हैं। Composition API mode का उपयोग करने के लिए createI18n() में legacy: false सेट करें या Options API के $t() सिंटैक्स का लगातार उपयोग करें।
3

Templates में अनुवादों का उपयोग करें

vue-i18n, templates में $t() फ़ंक्शन (Options API) और useI18n() से मिलने वाला t() फ़ंक्शन (Composition API) उपलब्ध कराता है। दोनों interpolation के लिए translation key और वैकल्पिक named/list parameters स्वीकार करते हैं।

src/locales/en.json
// src/locales/en.json
{
  "nav": {
    "home": "Home",
    "about": "About",
    "settings": "Settings"
  },
  "greeting": "Hello, {name}!",
  "cart": {
    "itemCount": "no items | one item | {count} items"
  }
}

// src/locales/de.json
{
  "nav": {
    "home": "Startseite",
    "about": "Über uns",
    "settings": "Einstellungen"
  },
  "greeting": "Hallo, {name}!",
  "cart": {
    "itemCount": "keine Artikel | ein Artikel | {count} Artikel"
  }
}
4

बहुवचन सँभालें

vue-i18n, pipe से अलग किए गए रूपों और $tc() फ़ंक्शन (legacy) या count parameter वाले t() (Composition API) के माध्यम से बहुवचन का समर्थन करता है। pipe separator का उपयोग करके अपने locale messages में बहुवचन के रूप परिभाषित करें: 'no items | one item | {count} items'।

MyComponent.vue
<template>
  <div>
    <!-- Simple translation -->
    <h1>{{ $t('nav.home') }}</h1>

    <!-- With variables -->
    <p>{{ $t('greeting', { name: userName }) }}</p>

    <!-- In attributes -->
    <input :placeholder="$t('nav.settings')" />

    <!-- Composition API -->
    <p>{{ greeting }}</p>
  </div>
</template>

<script setup lang="ts">
import { useI18n } from 'vue-i18n'

const { t } = useI18n()
const userName = 'Alice'
const greeting = t('greeting', { name: userName })
</script>
pipe से अलग किया गया plural syntax अधिकतम तीन रूपों (zero | one | other) वाले cardinal plurals का ही समर्थन करता है। जटिल CLDR plural rules वाली भाषाओं (अरबी, रूसी, पोलिश) के लिए ICU MessageFormat syntax या स्पष्ट CLDR category mappings वाले @.plural modifier का उपयोग करें।
5

Locale Fallback Chains जोड़ें

vue-i18n में अंतर्निहित fallbackLocale हर locale के लिए अलग-अलग chains के बजाय केवल fallback locales की एक सपाट सूची का समर्थन करता है। किसी key के न मिलने पर pt-BR यूज़र को pt-PT के बजाय अंग्रेज़ी दिखाई देती है। vue-i18n-locale-chain कॉन्फ़िगर करने योग्य deep-merge chains जोड़ता है, ताकि क्षेत्रीय यूज़र को हमेशा उपलब्ध अनुवादों में से सबसे करीबी अनुवाद दिखाई दे।

Plurals.vue
<template>
  <div>
    <!-- Pipe-separated plurals -->
    <p>{{ $t('cart.itemCount', count) }}</p>

    <!-- Named plurals (recommended for complex languages) -->
    <p>{{ $t('orders', { n: orderCount }) }}</p>
  </div>
</template>

<!-- In your locale file: -->
<!-- "orders": "{n} order | {n} orders" -->
vue-i18n-locale-chain, लोड होने के समय messages को deep-merge करता है। मर्ज किया गया message set, vue-i18n के reactivity system में कैश हो जाता है, इसलिए fallback lookups से runtime performance पर कोई अतिरिक्त प्रभाव नहीं पड़ता।
6

अनुवादों को ऑटोमेट करें

vue-i18n कॉन्फ़िगर हो जाने के बाद AI का उपयोग करके अपनी लोकेल JSON फ़ाइलों का अनुवाद करें। अपने IDE में AI सहायक से स्रोत फ़ाइल का अनुवाद कराएँ या पूरी तरह स्वचालित स्थानीयकरण के लिए अनुवाद को अपनी CI/CD पाइपलाइन में एकीकृत करें।

LanguageSwitcher.vue
<template>
  <select v-model="locale">
    <option v-for="lang in availableLocales" :key="lang" :value="lang">
      {{ lang }}
    </option>
  </select>
</template>

<script setup lang="ts">
import { useI18n } from 'vue-i18n'

const { locale, availableLocales } = useI18n()
</script>
src/i18n.ts (lazy loading)
// src/i18n.ts
import { createI18n } from 'vue-i18n'

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

export async function loadLocale(locale: string) {
  const messages = await import(`./locales/${locale}.json`)
  i18n.global.setLocaleMessage(locale, messages.default)
  i18n.global.locale.value = locale
}

export default i18n
7

Locale Fallback Chain कॉन्फ़िगरेशन

हर locale के लिए अलग fallback chains कॉन्फ़िगर करें, ताकि क्षेत्रीय यूज़र को सीधे अंग्रेज़ी पर जाने के बजाय उपलब्ध अनुवादों में से सबसे करीबी अनुवाद दिखाई दे। vue-i18n हर locale के लिए chains परिभाषित करने हेतु object-style fallbackLocale का समर्थन करता है।

src/i18n.ts
// src/i18n.ts
import { createI18n } from 'vue-i18n'

const i18n = createI18n({
  legacy: false,
  locale: 'pt-BR',
  fallbackLocale: {
    'pt-BR': ['pt', 'en'],
    'zh-Hant-TW': ['zh-Hant', 'zh', 'en'],
    'es-419': ['es', 'en'],
    default: ['en'],
  },
  messages: {
    en: { /* ... */ },
    pt: { /* ... */ },
    'pt-BR': { /* ... */ },
  },
})
fallbackLocale object से आप अलग-अलग locales के लिए अलग chains परिभाषित कर सकते हैं। pt-BR यूज़र के लिए fallback क्रम pt और फिर en होता है, जबकि zh-Hant-TW यूज़र के लिए यह क्रम zh-Hant, zh और फिर en होता है।

आम समस्याएँ

Legacy और Composition API Modes को मिलाना

legacy: true (डिफ़ॉल्ट) के साथ useI18n() का उपयोग करने पर त्रुटियाँ आती हैं। यदि आप Composition API का उपयोग करते हैं, तो createI18n() में legacy: false सेट करें; अन्यथा Options API वाले templates में केवल $t() का उपयोग करें। एक ही application में दोनों modes को न मिलाएँ।

अनूदित Strings के लिए v-html का उपयोग करना

यदि कोई interpolation value यूज़र के input से आती है, तो HTML वाले अनुवादों को render करने के लिए v-html का उपयोग करने से XSS का जोखिम होता है। embedded HTML या Vue components वाले अनुवादों के लिए &lt;i18n-t&gt; component का उपयोग करें — यह डिफ़ॉल्ट रूप से सुरक्षित है और reactive component embedding का समर्थन करता है।

क्षेत्रीय यूज़र को Parent Locale के बजाय अंग्रेज़ी दिखाई देना

vue-i18n का fallbackLocale हर locale की अलग chain नहीं, बल्कि एक सपाट सूची है। pt-BR सीधे सूची में दिए गए locale (आमतौर पर 'en') पर fallback करता है और pt-PT को पूरी तरह छोड़ देता है। deep-merge के साथ सही regional fallback जोड़ने के लिए vue-i18n-locale-chain का उपयोग करें।

i18n Agent अभी आज़माएँ

अपनी अनुवाद फ़ाइल यहाँ छोड़ें

JSON, YAML, PO, XML, CSV, Markdown, Properties

या ब्राउज़ करने के लिए क्लिक करें

लक्षित भाषाएँ

साइन अप की ज़रूरत नहींतुरंत अनुमान

Vue i18n के बारे में अक्सर पूछे जाने वाले सवाल