BerandaSandboxShowcaseAplikasiDokumentasiBlog
    • EnglishInggris
      EN
    • русскийRusia
      RU
    • 日本語Jepang
      JA
    • françaisPrancis
      FR
    • 한국어Korea
      KO
    • 中文Tionghoa
      ZH
    • españolSpanyol
      ES
    • DeutschJerman
      DE
    • العربيةArab
      AR
    • italianoItalia
      IT
    • British EnglishInggris (Britania)
      EN-GB
    • portuguêsPortugis
      PT
    • हिन्दीHindi
      HI
    • TürkçeTurki
      TR
    • polskiPolski
      PL
    • IndonesiaIndonesia
      ID
    • Tiếng ViệtVietnam
      VI
    • українськаUkraina
      UK
    /
    Filter dokumen berdasarkan framework
    Alt+←
    Mengapa Intlayer?
    Mulai
    Konsep
    • Bagaimana Intlayer bekerja
    • Konfigurasi
    • TestFillBuildWatchExtractLoginPushPullConfigurationListVersionEditorLiveDebugDoc ReviewDoc TranslateSDK
    • Editor visual
    • CMS
    • Integrasi CI/CD
    • TerjemahanPluralPenumeraanKondisiJenis kelaminPenambahanBerkasNestingMarkdownHTMLPengambilan fungsi
    • File untuk setiap lokal
    • Kompilator
    • Pengisian otomatis
    • Pengujian
    • Optimasi paket
    Lingkungan
    • Next.js 14 dan App Router
      Next.js 15
      Next.js tanpa locale URL
      Next.js dan Page Router
      Compiler
    • Tanstack Start Solid
    • Astro dan React
      Astro dan Svelte
      Astro dan Vue
      Astro dan Solid
      Astro dan Preact
      Astro dan Lit
      Astro dan Vanilla JS
    • React Router v7
      React Router v7 (fs-routes)
      Compiler
    • Nuxt dan Vue
    • Vite dan Solid
    • SvelteKit
    • Vite dan Preact
    • Vite dan Vanilla JS
    • Vite dan Lit
    • Angular 19 (Webpack)
      Analog
    • React CRA
    • React Native dan Expo
    • Express.js
      NestJS
      Fastify
      Hono
      Adonis
    • Lynx dan React
    Plugins
    • JSON
    • gettext (.po)
    Ekstensi VS Code
    Agen
    • Server MCP
    • Keahlian agen
    Rilis
    • v8
    • v7
    • v6
    Benchmark
    • Next.js
    • TanStack
    • Vue
    • Solid
    • Svelte
    Blog
    Ajukan pertanyaan
    1. Documentation
    2. Lingkungan
    3. Nuxt and vue
    \n\n\n```\n\n#### Mengakses Konten di Intlayer\n\nIntlayer menawarkan berbagai API untuk mengakses konten Anda:\n\n- **Sintaks berbasis komponen** (direkomendasikan):\n Gunakan sintaks ``, atau `` untuk merender konten sebagai Node Intlayer. Ini terintegrasi dengan mulus dengan [Visual Editor](/id/doc/concept/editor) dan [CMS](/id/doc/concept/cms).\n\n- **Sintaks berbasis string**: \n Gunakan `{{ myContent }}` untuk merender konten sebagai teks biasa, tanpa dukungan Visual Editor.\n\n- **Sintaks HTML mentah**: \n Gunakan `
    ` untuk merender konten sebagai HTML mentah, tanpa dukungan Visual Editor.\n\n- **Sintaks destrukturisasi**: \n Composable `useIntlayer` mengembalikan sebuah Proxy dengan konten. Proxy ini dapat didestrukturisasi untuk mengakses konten sambil menjaga reaktivitas.\n - Gunakan `const content = useIntlayer(\"myContent\");` dan `{{ content.myContent }}` / ``.\n - Atau gunakan `const { myContent } = useIntlayer(\"myContent\");` dan `{{ myContent}}` / `` untuk mendestruktur konten.\n\n### (Opsional) Langkah 6: Ubah bahasa konten Anda\n\nUntuk mengubah bahasa konten Anda, Anda dapat menggunakan fungsi `setLocale` yang disediakan oleh composable `useLocale`. Fungsi ini memungkinkan Anda untuk mengatur locale aplikasi dan memperbarui konten sesuai dengan itu.\n\nBuat komponen untuk beralih antar bahasa menggunakan `NuxtLink`. **Menggunakan tautan daripada tombol untuk pergantian locale adalah praktik terbaik untuk SEO dan keterlihatan halaman**, karena memungkinkan mesin pencari untuk merayapi dan mengindeks semua versi terlokalisasi dari halaman Anda:\n\n```vue fileName=\"components/LocaleSwitcher.vue\"\n\n\n\n```\n\n> Menggunakan `NuxtLink` dengan atribut `href` yang tepat (melalui `getLocalizedUrl`) memastikan bahwa mesin pencari dapat menemukan semua varian bahasa dari halaman Anda. Ini lebih disukai dibandingkan dengan pengalihan locale hanya menggunakan JavaScript, yang mungkin tidak diikuti oleh perayap mesin pencari.\n\nKemudian, atur `app.vue` Anda untuk menggunakan layout:\n\n```vue fileName=\"app.vue\"\n\n```\n\n### (Opsional) Langkah 6b: Buat Layout dengan Navigasi\n\nLayout Nuxt memungkinkan Anda mendefinisikan struktur umum untuk halaman Anda. Buat layout default yang mencakup locale switcher dan navigasi:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\nKomponen `Links` (ditunjukkan di bawah) memastikan bahwa tautan navigasi internal secara otomatis dilokalkan.\n\n### (Opsional) Langkah 7: Tambahkan Routing yang Dilokalkan ke aplikasi Anda\n\nNuxt secara otomatis menangani routing yang dilokalkan saat menggunakan modul `nuxt-intlayer`. Ini membuat rute untuk setiap bahasa secara otomatis berdasarkan struktur direktori halaman Anda.\n\nContoh:\n\n```plaintext\npages/\n├── index.vue → /, /fr, /es\n├── about.vue → /about, /fr/about, /es/about\n└── contact/\n └── index.vue → /contact, /fr/contact, /es/contact\n```\n\nUntuk membuat halaman yang dilokalkan, cukup buat file Vue Anda di direktori `pages/`. Berikut adalah dua contoh halaman:\n\n**Halaman Beranda (`pages/index.vue`):**\n\n```vue fileName=\"pages/index.vue\"\n\n\n\n```\n\n**Halaman Tentang (`pages/about.vue`):**\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> Catatan: `useHead` diimpor secara otomatis di Nuxt. Anda dapat mengakses nilai konten menggunakan `.value` (reaktif) atau `.raw` (string primitif) sesuai kebutuhan Anda.\n\nModul `nuxt-intlayer` secara otomatis akan:\n\n- Mendeteksi locale yang dipilih pengguna\n- Menangani pergantian locale melalui URL\n- Mengatur atribut `` yang sesuai\n- Mengelola cookie locale\n- Mengarahkan pengguna ke URL lokal yang sesuai\n\n### (Opsional) Langkah 8: Membuat Komponen Link yang Dilokalkan\n\nUntuk memastikan navigasi aplikasi Anda menghormati locale saat ini, Anda dapat membuat komponen `Links` kustom. Komponen ini secara otomatis menambahkan prefix bahasa saat ini pada URL internal, yang sangat penting untuk **SEO dan keterlihatan halaman**.\n\n```vue fileName=\"components/Links.vue\"\n\n\n\n```\n\nKemudian gunakan komponen ini di seluruh aplikasi Anda:\n\n```vue fileName=\"layouts/default.vue\"\n\n\n\n```\n\n> Dengan menggunakan `NuxtLink` dengan path yang dilokalkan, Anda memastikan bahwa:\n>\n> - Mesin pencari dapat merayapi dan mengindeks semua versi bahasa dari halaman Anda\n> - Pengguna dapat membagikan URL yang dilokalkan secara langsung\n> - Riwayat browser berfungsi dengan benar dengan URL yang diawali locale\n\n### (Opsional) Langkah 9: Menangani Metadata dan SEO\n\nNuxt menyediakan kemampuan SEO yang sangat baik melalui composable `useHead` (diimpor otomatis). Anda dapat menggunakan Intlayer untuk menangani metadata yang dilokalkan menggunakan accessor `.raw` atau `.value` untuk mendapatkan nilai string primitif:\n\n```vue fileName=\"pages/about.vue\"\n\n\n\n```\n\n> Sebagai alternatif, Anda dapat menggunakan fungsi `import { getIntlayer } from \"intlayer\"` untuk mendapatkan konten tanpa reaktivitas Vue.\n\n> **Mengakses nilai konten:**\n>\n> - Gunakan `.raw` untuk mendapatkan nilai string primitif (non-reaktif)\n> - Gunakan `.value` untuk mendapatkan nilai reaktif\n> - Gunakan sintaks komponen `` untuk dukungan Visual Editor\n\nBuat deklarasi konten yang sesuai:\n\n```ts fileName=\"pages/about-page.content.ts\" contentDeclarationFormat={[\"typescript\", \"esm\", \"commonjs\"]}\nimport { t, type Dictionary } from \"intlayer\";\n\nconst aboutPageContent = {\n key: \"about-page\",\n content: {\n metaTitle: t({\n en: \"Tentang Kami - Perusahaan Saya\",\n fr: \"À Propos - Ma Société\",\n es: \"Acerca de Nosotros - Mi Empresa\",\n }),\n metaDescription: t({\n en: \"Pelajari lebih lanjut tentang perusahaan kami dan misi kami\",\n fr: \"En savoir plus sur notre société et notre mission\",\n es: \"Conozca más sobre nuestra empresa y nuestra misión\",\n }),\n title: t({\n en: \"Tentang Kami\",\n fr: \"À Propos\",\n es: \"Acerca de Nosotros\",\n }),\n },\n} satisfies Dictionary;\n\nexport default aboutPageContent;\n```\n\n```json fileName=\"pages/about-page.content.json\" contentDeclarationFormat=\"json\"\n{\n \"$schema\": \"https://intlayer.org/schema.json\",\n \"key\": \"about-page\",\n \"content\": {\n \"metaTitle\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Tentang Kami - Perusahaan Saya\",\n \"fr\": \"À Propos - Ma Société\",\n \"es\": \"Acerca de Nosotros - Mi Empresa\"\n }\n },\n \"metaDescription\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"Learn more about our company and our mission\",\n \"fr\": \"En savoir plus sur notre société et notre mission\",\n \"es\": \"Conozca más sobre nuestra empresa y nuestra misión\",\n \"id\": \"Pelajari lebih lanjut tentang perusahaan kami dan misi kami\"\n }\n },\n \"title\": {\n \"nodeType\": \"translation\",\n \"translation\": {\n \"en\": \"About Us\",\n \"fr\": \"À Propos\",\n \"es\": \"Acerca de Nosotros\",\n \"id\": \"Tentang Kami\"\n }\n }\n }\n}\n```\n\n### Konfigurasi Git\n\nDisarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari meng-commit file tersebut ke repositori Git Anda.\n\nUntuk melakukannya, Anda dapat menambahkan instruksi berikut ke file `.gitignore` Anda:\n\n```plaintext fileName=\".gitignore\"\n# Abaikan file yang dihasilkan oleh Intlayer\n.intlayer\n```\n\n### Ekstensi VS Code\n\nUntuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal **Ekstensi VS Code Intlayer** resmi.\n\n[Pasang dari VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)\n\nEkstensi ini menyediakan:\n\n- **Autocompletion** untuk kunci terjemahan.\n- **Deteksi kesalahan waktu nyata** untuk terjemahan yang hilang.\n- **Pratinjau inline** dari konten yang diterjemahkan.\n- **Aksi cepat** untuk dengan mudah membuat dan memperbarui terjemahan.\n\nUntuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat [dokumentasi Ekstensi VS Code Intlayer](https://intlayer.org/doc/vs-code-extension).\n\n---\n\n### Melangkah Lebih Jauh\n\nUntuk melangkah lebih jauh, Anda dapat mengimplementasikan [editor visual](/id/doc/concept/editor) atau mengeksternalisasi konten Anda menggunakan [CMS](/id/doc/concept/cms).\n","about":"Temukan cara membuat situs web Nuxt dan Vue Anda menjadi multibahasa. Ikuti dokumentasi untuk melakukan internasionalisasi (i18n) dan menerjemahkannya.","url":"https://intlayer.org/id/doc/environment/nuxt-and-vue","datePublished":"18-06-2025","dateModified":"06-05-2026","keywords":"Internasionalisasi, Dokumentasi, Intlayer, Nuxt, Vue, JavaScript","license":"https://raw.githubusercontent.com/aymericzip/intlayer/refs/heads/main/LICENSE","audience":{"@type":"Audience","audienceType":"Pengembang, Manajer Konten"}}
    Dibuat:2025-06-18Terakhir diperbarui:2026-05-06
    Lihat template aplikasi di GitHub

    Halaman ini memiliki template aplikasi yang tersedia.

    Lihat aplikasi showcase

    Halaman ini menautkan ke demo langsung template.

    Tonton tutorial video

    Halaman ini memiliki tutorial video yang tersedia.

    Referensikan dokumen ini ke asisten AI favorit Anda
    ChatGPT
    Claude
    DeepSeek
    Google AI mode
    Gemini
    Perplexity
    Mistral
    Grok

    Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda

    Riwayat Versi

    1. "Perbarui penggunaan API useIntlayer Solid ke akses properti langsung"
      v8.9.04/5/2026
    2. "Memperbarui LocaleSwitcher, SEO, metadata"
      v7.3.117/12/2025
    3. "Inisialisasi riwayat"
      v5.5.1029/6/2025

    Konten halaman ini diterjemahkan menggunakan AI.

    Lihat versi terakhir dari konten aslinya dalam bahasa Inggris
    Sunting dokumen ini

    Jika Anda memiliki ide untuk meningkatkan dokumentasi ini, silakan berkontribusi dengan mengajukan pull request di GitHub.

    Tautan GitHub ke dokumentasi
    Salin

    Salin Markdown dokumentasi ke clipboard

    Terjemahkan situs web Nuxt dan Vue Anda menggunakan Intlayer | Internasionalisasi (i18n)

    Daftar Isi

    Apa itu Intlayer?

    Intlayer adalah pustaka internasionalisasi (i18n) sumber terbuka yang inovatif, dirancang untuk menyederhanakan dukungan multibahasa dalam aplikasi web modern.

    Dengan Intlayer, Anda dapat:

    • Mengelola terjemahan dengan mudah menggunakan kamus deklaratif di tingkat komponen.
    • Melokalkan metadata, rute, dan konten secara dinamis.
    • Menjamin dukungan TypeScript dengan tipe yang dihasilkan secara otomatis, meningkatkan autocompletion dan deteksi kesalahan.
    • Memanfaatkan fitur canggih, seperti deteksi dan pengalihan locale secara dinamis.

    Panduan Langkah demi Langkah untuk Mengatur Intlayer di Aplikasi Nuxt

    www.youtube.com
    ide.intlayer.org
    intlayer-nuxt-4-template.vercel.app

    Lihat Template Aplikasi di GitHub.

    Langkah 1: Pasang Dependensi

    Pasang paket yang diperlukan menggunakan npm:

    bash
    Salin kode

    Salin kode ke clipboard

    npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
    • intlayer

      Paket inti yang menyediakan alat internasionalisasi untuk manajemen konfigurasi, terjemahan, deklarasi konten, transpile, dan perintah CLI.

    • vue-intlayer Paket yang mengintegrasikan Intlayer dengan aplikasi Vue. Ini adalah composables untuk komponen Vue.

    • nuxt-intlayer Modul Nuxt yang mengintegrasikan Intlayer dengan aplikasi Nuxt. Modul ini menyediakan pengaturan otomatis, middleware untuk deteksi locale, manajemen cookie, dan pengalihan URL.

    Langkah 2: Konfigurasi proyek Anda

    Buat file konfigurasi untuk mengatur bahasa aplikasi Anda:

    intlayer.config.ts
    Salin kode

    Salin kode ke clipboard

    import { Locales, type IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      internationalization: {
        locales: [
          Locales.ENGLISH,
          Locales.FRENCH,
          Locales.SPANISH,
          // Locale lain milik Anda
        ],
        defaultLocale: Locales.ENGLISH,
      },
    };
    
    export default config;
    Melalui file konfigurasi ini, Anda dapat mengatur URL yang dilokalkan, pengalihan middleware, nama cookie, lokasi dan ekstensi deklarasi konten Anda, menonaktifkan log Intlayer di konsol, dan lainnya. Untuk daftar lengkap parameter yang tersedia, lihat dokumentasi konfigurasi.

    Langkah 3: Integrasikan Intlayer dalam Konfigurasi Nuxt Anda

    Tambahkan modul intlayer ke konfigurasi Nuxt Anda:

    nuxt.config.ts
    Salin kode

    Salin kode ke clipboard

    import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Konfigurasi Nuxt Anda yang sudah ada  modules: ["nuxt-intlayer"],});
    Modul nuxt-intlayer secara otomatis menangani integrasi Intlayer dengan Nuxt. Modul ini mengatur pembuatan deklarasi konten, memantau file dalam mode pengembangan, menyediakan middleware untuk deteksi locale, dan mengelola routing yang dilokalkan.

    Langkah 4: Deklarasikan Konten Anda

    Buat dan kelola deklarasi konten Anda untuk menyimpan terjemahan:

    Deklarasi konten Anda dapat didefinisikan di mana saja dalam aplikasi Anda selama termasuk dalam direktori contentDir (secara default, ./src). Dan sesuai dengan ekstensi file deklarasi konten (secara default, .content.{json,ts,tsx,js,jsx,mjs,cjs}).
    Untuk informasi lebih lanjut, lihat dokumentasi deklarasi konten.

    Langkah 5: Gunakan Intlayer dalam Kode Anda

    Akses kamus konten Anda di seluruh aplikasi Nuxt menggunakan composable useIntlayer:

    components/HelloWorld.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>

    Mengakses Konten di Intlayer

    Intlayer menawarkan berbagai API untuk mengakses konten Anda:

    • Sintaks berbasis komponen (direkomendasikan): Gunakan sintaks <myContent />, atau <Component :is="myContent" /> untuk merender konten sebagai Node Intlayer. Ini terintegrasi dengan mulus dengan Visual Editor dan CMS.

    • Sintaks berbasis string:
      Gunakan {{ myContent }} untuk merender konten sebagai teks biasa, tanpa dukungan Visual Editor.

    • Sintaks HTML mentah:
      Gunakan <div v-html="myContent" /> untuk merender konten sebagai HTML mentah, tanpa dukungan Visual Editor.

    • Sintaks destrukturisasi:
      Composable useIntlayer mengembalikan sebuah Proxy dengan konten. Proxy ini dapat didestrukturisasi untuk mengakses konten sambil menjaga reaktivitas.

      • Gunakan const content = useIntlayer("myContent"); dan {{ content.myContent }} / <content.myContent />.
      • Atau gunakan const { myContent } = useIntlayer("myContent"); dan {{ myContent}} / <myContent/> untuk mendestruktur konten.

    (Opsional) Langkah 6: Ubah bahasa konten Anda

    Untuk mengubah bahasa konten Anda, Anda dapat menggunakan fungsi setLocale yang disediakan oleh composable useLocale. Fungsi ini memungkinkan Anda untuk mengatur locale aplikasi dan memperbarui konten sesuai dengan itu.

    Buat komponen untuk beralih antar bahasa menggunakan NuxtLink. Menggunakan tautan daripada tombol untuk pergantian locale adalah praktik terbaik untuk SEO dan keterlihatan halaman, karena memungkinkan mesin pencari untuk merayapi dan mengindeks semua versi terlokalisasi dari halaman Anda:

    components/LocaleSwitcher.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt secara otomatis mengimpor useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
    Menggunakan NuxtLink dengan atribut href yang tepat (melalui getLocalizedUrl) memastikan bahwa mesin pencari dapat menemukan semua varian bahasa dari halaman Anda. Ini lebih disukai dibandingkan dengan pengalihan locale hanya menggunakan JavaScript, yang mungkin tidak diikuti oleh perayap mesin pencari.

    Kemudian, atur app.vue Anda untuk menggunakan layout:

    app.vue
    Salin kode

    Salin kode ke clipboard

    <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>

    (Opsional) Langkah 6b: Buat Layout dengan Navigasi

    Layout Nuxt memungkinkan Anda mendefinisikan struktur umum untuk halaman Anda. Buat layout default yang mencakup locale switcher dan navigasi:

    layouts/default.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Beranda</Links>    <Links href="/about">Tentang</Links>  </div></template>

    Komponen Links (ditunjukkan di bawah) memastikan bahwa tautan navigasi internal secara otomatis dilokalkan.

    (Opsional) Langkah 7: Tambahkan Routing yang Dilokalkan ke aplikasi Anda

    Nuxt secara otomatis menangani routing yang dilokalkan saat menggunakan modul nuxt-intlayer. Ini membuat rute untuk setiap bahasa secara otomatis berdasarkan struktur direktori halaman Anda.

    Contoh:

    plaintext
    Salin kode

    Salin kode ke clipboard

    pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact

    Untuk membuat halaman yang dilokalkan, cukup buat file Vue Anda di direktori pages/. Berikut adalah dua contoh halaman:

    Halaman Beranda (pages/index.vue):

    pages/index.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>

    Halaman Tentang (pages/about.vue):

    pages/about.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Gunakan .raw untuk akses string primitif  meta: [    {      name: "description",      content: content.metaDescription.raw, // Gunakan .raw untuk akses string primitif    },  ],});</script><template>  <h1><content.title /></h1></template>
    Catatan: useHead diimpor secara otomatis di Nuxt. Anda dapat mengakses nilai konten menggunakan .value (reaktif) atau .raw (string primitif) sesuai kebutuhan Anda.

    Modul nuxt-intlayer secara otomatis akan:

    • Mendeteksi locale yang dipilih pengguna
    • Menangani pergantian locale melalui URL
    • Mengatur atribut <html lang=""> yang sesuai
    • Mengelola cookie locale
    • Mengarahkan pengguna ke URL lokal yang sesuai

    (Opsional) Langkah 8: Membuat Komponen Link yang Dilokalkan

    Untuk memastikan navigasi aplikasi Anda menghormati locale saat ini, Anda dapat membuat komponen Links kustom. Komponen ini secara otomatis menambahkan prefix bahasa saat ini pada URL internal, yang sangat penting untuk SEO dan keterlihatan halaman.

    components/Links.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Hitung path akhirconst finalPath = computed(() => {  // 1. Periksa apakah link bersifat eksternal  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Jika eksternal, kembalikan apa adanya (NuxtLink menangani pembuatan tag <a>)  if (isExternal) return props.href;  // 3. Jika internal, lokalize URL-nya  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>

    Kemudian gunakan komponen ini di seluruh aplikasi Anda:

    layouts/default.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Beranda</Links>    <Links href="/about">Tentang</Links>  </div></template>

    Dengan menggunakan NuxtLink dengan path yang dilokalkan, Anda memastikan bahwa:

    • Mesin pencari dapat merayapi dan mengindeks semua versi bahasa dari halaman Anda
    • Pengguna dapat membagikan URL yang dilokalkan secara langsung
    • Riwayat browser berfungsi dengan benar dengan URL yang diawali locale

    (Opsional) Langkah 9: Menangani Metadata dan SEO

    Nuxt menyediakan kemampuan SEO yang sangat baik melalui composable useHead (diimpor otomatis). Anda dapat menggunakan Intlayer untuk menangani metadata yang dilokalkan menggunakan accessor .raw atau .value untuk mendapatkan nilai string primitif:

    pages/about.vue
    Salin kode

    Salin kode ke clipboard

    <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead diimpor otomatis di Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Gunakan .raw untuk akses string primitif  meta: [    {      name: "description",      content: content.metaDescription.raw, // Gunakan .raw untuk akses string primitif    },  ],});</script><template>  <h1><content.title /></h1></template>
    Sebagai alternatif, Anda dapat menggunakan fungsi import { getIntlayer } from "intlayer" untuk mendapatkan konten tanpa reaktivitas Vue.

    Mengakses nilai konten:

    • Gunakan .raw untuk mendapatkan nilai string primitif (non-reaktif)
    • Gunakan .value untuk mendapatkan nilai reaktif
    • Gunakan sintaks komponen <content.key /> untuk dukungan Visual Editor

    Buat deklarasi konten yang sesuai:

    pages/about-page.content.ts
    Salin kode

    Salin kode ke clipboard

    import { t, type Dictionary } from "intlayer";
    
    const aboutPageContent = {
      key: "about-page",
      content: {
        metaTitle: t({
          en: "Tentang Kami - Perusahaan Saya",
          fr: "À Propos - Ma Société",
          es: "Acerca de Nosotros - Mi Empresa",
        }),
        metaDescription: t({
          en: "Pelajari lebih lanjut tentang perusahaan kami dan misi kami",
          fr: "En savoir plus sur notre société et notre mission",
          es: "Conozca más sobre nuestra empresa y nuestra misión",
        }),
        title: t({
          en: "Tentang Kami",
          fr: "À Propos",
          es: "Acerca de Nosotros",
        }),
      },
    } satisfies Dictionary;
    
    export default aboutPageContent;

    Konfigurasi Git

    Disarankan untuk mengabaikan file yang dihasilkan oleh Intlayer. Ini memungkinkan Anda menghindari meng-commit file tersebut ke repositori Git Anda.

    Untuk melakukannya, Anda dapat menambahkan instruksi berikut ke file .gitignore Anda:

    .gitignore
    Salin kode

    Salin kode ke clipboard

    # Abaikan file yang dihasilkan oleh Intlayer.intlayer

    Ekstensi VS Code

    Untuk meningkatkan pengalaman pengembangan Anda dengan Intlayer, Anda dapat menginstal Ekstensi VS Code Intlayer resmi.

    Pasang dari VS Code Marketplace

    Ekstensi ini menyediakan:

    • Autocompletion untuk kunci terjemahan.
    • Deteksi kesalahan waktu nyata untuk terjemahan yang hilang.
    • Pratinjau inline dari konten yang diterjemahkan.
    • Aksi cepat untuk dengan mudah membuat dan memperbarui terjemahan.

    Untuk detail lebih lanjut tentang cara menggunakan ekstensi ini, lihat dokumentasi Ekstensi VS Code Intlayer.


    Melangkah Lebih Jauh

    Untuk melangkah lebih jauh, Anda dapat mengimplementasikan editor visual atau mengeksternalisasi konten Anda menggunakan CMS.

    Vite dan Vue
    Vite dan Solid
    Alt+→

    Di halaman ini

      Diskusi bersifat anonim dan ditinjau secara berkala untuk mengatasi masalah umum. Jangan ragu untuk berbagi ide fitur, masukan tentang dokumentasi, atau apa pun yang terkait dengan Intlayer, kami menggunakan masukan ini untuk membentuk peta jalan dan meningkatkan produk.

      npm install intlayer vue-intlayernpm install --save-dev nuxt-intlayernpx intlayer init
      import { defineNuxtConfig } from "nuxt/config";export default defineNuxtConfig({  // ... Konfigurasi Nuxt Anda yang sudah ada  modules: ["nuxt-intlayer"],});
      <script setup lang="ts">import { ref } from "vue";import { useIntlayer } from "vue-intlayer";defineProps({  msg: String,});const {  count,  edit,  checkOut,  nuxtIntlayer,  learnMore,  nuxtDocs,  readTheDocs,} = useIntlayer("helloworld");const countRef = ref(0);</script><template>  <h1>{{ msg }}</h1>  <div class="card">    <button type="button" @click="countRef++">      <count />      {{ countRef }}    </button>    <p v-html="edit"></p>  </div>  <p>    <checkOut />    <a href="https://nuxt.com/docs/getting-started/introduction" target="_blank"      >Nuxt</a    >, <nuxtIntlayer />  </p>  <p>    <learnMore />    <a href="https://nuxt.com" target="_blank"><nuxtDocs /></a>.  </p>  <p class="read-the-docs"><readTheDocs /></p>  <p class="read-the-docs">{{ readTheDocs }}</p></template>
      <script setup lang="ts">import { getLocaleName, getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";// Nuxt secara otomatis mengimpor useRouteconst route = useRoute();const { locale, availableLocales, setLocale } = useLocale();</script><template>  <nav class="locale-switcher">    <NuxtLink      v-for="localeEl in availableLocales"      :key="localeEl"      :to="getLocalizedUrl(route.fullPath, localeEl)"      class="locale-link"      :class="{ 'active-locale': localeEl === locale }"      @click="setLocale(localeEl)"    >      {{ getLocaleName(localeEl) }}    </NuxtLink>  </nav></template>
      <template>  <NuxtLayout>    <NuxtPage />  </NuxtLayout></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Beranda</Links>    <Links href="/about">Tentang</Links>  </div></template>
      pages/├── index.vue          → /, /fr, /es├── about.vue          → /about, /fr/about, /es/about└── contact/    └── index.vue      → /contact, /fr/contact, /es/contact
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("home-page");useHead({  title: content.metaTitle.raw,  meta: [    {      name: "description",      content: content.metaDescription.raw,    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";const content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Gunakan .raw untuk akses string primitif  meta: [    {      name: "description",      content: content.metaDescription.raw, // Gunakan .raw untuk akses string primitif    },  ],});</script><template>  <h1><content.title /></h1></template>
      <script setup lang="ts">import { getLocalizedUrl } from "intlayer";import { useLocale } from "vue-intlayer";interface Props {  href: string;  locale?: string;}const props = defineProps<Props>();const { locale: currentLocale } = useLocale();// Hitung path akhirconst finalPath = computed(() => {  // 1. Periksa apakah link bersifat eksternal  const isExternal = /^https?:\/\//.test(props.href || "");  // 2. Jika eksternal, kembalikan apa adanya (NuxtLink menangani pembuatan tag <a>)  if (isExternal) return props.href;  // 3. Jika internal, lokalize URL-nya  const targetLocale = props.locale || currentLocale.value;  return getLocalizedUrl(props.href, targetLocale);});</script><template>  <NuxtLink :to="finalPath" v-bind="$attrs">    <slot />  </NuxtLink></template>
      <script setup lang="ts">import Links from "~/components/Links.vue";import LocaleSwitcher from "~/components/LocaleSwitcher.vue";</script><template>  <div>    <header>      <LocaleSwitcher />    </header>    <main>      <slot />    </main>    <Links href="/">Beranda</Links>    <Links href="/about">Tentang</Links>  </div></template>
      <script setup lang="ts">import { useIntlayer } from "vue-intlayer";// useHead diimpor otomatis di Nuxtconst content = useIntlayer("about-page");useHead({  title: content.metaTitle.raw, // Gunakan .raw untuk akses string primitif  meta: [    {      name: "description",      content: content.metaDescription.raw, // Gunakan .raw untuk akses string primitif    },  ],});</script><template>  <h1><content.title /></h1></template>
      # Abaikan file yang dihasilkan oleh Intlayer.intlayer