Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Riwayat Versi
- "Menambahkan dokumentasi pemeta locale"v5.7.227/7/2025
Konten halaman ini diterjemahkan menggunakan AI.
Lihat versi terakhir dari konten aslinya dalam bahasa InggrisIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Pemeta Locale
Pemeta Locale adalah utilitas yang kuat yang membantu Anda bekerja dengan data internasionalisasi dalam aplikasi Intlayer Anda. Ini menyediakan tiga fungsi utama untuk mengubah dan mengatur data spesifik locale: localeMap, localeFlatMap, dan localeRecord.
Cara Kerja Pemeta Locale
Pemeta Locale beroperasi pada objek LocaleData yang berisi semua informasi yang diperlukan tentang sebuah locale:
Salin kode ke clipboard
type LocaleData = { locale: LocalesValues; // Kode locale saat ini (misalnya, 'en', 'fr') defaultLocale: LocalesValues; // Kode locale default isDefault: boolean; // Apakah ini adalah locale default locales: LocalesValues[]; // Array dari semua locale yang tersedia urlPrefix: string; // Prefix URL untuk locale ini (misalnya, '/fr' atau '')};Fungsi pemeta secara otomatis menghasilkan data ini untuk setiap locale dalam konfigurasi Anda, dengan mempertimbangkan:
- Daftar locale yang telah Anda konfigurasi
- Pengaturan locale default
- Apakah locale default harus diberi prefix di URL
Fungsi Inti
localeMap
Mengubah setiap locale menjadi sebuah objek tunggal menggunakan fungsi pemeta.
Salin kode ke clipboard
localeMap<T>( mapper: (locale: LocaleData) => T, locales?: LocalesValues[], defaultLocale?: LocalesValues, prefixDefault?: boolean): T[]Contoh: Membuat objek route
Salin kode ke clipboard
import { localeMap } from "intlayer";const routes = localeMap((localizedData) => ({ path: localizedData.urlPrefix, name: localizedData.locale, isDefault: localizedData.isDefault, locales: localizedData.locales, defaultLocale: localizedData.defaultLocale,}));// Hasil:// [// { path: '/', name: 'en', isDefault: true, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },// { path: '/fr', name: 'fr', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' },// { path: '/es', name: 'es', isDefault: false, locales: ['en', 'fr', 'es'], defaultLocale: 'en' }// ]localeFlatMap
Mirip dengan localeMap, tetapi fungsi pemeta mengembalikan array objek yang kemudian diratakan menjadi satu array tunggal.
Salin kode ke clipboard
localeFlatMap<T>( mapper: (locale: LocaleData) => T[], locales?: LocalesValues[], defaultLocale?: LocalesValues, prefixDefault?: boolean): T[]Contoh: Membuat beberapa route per locale
Salin kode ke clipboard
import { localeFlatMap } from "intlayer";const routes = localeFlatMap((localizedData) => [ { path: localizedData.urlPrefix, name: localizedData.locale, isDefault: localizedData.isDefault, }, { path: `${localizedData.urlPrefix}/about`, name: `${localizedData.locale}-about`, isDefault: localizedData.isDefault, },]);// Hasil:// [// { path: '/', name: 'en', isDefault: true },// { path: '/about', name: 'en-about', isDefault: true },// { path: '/fr', name: 'fr', isDefault: false },// { path: '/fr/about', name: 'fr-about', isDefault: false },// { path: '/es', name: 'es', isDefault: false },// { path: '/es/about', name: 'es-about', isDefault: false }// ]localeRecord
Membuat objek record di mana setiap locale menjadi kunci yang memetakan ke nilai yang diubah oleh fungsi pemeta.
Salin kode ke clipboard
localeRecord<T>( mapper: (locale: LocaleData) => T, locales?: Locales[], defaultLocale?: Locales, prefixDefault?: boolean): Record<Locales, T>Contoh: Memuat file terjemahan
Salin kode ke clipboard
import { localeRecord } from "intlayer";const translations = localeRecord(({ locale }) => require(`./translations/${locale}.json`));// Hasil:// {// en: { welcome: 'Welcome', hello: 'Hello' },// fr: { welcome: 'Bienvenue', hello: 'Bonjour' },// es: { welcome: 'Bienvenido', hello: 'Hola' }// }Mengatur Locale Mapper
Locale Mapper secara otomatis menggunakan konfigurasi Intlayer Anda, tetapi Anda dapat menimpa default dengan melewatkan parameter:
Menggunakan Konfigurasi Default
Salin kode ke clipboard
import { localeMap } from "intlayer";// Menggunakan konfigurasi dari intlayer.config.tsconst routes = localeMap((data) => ({ path: data.urlPrefix, locale: data.locale,}));Menimpa Konfigurasi
Salin kode ke clipboard
import { localeMap } from "intlayer";// Menimpa locales dan default localeconst customRoutes = localeMap( (data) => ({ path: data.urlPrefix, locale: data.locale }), ["en", "fr", "de"], // Locales kustom "en", // Default locale kustom true // Prefix default locale di URL);Contoh Penggunaan Lanjutan
Membuat Menu Navigasi
Salin kode ke clipboard
import { localeMap } from "intlayer";const navigationItems = localeMap((data) => ({ label: data.locale.toUpperCase(), href: data.urlPrefix || "/", isActive: data.isDefault, flag: `/flags/${data.locale}.svg`,}));Menghasilkan Data Sitemap
Salin kode ke clipboard
import { localeFlatMap } from "intlayer";const sitemapUrls = localeFlatMap((data) => [ { url: `${data.urlPrefix}/`, lastmod: new Date().toISOString(), changefreq: "daily", priority: data.isDefault ? 1.0 : 0.8, }, { url: `${data.urlPrefix}/about`, lastmod: new Date().toISOString(), changefreq: "monthly", priority: data.isDefault ? 0.8 : 0.6, },]);Pemuatan Terjemahan Dinamis
Salin kode ke clipboard
import { localeRecord } from "intlayer";const translationModules = localeRecord(({ locale }) => ({ messages: import(`./locales/${locale}/messages.json`), validation: import(`./locales/${locale}/validation.json`), metadata: { locale, direction: ["ar", "he", "fa"].includes(locale) ? "rtl" : "ltr", },}));Integrasi Konfigurasi
Locale Mapper terintegrasi dengan mulus ke dalam konfigurasi Intlayer Anda:
- Locales: Secara otomatis menggunakan
configuration.internationalization.locales - Default Locale: Menggunakan
configuration.internationalization.defaultLocale - URL Prefixing: Menghormati
configuration.middleware.prefixDefault
Ini memastikan konsistensi di seluruh aplikasi Anda dan mengurangi duplikasi konfigurasi.