Sorunuzu sorun ve bu sayfaya ve seçtiğiniz AI sağlayıcısına referans vererek belgenin bir özetini alın
Sürüm Geçmişi
- "next-intl / react-intl tek dosya düzenleri için splitKeys seçeneği eklendi (üst düzey ad alanı anahtarı başına bir sözlük)"v9.0.021.06.2026
- "ICU ve i18next format desteği eklendi"v7.5.013.12.2025
- "İlk JSON Senkronizasyon Eklentisi dokümantasyonu"v6.1.605.10.2025
Bu sayfanın içeriği bir yapay zeka kullanılarak çevrildi.
Orijinal içeriğin İngilizce son sürümünü görüntüleyinIf 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
JSON Senkronizasyonu (i18n köprüleri) - ICU / i18next desteği ile JSON Senkronizasyonu
Intlayer'ı mevcut i18n yapınıza bir eklenti olarak kullanın. Bu eklenti, JSON mesajlarınızı Intlayer sözlükleriyle senkronize tutar, böylece:
- i18next, next-intl, react-intl, vue-i18n, next-translate, nuxt-i18n, Solid-i18next, svelte-i18n vb. kullanmaya devam edebilirsiniz.
- Uygulamanızı yeniden yapılandırmadan Intlayer (CLI, CI, sağlayıcılar, CMS) ile mesajlarınızı yönetip çevirebilirsiniz.
- Her ekosistemi hedefleyen eğitimler ve SEO içerikleri sunabilir, aynı zamanda Intlayer'ı JSON yönetim katmanı olarak önerebilirsiniz.
Notlar ve mevcut kapsam:
- CMS'ye dışa aktarma, çeviriler ve klasik metinler için çalışır.
- Henüz eklemeler, çoğullar/ICU veya diğer kütüphanelerin gelişmiş çalışma zamanı özellikleri desteklenmemektedir.
- Görsel editör, üçüncü taraf i18n çıktıları için henüz desteklenmemektedir.
Bu eklenti ne zaman kullanılmalı
- Zaten bir i18n kütüphanesi kullanıyor ve mesajları JSON dosyalarında saklıyorsunuz.
- Rendering çalışma zamanınızı değiştirmeden AI destekli doldurma, CI'da test ve içerik operasyonları yapmak istiyorsunuz.
Kurulum
Kodu panoya kopyala
pnpm add -D @intlayer/sync-json-plugin# veyanpm i -D @intlayer/sync-json-pluginPlugins
Bu paket iki eklenti sağlar:
loadJSON: JSON dosyalarını Intlayer sözlüklerine yükler.- Bu eklenti, bir kaynaktan JSON dosyalarını yüklemek için kullanılır ve Intlayer sözlüklerine yüklenecektir. Tüm kod tabanını tarayabilir ve belirli JSON dosyalarını arayabilir.
Bu eklenti şu durumlarda kullanılabilir:
- JSON'larınızın belirli bir konumda yüklenmesini zorunlu kılan bir i18n kütüphanesi kullanıyorsanız (örn:
next-intl,i18next,react-intl,vue-i18n, vb.), ancak içerik bildirimlerinizi kod tabanınızda istediğiniz yere yerleştirmek istiyorsanız. - Mesajlarınızı uzak bir kaynaktan (örn: bir CMS, bir API, vb.) almak ve mesajlarınızı JSON dosyalarında saklamak istiyorsanız da kullanılabilir.
- JSON'larınızın belirli bir konumda yüklenmesini zorunlu kılan bir i18n kütüphanesi kullanıyorsanız (örn:
Arka planda, bu eklenti tüm kod tabanını tarayacak ve belirli JSON dosyalarını arayacak ve bunları Intlayer sözlüklerine yükleyecektir. Bu eklentinin çıktıyı ve çevirileri JSON dosyalarına geri yazmayacağını unutmayın.
- Bu eklenti, bir kaynaktan JSON dosyalarını yüklemek için kullanılır ve Intlayer sözlüklerine yüklenecektir. Tüm kod tabanını tarayabilir ve belirli JSON dosyalarını arayabilir.
Bu eklenti şu durumlarda kullanılabilir:
syncJSON: JSON dosyalarını Intlayer sözlükleriyle senkronize eder.- Bu eklenti, JSON dosyalarını Intlayer sözlükleriyle senkronize etmek için kullanılır. Verilen konumu tarayabilir ve belirli JSON dosyaları için desene uyan JSON'u yükleyebilir. Bu eklenti, başka bir i18n kütüphanesi kullanırken Intlayer'ın faydalarından yararlanmak istiyorsanız kullanışlıdır.
Her iki eklentiyi de kullanma
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { loadJSON, syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, // Mevcut JSON dosyalarınızı Intlayer sözlükleriyle senkronize tutun plugins: [ /** * src dizinindeki {key}.i18n.json desenine uyan tüm JSON dosyalarını yükleyecektir */ loadJSON({ source: ({ key }) => `./src/**/${key}.i18n.json`, locale: Locales.ENGLISH, priority: 1, // Bu JSON dosyalarının `./locales/en/${key}.json` adresindeki dosyalara göre öncelikli olmasını sağlar format: "intlayer", // JSON içeriğinin formatı }), /** * Çıktıyı ve çevirileri locales dizinindeki JSON dosyalarına yükleyecek ve yazacaktır */ syncJSON({ source: ({ key, locale }) => `./locales/${locale}/${key}.json`, priority: 0, format: "i18next", }), ],};export default config;syncJSON plugin
Hızlı başlangıç
Eklentiyi intlayer.config.ts dosyanıza ekleyin ve mevcut JSON yapınıza işaret edin.
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, // Mevcut JSON dosyalarınızı Intlayer sözlükleriyle senkronize tutun plugins: [ syncJSON({ // Yerel başına, ad alanı başına düzen (örneğin, next-intl, ad alanları ile i18next) source: ({ key, locale }) => `./locales/${locale}/${key}.json`, format: "icu", }), ],};export default config;Alternatif: her yerel için tek dosya (i18next/react-intl yapılandırmalarında yaygın):
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH], defaultLocale: Locales.ENGLISH, }, plugins: [ syncJSON({ format: "i18next", source: ({ locale }) => `./locales/${locale}.json`, format: "i18next", }), ],};export default config;Nasıl çalışır
- Okuma: eklenti,
sourceyapıcınızdan JSON dosyalarını keşfeder ve bunları Intlayer sözlükleri olarak yükler. - Yazma: derlemeler ve doldurmalar sonrası, yerelleştirilmiş JSON'u aynı yollara yazar (biçimlendirme sorunlarını önlemek için sonuna yeni satır ekleyerek).
- Otomatik doldurma: eklenti, her sözlük için bir
autoFillyolu belirtir.intlayer fillkomutunu çalıştırmak, JSON dosyalarınızdaki yalnızca eksik çevirileri varsayılan olarak günceller.
API:
Kodu panoya kopyala
syncJSON({ source: ({ key, locale }) => string, // zorunlu location?: string, // isteğe bağlı etiket, varsayılan: "plugin" priority?: number, // isteğe bağlı öncelik, çakışma çözümü için, varsayılan: 0 format?: 'intlayer' | 'icu' | 'i18next', // isteğe bağlı formatlayıcı, Intlayer runtime uyumluluğu için kullanılır splitKeys?: boolean, // isteğe bağlı, tek bir dosyayı üst düzey anahtar başına bir sözlüğe böler (otomatik algılanır)});format ('intlayer' | 'icu' | 'i18next')
JSON dosyalarını senkronize ederken sözlük içeriği için kullanılacak formatlayıcıyı belirtir. Bu, Intlayer runtime ile uyumlu farklı mesaj formatlama sözdizimlerini kullanmanıza olanak tanır.
undefined: Hiçbir formatlayıcı kullanılmayacak, JSON içeriği olduğu gibi kullanılacak.'intlayer': Varsayılan Intlayer formatlayıcısı (varsayılan).'icu': ICU mesaj formatlamasını kullanır (react-intl, vue-i18n gibi kütüphanelerle uyumlu).'i18next': i18next mesaj formatlamasını kullanır (i18next, next-i18next, Solid-i18next ile uyumlu).
Bir formatlayıcı kullanmanın JSON içeriğinizi girdi ve çıktıda dönüştüreceğini unutmayın. ICU çoğulları gibi karmaşık JSON kuralları için, ayrıştırma girdi ve çıktı arasında 1'e 1 eşleme garanti edemeyebilir. Intlayer runtime kullanmıyorsanız, bir formatlayıcı ayarlamamayı tercih edebilirsiniz.
Örnek:
Kodu panoya kopyala
syncJSON({ source: ({ key, locale }) => `./locales/${locale}/${key}.json`, format: "i18next", // Uyumluluk için i18next formatlaması kullan}),splitKeys (boolean)
İlk düzey anahtarları ad alanları olan tek bir JSON dosyasının, tüm dosyayı tutan tek bir sözlük yerine, üst düzey anahtar başına bir sözlük haline gelip gelmeyeceğini kontrol eder.
Bu, next-intl ve react-intl gibi kütüphanelerin ad alanı modeline uyar; burada bir messages/{locale}.json dosyası, ilk düzey anahtarlarıyla birden çok ad alanını gruplandırır ve her biri bağımsız olarak ele alınır (örneğin, useTranslations('Hero') Hero sözlüğüne çözümlenir).
undefined(varsayılan): otomatik algılanır —sourcedeseninde{key}segmenti yoksa dosya bölünür (bir dosya her ad alanını tutar), aksi takdirde tek bir sözlük olarak kalır (anahtar başına bir dosya).true: her üst düzey anahtarı her zaman kendi sözlüğüne böler.false: asla bölmez; tüm dosya tek bir sözlük haline gelir.
Tek bir messages/{locale}.json dosyası verildiğinde:
Kodu panoya kopyala
{ "Hero": { "title": "Full-stack developer" }, "Nav": { "work": "Work", "about": "About" }, "About": { "lead": "I build apps end to end." }}Kodu panoya kopyala
syncJSON({ format: "icu", source: ({ locale }) => `./messages/${locale}.json`, // splitKeys: true, // desenin `{key}` segmenti olmadığı için ima edilir}),Bu, üç sözlük (Hero, Nav ve About) üretir, böylece useTranslations('Hero') (next-intl) doğru şekilde çözümlenir. Geri yazma işleminde, tüm ad alanları aynı yerel başına dosyada yeniden birleştirilir.
sourceiçinde açık{key}segmentini koruduğunuzda (örneğin,./locales/${locale}/${key}.json), her dosya zaten bir ad alanıdır, bu nedenle bölme varsayılan olarak devre dışıdır.
Multiple JSON sources and priority
Farklı JSON kaynaklarını senkronize etmek için birden fazla syncJSON eklentisi ekleyebilirsiniz. Bu, projenizde birden fazla i18n kütüphanesi veya farklı JSON yapıları olduğunda faydalıdır.
Öncelik sistemi
Birden fazla eklenti aynı sözlük anahtarını hedeflediğinde, priority parametresi hangi eklentinin öncelikli olduğunu belirler:
- Daha yüksek öncelik numaraları, daha düşük olanlara karşı kazanır
.contentdosyalarının varsayılan önceliği0'dır- Eklentilerin varsayılan önceliği
0'dır - Aynı önceliğe sahip eklentiler, yapılandırmada göründükleri sırayla işlenir
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { syncJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH], defaultLocale: Locales.ENGLISH, }, plugins: [ // Birincil JSON kaynağı (en yüksek öncelik) syncJSON({ format: "i18next", source: ({ key, locale }) => `./locales/${locale}/${key}.json`, location: "main-translations", priority: 10, }), // Yedek JSON kaynağı (daha düşük öncelik) syncJSON({ format: "i18next", source: ({ locale }) => `./fallback-locales/${locale}.json`, location: "fallback-translations", priority: 5, }), // Eski JSON kaynağı (en düşük öncelik) syncJSON({ format: "i18next", source: ({ locale }) => `/my/other/app/legacy/${locale}/messages.json`, location: "legacy-translations", priority: 1, }), ],};export default config;Load JSON plugin
Hızlı başlangıç
Mevcut JSON dosyalarını Intlayer sözlükleri olarak almak için eklentiyi intlayer.config.ts dosyanıza ekleyin. Bu eklenti salt okunurdur (diske yazma yapmaz):
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { loadJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH, Locales.SPANISH], defaultLocale: Locales.ENGLISH, }, plugins: [ // Kaynak ağacınızın herhangi bir yerinde bulunan JSON mesajlarını alın loadJSON({ source: ({ key }) => `./src/**/${key}.i18n.json`, // Eklenti örneği başına tek bir yerel yükleyin (yapılandırma varsayılan yereline ayarlanır) locale: Locales.ENGLISH, priority: 0, }), ],};export default config;Alternatif: yerel başına düzen, yine salt okunur (yalnızca seçilen yerel yüklenir):
Kodu panoya kopyala
import { Locales, type IntlayerConfig } from "intlayer";import { loadJSON } from "@intlayer/sync-json-plugin";const config: IntlayerConfig = { internationalization: { locales: [Locales.ENGLISH, Locales.FRENCH], defaultLocale: Locales.ENGLISH, }, plugins: [ loadJSON({ // Bu desenden yalnızca Locales.FRENCH için dosyalar yüklenecektir source: ({ key, locale }) => `./locales/${locale}/${key}.json`, locale: Locales.FRENCH, }), ],};export default config;Nasıl çalışır
- Keşfet:
sourceyapıcınızdan bir glob oluşturur ve eşleşen JSON dosyalarını toplar. - Al: her JSON dosyasını sağlanan
localeile bir Intlayer sözlüğü olarak yükler. - Salt okunur: çıktı dosyalarını yazmaz veya biçimlendirmez; gidiş-dönüş senkronizasyonuna ihtiyacınız varsa
syncJSONkullanın. - Otomatik doldurmaya hazır:
filldeseni tanımlar, böyleceintlayer content filleksik anahtarları CLI aracılığıyla doldurabilir.
API
Kodu panoya kopyala
loadJSON({ // JSON'unuza giden yolları oluşturun. Yapınızda yerel segment yoksa `locale` isteğe bağlıdır source: ({ key, locale }) => string, // Bu eklenti örneği tarafından yüklenen sözlükler için hedef yerel // configuration.internationalization.defaultLocale varsayılanına ayarlanır locale?: Locale, // Kaynağı tanımlamak için isteğe bağlı etiket location?: string, // varsayılan: "plugin" // Diğer kaynaklara karşı çakışma çözümü için kullanılan öncelik priority?: number, // varsayılan: 0 // JSON içeriği için isteğe bağlı formatlayıcı format?: 'intlayer' | 'icu' | 'i18next', // varsayılan: 'intlayer' // Tek bir dosyayı üst düzey anahtar başına bir sözlüğe böler (otomatik algılanır) splitKeys?: boolean,});format ('intlayer' | 'icu' | 'i18next')
JSON dosyalarını yüklerken sözlük içeriği için kullanılacak formatlayıcıyı belirtir. Bu, çeşitli i18n kütüphaneleriyle uyumlu farklı mesaj formatlama sözdizimlerini kullanmanıza olanak tanır.
'intlayer': Varsayılan Intlayer formatlayıcısı (varsayılan).'icu': ICU mesaj formatlamasını kullanır (react-intl, vue-i18n gibi kütüphanelerle uyumlu).'i18next': i18next mesaj formatlamasını kullanır (i18next, next-i18next, Solid-i18next ile uyumlu).
Örnek:
Kodu panoya kopyala
loadJSON({ source: ({ key }) => `./src/**/${key}.i18n.json`, locale: Locales.ENGLISH, format: "icu", // Uyumluluk için ICU formatlaması kullan}),splitKeys (boolean)
syncJSON ile aynı davranış: tek bir JSON dosyası, ilk düzey anahtarlarıyla birden çok ad alanını gruplandırdığında, her üst düzey anahtar kendi sözlüğü haline gelir.
undefined(varsayılan): otomatik algılanır —sourcedeseninde{key}segmenti yoksa bölünür, aksi takdirde tek bir sözlük olur.true/false: bölmeyi zorlar veya devre dışı bırakır.
Kodu panoya kopyala
loadJSON({ source: ({ locale }) => `./messages/${locale}.json`, format: "icu", // splitKeys otomatik etkinleştirildi: `Hero`, `Nav`, `About`, … her biri bir sözlük haline gelir}),Behavior and conventions
sourcemaskeniz bir yerel yer tutucusu içeriyorsa, yalnızca seçilenlocaleiçin dosyalar alınır.- Maskenizde
{key}segmenti yoksa, dosyanın her üst düzey anahtarı varsayılan olarak kendi sözlüğü haline gelir (bkz.splitKeys). Bunun yerine tüm dosyayı tek birindexsözlüğü olarak yüklemek içinsplitKeys: falseolarak ayarlayın. - Anahtarlar,
sourceyapıcınızdaki{key}yer tutucusunun yerine geçirilerek dosya yollarından türetilir. - Eklenti yalnızca keşfedilen dosyaları kullanır ve eksik yerelleri veya anahtarları uydurmaz.
fillyolu,source'unuzdan çıkarılır ve CLI aracılığıyla eksik değerleri güncellemek için kullanılır.
Conflict resolution
Aynı çeviri anahtarı birden fazla JSON kaynağında mevcutsa:
- En yüksek önceliğe sahip eklenti nihai değeri belirler
- Daha düşük öncelikli kaynaklar, eksik anahtarlar için yedek olarak kullanılır
- Bu, eski çevirileri korumanıza ve yeni yapılara kademeli olarak geçiş yapmanıza olanak tanır
CLI
Eşzamanlanmış JSON dosyaları diğer .content dosyaları gibi kabul edilecektir. Bu, tüm intlayer komutlarının eşzamanlanmış JSON dosyaları için de kullanılabilir olduğu anlamına gelir. Şunları içerir:
- Eksik çevirilerin olup olmadığını test etmek için
intlayer content test - Eşzamanlanmış JSON dosyalarını listelemek için
intlayer content list - Eksik çevirileri doldurmak için
intlayer content fill - Eşzamanlanmış JSON dosyalarını göndermek için
intlayer content push - Eşzamanlanmış JSON dosyalarını çekmek için
intlayer content pull
Daha fazla detay için Intlayer CLI sayfasına bakınız.
Sınırlamalar (mevcut)
- Üçüncü taraf kütüphaneler hedeflendiğinde ekleme veya çoğul/ICU desteği yoktur.
- Görsel editör henüz Intlayer dışı çalışma zamanları için mevcut değildir.
- Sadece JSON senkronizasyonu; JSON olmayan katalog formatları desteklenmemektedir.
Neden bu önemli
- Yerleşik i18n çözümlerini önerebilir ve Intlayer'ı bir eklenti olarak konumlandırabiliriz.
- JSON yönetimi için Intlayer öneren eğitimlerle onların SEO/anahtar kelimelerinden faydalanırız.
- Hedef kitlesini “yeni projeler”den “zaten i18n kullanan herhangi bir ekip”e genişletir.