
Vue i18n: Penyiapan Internasionalisasi Lengkap dengan vue-i18n
Dari instalasi hingga produksi: konfigurasikan vue-i18n dengan Composition API, tangani bentuk jamak dengan aturan CLDR, gunakan interpolasi komponen, dan tambahkan rantai fallback locale cerdas.
Instal vue-i18n
vue-i18n adalah plugin internasionalisasi resmi untuk Vue.js. Plugin ini menyediakan terjemahan reaktif, bentuk jamak bergaya ICU, interpolasi komponen, pemformatan tanggal/waktu dan angka, serta dukungan Options API dan Composition API.
npm install vue-i18n@9Konfigurasikan vue-i18n
Buat instance i18n dengan createI18n() dan daftarkan sebagai plugin Vue. Tentukan pesan locale, atur locale default, dan konfigurasikan locale fallback. vue-i18n mendukung mode legacy (Options API) dan composition (Composition API).
// 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
import { createApp } from 'vue'
import App from './App.vue'
import i18n from './i18n'
const app = createApp(App)
app.use(i18n)
app.mount('#app')Gunakan Terjemahan dalam Template
vue-i18n menyediakan fungsi $t() dalam template (Options API) dan fungsi t() dari useI18n() (Composition API). Keduanya menerima kunci terjemahan dan parameter bernama/daftar opsional untuk interpolasi.
// 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"
}
}Tangani Bentuk Jamak
vue-i18n mendukung bentuk jamak melalui bentuk yang dipisahkan tanda pipa dan fungsi $tc() (legacy) atau t() dengan parameter count (Composition API). Tentukan bentuk jamak dalam pesan locale menggunakan pemisah tanda pipa: 'no items | one item | {count} items'.
<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>Tambahkan Rantai Fallback Locale
fallbackLocale bawaan vue-i18n hanya mendukung daftar datar locale fallback, bukan rantai per locale. Pengguna pt-BR dengan kunci yang tidak tersedia melakukan fallback ke bahasa Inggris alih-alih pt-PT. vue-i18n-locale-chain menambahkan rantai penggabungan mendalam yang dapat dikonfigurasi agar pengguna regional selalu melihat terjemahan tersedia yang paling dekat.
<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" -->Otomatiskan Penerjemahan
Setelah vue-i18n dikonfigurasi, terjemahkan file JSON locale Anda menggunakan AI. Dari IDE, minta asisten AI menerjemahkan file sumber, atau integrasikan terjemahan ke pipeline CI/CD untuk lokalisasi yang sepenuhnya otomatis.
<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
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 i18nKonfigurasi Rantai Fallback Locale
Konfigurasikan rantai fallback per locale agar pengguna regional melihat terjemahan tersedia yang paling dekat alih-alih langsung beralih ke bahasa Inggris. vue-i18n mendukung fallbackLocale bergaya objek untuk mendefinisikan rantai per locale.
// 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': { /* ... */ },
},
})Kesalahan Umum
Mencampurkan Mode Legacy dan Composition API
Menggunakan v-html untuk String Terjemahan
Pengguna Regional Melihat Bahasa Inggris, Bukan Bahasa Induk
Coba i18n Agent Sekarang
Lepaskan file terjemahan Anda di sini
JSON, YAML, PO, XML, CSV, Markdown, Properties
atau klik untuk menjelajahi
Bahasa target