@intlayer/docs 9.0.0-canary.7 → 9.0.0-canary.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +0 -20
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +0 -20
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +0 -1
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/dynamic_dictionaries/index.md +24 -18
  8. package/docs/ar/dynamic_dictionaries/variants.md +280 -22
  9. package/docs/ar/plugins/sync-json.md +0 -1
  10. package/docs/ar/releases/v9.md +35 -12
  11. package/docs/de/dynamic_dictionaries/index.md +22 -22
  12. package/docs/de/dynamic_dictionaries/variants.md +272 -14
  13. package/docs/de/plugins/sync-json.md +0 -1
  14. package/docs/de/releases/v9.md +35 -12
  15. package/docs/en/dynamic_dictionaries/index.md +20 -14
  16. package/docs/en/dynamic_dictionaries/variants.md +266 -8
  17. package/docs/en/plugins/sync-json.md +0 -1
  18. package/docs/en/releases/v9.md +35 -12
  19. package/docs/en-GB/dynamic_dictionaries/index.md +21 -15
  20. package/docs/en-GB/dynamic_dictionaries/variants.md +268 -10
  21. package/docs/en-GB/plugins/sync-json.md +0 -1
  22. package/docs/en-GB/releases/v9.md +35 -12
  23. package/docs/es/dynamic_dictionaries/index.md +25 -19
  24. package/docs/es/dynamic_dictionaries/variants.md +275 -17
  25. package/docs/es/plugins/sync-json.md +0 -1
  26. package/docs/es/releases/v9.md +35 -12
  27. package/docs/fr/dynamic_dictionaries/index.md +26 -20
  28. package/docs/fr/dynamic_dictionaries/variants.md +273 -15
  29. package/docs/fr/plugins/sync-json.md +0 -1
  30. package/docs/fr/releases/v9.md +35 -12
  31. package/docs/hi/dynamic_dictionaries/index.md +28 -22
  32. package/docs/hi/dynamic_dictionaries/variants.md +282 -24
  33. package/docs/hi/plugins/sync-json.md +0 -1
  34. package/docs/hi/releases/v9.md +35 -12
  35. package/docs/id/dynamic_dictionaries/index.md +25 -19
  36. package/docs/id/dynamic_dictionaries/variants.md +274 -16
  37. package/docs/id/plugins/sync-json.md +0 -1
  38. package/docs/id/releases/v9.md +35 -12
  39. package/docs/it/dynamic_dictionaries/index.md +26 -20
  40. package/docs/it/dynamic_dictionaries/variants.md +273 -15
  41. package/docs/it/plugins/sync-json.md +0 -1
  42. package/docs/it/releases/v9.md +35 -12
  43. package/docs/ja/dynamic_dictionaries/index.md +27 -21
  44. package/docs/ja/dynamic_dictionaries/variants.md +276 -18
  45. package/docs/ja/plugins/sync-json.md +0 -1
  46. package/docs/ja/releases/v9.md +35 -12
  47. package/docs/ko/dynamic_dictionaries/index.md +23 -17
  48. package/docs/ko/dynamic_dictionaries/variants.md +273 -15
  49. package/docs/ko/plugins/sync-json.md +0 -1
  50. package/docs/ko/releases/v9.md +35 -12
  51. package/docs/pl/dynamic_dictionaries/index.md +26 -20
  52. package/docs/pl/dynamic_dictionaries/variants.md +275 -17
  53. package/docs/pl/plugins/sync-json.md +0 -1
  54. package/docs/pl/releases/v9.md +35 -12
  55. package/docs/pt/dynamic_dictionaries/index.md +25 -19
  56. package/docs/pt/dynamic_dictionaries/variants.md +276 -18
  57. package/docs/pt/plugins/sync-json.md +0 -1
  58. package/docs/pt/releases/v9.md +35 -12
  59. package/docs/ru/dynamic_dictionaries/index.md +25 -19
  60. package/docs/ru/dynamic_dictionaries/variants.md +277 -19
  61. package/docs/ru/plugins/sync-json.md +0 -1
  62. package/docs/ru/releases/v9.md +35 -12
  63. package/docs/tr/dynamic_dictionaries/index.md +27 -21
  64. package/docs/tr/dynamic_dictionaries/variants.md +274 -16
  65. package/docs/tr/plugins/sync-json.md +0 -1
  66. package/docs/tr/releases/v9.md +35 -12
  67. package/docs/uk/dynamic_dictionaries/index.md +25 -19
  68. package/docs/uk/dynamic_dictionaries/variants.md +277 -19
  69. package/docs/uk/plugins/sync-json.md +0 -1
  70. package/docs/uk/releases/v9.md +35 -12
  71. package/docs/vi/dynamic_dictionaries/index.md +28 -22
  72. package/docs/vi/dynamic_dictionaries/variants.md +278 -20
  73. package/docs/vi/plugins/sync-json.md +0 -1
  74. package/docs/vi/releases/v9.md +35 -12
  75. package/docs/zh/dynamic_dictionaries/index.md +24 -18
  76. package/docs/zh/dynamic_dictionaries/variants.md +274 -16
  77. package/docs/zh/plugins/sync-json.md +0 -1
  78. package/docs/zh/releases/v9.md +35 -12
  79. package/package.json +6 -6
  80. package/src/generated/docs.entry.ts +0 -20
  81. package/docs/ar/dynamic_dictionaries/dynamic_content.md +0 -271
  82. package/docs/de/dynamic_dictionaries/dynamic_content.md +0 -271
  83. package/docs/en/dynamic_dictionaries/dynamic_content.md +0 -271
  84. package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +0 -271
  85. package/docs/es/dynamic_dictionaries/dynamic_content.md +0 -271
  86. package/docs/fr/dynamic_dictionaries/dynamic_content.md +0 -271
  87. package/docs/hi/dynamic_dictionaries/dynamic_content.md +0 -271
  88. package/docs/id/dynamic_dictionaries/dynamic_content.md +0 -271
  89. package/docs/it/dynamic_dictionaries/dynamic_content.md +0 -271
  90. package/docs/ja/dynamic_dictionaries/dynamic_content.md +0 -271
  91. package/docs/ko/dynamic_dictionaries/dynamic_content.md +0 -271
  92. package/docs/pl/dynamic_dictionaries/dynamic_content.md +0 -271
  93. package/docs/pt/dynamic_dictionaries/dynamic_content.md +0 -271
  94. package/docs/ru/dynamic_dictionaries/dynamic_content.md +0 -271
  95. package/docs/tr/dynamic_dictionaries/dynamic_content.md +0 -271
  96. package/docs/uk/dynamic_dictionaries/dynamic_content.md +0 -271
  97. package/docs/vi/dynamic_dictionaries/dynamic_content.md +0 -271
  98. package/docs/zh/dynamic_dictionaries/dynamic_content.md +0 -271
@@ -1,13 +1,15 @@
1
1
  ---
2
2
  createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
3
+ updatedAt: 2026-06-26
4
4
  title: Varyantlar
5
- description: Kod değişikliği yapmadan çalışma zamanında aralarında geçiş yapmak üzere adlandırılmış içerik alternatiflerini — A/B testleri, dönemsel afişler, özellik bayraklı (feature flag) metinler — bildirmek için Intlayer içerik dosyalarındaki variant meta veri alanını kullanın.
5
+ description: Adlandırılmış veya yapılandırılmış içerik alternatifleri — A/B testleri, sezonluk afişler, özellik bayraklı metin, CMS kayıtları, kullanıcıya özel içerik — bildirmek ve kod değişikliği olmadan çalışma zamanında aralarında geçiş yapmak için Intlayer içerik dosyalarında variant meta veri alanını kullanın.
6
6
  keywords:
7
7
  - Varyantlar
8
8
  - A/B Testi
9
9
  - Özellik Bayrakları
10
10
  - Dinamik İçerik
11
+ - Dinamik Kayıtlar
12
+ - CMS
11
13
  - Intlayer
12
14
  - Uluslararasılaştırma
13
15
  slugs:
@@ -17,17 +19,27 @@ slugs:
17
19
  history:
18
20
  - version: 9.0.0
19
21
  date: 2026-06-12
20
- changes: "Varyantlar özelliğinin sürümü"
22
+ changes: "Varyantlar özelliğinin yayımlanması"
23
+ - version: 9.1.0
24
+ date: 2026-06-26
25
+ changes: "`variant` artık bir dize veya nesne kabul ediyor — eski `meta` / dinamik kayıtlar nesne varyantı olarak bildirilir"
21
26
  author: aymericzip
22
27
  ---
23
28
 
24
29
  # Varyantlar
25
30
 
26
- Bir **varyant** (variant), aynı sözlük anahtarını (`key`) paylaşan ancak her biri farklı bir `variant` adı taşıyan içerik dosyaları kümesidir. Intlayer, `useIntlayer` fonksiyonuna geçirilen seçiciye göre uygun dosyayı sunar.
31
+ Bir **varyant**, aynı sözlük anahtarını (`key`) paylaşan ancak her biri farklı bir `variant` değeri taşıyan bir içerik dosyaları kümesidir. Intlayer, `useIntlayer`'a geçirilen seçiciye göre uygun dosyayı sunar.
27
32
 
28
- ## Varyantları bildirme
33
+ `variant` değeri **iki biçim** alabilir:
29
34
 
30
- Her dosya adlandırılmış bir alternatifi temsil eder. `variant` alanının atlanması (veya `"default"` olarak ayarlanması) onu varsayılan (fallback) varyant olarak işaretler.
35
+ - **Bir dize** tek bir adlandırılmış alternatif (A/B testleri, sezonluk afişler, özellik bayrakları).
36
+ - **Bir nesne** — bir alan kümesiyle adreslenen yapılandırılmış bir ayırt edici (CMS kayıtları, kullanıcıya özel metin, opak bir kimlikle anahtarlanan herhangi bir içerik). Kimlik nesnenin tamamıdır: seçici, girdiyi çözümlemek için **eşit** bir nesne sağlamalıdır.
37
+
38
+ > Nesne biçimi eski `meta` alanının yerini alır. Daha önce `meta: { id, … }` yazdığınız her yerde `variant: { id, … }` yazın ve onu `{ variant: { id, … } }` ile seçin.
39
+
40
+ ## Adlandırılmış (dize) varyantlar
41
+
42
+ Her dosya bir adlandırılmış alternatifi temsil eder. `variant`'ı atlamak (veya `"default"` olarak ayarlamak) onu yedek olarak işaretler.
31
43
 
32
44
  ```ts fileName="hero-banner.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
33
45
  import { t, type Dictionary } from "intlayer";
@@ -65,9 +77,9 @@ const dictionary = {
65
77
  export default dictionary;
66
78
  ```
67
79
 
68
- ## Varyantları tüketme
80
+ ### Adlandırılmış varyantları kullanma
69
81
 
70
- ### Varsayılan varyant
82
+ #### Varsayılan varyant
71
83
 
72
84
  <Tabs group="framework">
73
85
  <Tab label="React" value="react">
@@ -209,7 +221,7 @@ export default dictionary;
209
221
  </Tab>
210
222
  </Tabs>
211
223
 
212
- ### Adlandırılmış varyant
224
+ #### Adlandırılmış varyant
213
225
 
214
226
  ```tsx
215
227
  const { headline, cta } = useIntlayer("hero-banner", {
@@ -217,18 +229,264 @@ const { headline, cta } = useIntlayer("hero-banner", {
217
229
  });
218
230
  ```
219
231
 
220
- ### Belirli dil seçeneği ile adlandırılmış varyant
232
+ #### Açık locale ile adlandırılmış varyant
221
233
 
222
234
  ```tsx
223
235
  const content = useIntlayer("hero-banner", {
224
236
  variant: "black_friday",
225
- locale: "tr",
237
+ locale: "fr",
226
238
  });
227
239
  ```
228
240
 
229
- ## Tipik kullanım senaryoları
241
+ ## Nesne (yapılandırılmış) varyantlar
242
+
243
+ Bir nesne varyantı, `variant` alanında bildirilen rastgele bir anahtar-değer çiftleri kümesiyle içeriği adresler — bu da CMS kayıtlarını, kullanıcıya özel metni veya anahtarı opak bir kimlik olan herhangi bir içeriği modellemeyi mümkün kılar. Kimlik **nesnenin tamamıdır**: girdinin çözümlenmesi için seçici eşit bir nesne sağlamalıdır.
244
+
245
+ ```ts fileName="product.abc.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
246
+ import { t, type Dictionary } from "intlayer";
247
+
248
+ const dictionary = {
249
+ key: "product",
250
+ variant: { id: "prod_abc", userId: "user_123" },
251
+ content: {
252
+ name: t({ en: "Widget Pro", fr: "Widget Pro" }),
253
+ description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
254
+ },
255
+ } satisfies Dictionary;
256
+
257
+ export default dictionary;
258
+ ```
259
+
260
+ ```ts fileName="product.abcd.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
261
+ import { t, type Dictionary } from "intlayer";
262
+
263
+ const dictionary = {
264
+ key: "product",
265
+ variant: { id: "prod_abcd", userId: "user_123" },
266
+ content: {
267
+ name: t({ en: "Widget Lite", fr: "Widget Lite" }),
268
+ description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
269
+ },
270
+ } satisfies Dictionary;
271
+
272
+ export default dictionary;
273
+ ```
274
+
275
+ ### Nesne varyantlarını kullanma
276
+
277
+ Eşleşen nesneyi `variant`'a geçirin. Sözlükte bildirilen her alan sağlanmalı ve eşit olmalıdır; aksi takdirde sonuç `null` olur. Alanların sırası önemli değildir.
278
+
279
+ <Tabs group="framework">
280
+ <Tab label="React" value="react">
281
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
282
+ import { useIntlayer } from "react-intlayer";
283
+
284
+ export const Product = ({
285
+ productId,
286
+ userId,
287
+ }: {
288
+ productId: string;
289
+ userId: string;
290
+ }) => {
291
+ const content = useIntlayer("product", {
292
+ variant: { id: productId, userId },
293
+ });
294
+
295
+ if (!content) return null;
296
+
297
+ return <p>{content.description}</p>;
298
+ };
299
+ ```
300
+
301
+ </Tab>
302
+ <Tab label="Next.js" value="nextjs">
303
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
304
+ import { useIntlayer } from "next-intlayer";
305
+
306
+ export const Product = ({
307
+ productId,
308
+ userId,
309
+ }: {
310
+ productId: string;
311
+ userId: string;
312
+ }) => {
313
+ const content = useIntlayer("product", {
314
+ variant: { id: productId, userId },
315
+ });
316
+
317
+ if (!content) return null;
318
+
319
+ return <p>{content.description}</p>;
320
+ };
321
+ ```
322
+
323
+ </Tab>
324
+ <Tab label="Vue" value="vue">
325
+ ```vue fileName="Product.vue" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
326
+ <script setup>
327
+ import { useIntlayer } from "vue-intlayer";
328
+
329
+ const props = defineProps({
330
+ productId: String,
331
+ userId: String,
332
+ });
333
+
334
+ const content = useIntlayer("product", {
335
+ variant: { id: props.productId, userId: props.userId },
336
+ });
337
+ </script>
338
+
339
+ <template>
340
+ <p v-if="content">{{ content.description }}</p>
341
+ </template>
342
+ ```
343
+
344
+ </Tab>
345
+ <Tab label="Svelte" value="svelte">
346
+ ```svelte fileName="Product.svelte" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
347
+ <script lang="ts">
348
+ import { useIntlayer } from "svelte-intlayer";
349
+
350
+ export let productId: string;
351
+ export let userId: string;
352
+
353
+ const content = useIntlayer("product", {
354
+ variant: { id: productId, userId },
355
+ });
356
+ </script>
357
+
358
+ {#if $content}
359
+ <p>{$content.description}</p>
360
+ {/if}
361
+ ```
362
+
363
+ </Tab>
364
+ <Tab label="Preact" value="preact">
365
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
366
+ import { useIntlayer } from "preact-intlayer";
367
+
368
+ export const Product = ({
369
+ productId,
370
+ userId,
371
+ }: {
372
+ productId: string;
373
+ userId: string;
374
+ }) => {
375
+ const content = useIntlayer("product", {
376
+ variant: { id: productId, userId },
377
+ });
378
+
379
+ if (!content) return null;
380
+
381
+ return <p>{content.description}</p>;
382
+ };
383
+ ```
384
+
385
+ </Tab>
386
+ <Tab label="Solid" value="solid">
387
+ ```tsx fileName="Product.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
388
+ import { useIntlayer } from "solid-intlayer";
389
+
390
+ export const Product = (props: {
391
+ productId: string;
392
+ userId: string;
393
+ }) => {
394
+ const content = useIntlayer("product", {
395
+ variant: { id: props.productId, userId: props.userId },
396
+ });
397
+
398
+ return (
399
+ <>
400
+ {content() && <p>{content().description}</p>}
401
+ </>
402
+ );
403
+ };
404
+ ```
405
+
406
+ </Tab>
407
+ <Tab label="Angular" value="angular">
408
+ ```typescript fileName="product.component.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
409
+ import { Component, Input, OnInit } from "@angular/core";
410
+ import { useIntlayer } from "angular-intlayer";
411
+
412
+ @Component({
413
+ selector: "app-product",
414
+ template: `
415
+ @if (content()) {
416
+ <p>{{ content().description }}</p>
417
+ }
418
+ `,
419
+ })
420
+ export class ProductComponent implements OnInit {
421
+ @Input() productId!: string;
422
+ @Input() userId!: string;
423
+
424
+ content: any;
425
+
426
+ ngOnInit() {
427
+ this.content = useIntlayer("product", {
428
+ variant: { id: this.productId, userId: this.userId },
429
+ });
430
+ }
431
+ }
432
+ ```
433
+
434
+ </Tab>
435
+ <Tab label="Vanilla JS" value="vanilla">
436
+ ```javascript fileName="product.js"
437
+ import { useIntlayer } from "vanilla-intlayer";
438
+
439
+ const content = useIntlayer("product", {
440
+ variant: { id: "prod_abcd", userId: "user_123" },
441
+ });
442
+
443
+ if (content) {
444
+ document.body.innerHTML = `<p>${content.description}</p>`;
445
+ }
446
+ ```
447
+
448
+ </Tab>
449
+ </Tabs>
450
+
451
+ #### Açık locale ile
452
+
453
+ ```tsx
454
+ const content = useIntlayer("product", {
455
+ variant: { id: "prod_abc", userId: "user_123" },
456
+ locale: "fr",
457
+ });
458
+ ```
459
+
460
+ #### Eksik alan — eşleşme yok
461
+
462
+ ```ts
463
+ // null döndürür: `userId` eksik, bu nedenle nesne bildirilen varyantla eşleşmiyor
464
+ const content = useIntlayer("product", { variant: { id: "prod_abc" } });
465
+ ```
466
+
467
+ ## Yükleme modu
468
+
469
+ Nesne varyantları genellikle tembel olarak yüklenir. Bunu kontrol etmek için sözlükte `importMode`'u ayarlayın:
470
+
471
+ ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
472
+ const dictionary = {
473
+ key: "product",
474
+ importMode: "fetch", // or "dynamic"
475
+ variant: { id: "prod_abc", userId: "user_123" },
476
+ content: { … },
477
+ } satisfies Dictionary;
478
+
479
+ export default dictionary;
480
+ ```
481
+
482
+ `static`, `dynamic` ve `fetch` modlarıyla ilgili ayrıntılar için [paket optimizasyonu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/bundle_optimization.md) bölümüne bakın.
483
+
484
+ ## Tipik kullanım örnekleri
230
485
 
231
- - Bir deney anahtarı (experiment key) tarafından yönlendirilen A/B metin testleri
232
- - Dönemsel veya tanıtım afişleri
233
- - Özellik bayraklı (feature flag) mesajlaşma
234
- - Bölgeye özel pazarlama kampanyaları
486
+ - Bir deney anahtarıyla yönlendirilen A/B metin testleri
487
+ - Sezonluk veya promosyon afişleri
488
+ - Özellik bayraklı mesajlaşma
489
+ - Locale'e özgü pazarlama kampanyaları
490
+ - CMS'te yönetilen ürün başına pazarlama metni
491
+ - Kullanıcıya veya hesaba özel içerik
492
+ - Çalışma zamanında opak bir kimlikle anahtarlanan herhangi bir içerik
@@ -108,7 +108,6 @@ const config: IntlayerConfig = {
108
108
  * Çıktıyı ve çevirileri locales dizinindeki JSON dosyalarına yükleyecek ve yazacaktır
109
109
  */
110
110
  syncJSON({
111
- format: "i18next",
112
111
  source: ({ key, locale }) => `./locales/${locale}/${key}.json`,
113
112
  priority: 0,
114
113
  format: "i18next",
@@ -1,15 +1,14 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-25
3
+ updatedAt: 2026-06-26
4
4
  title: Yeni Intlayer v9 - Yenilikler Neler?
5
- description: Intlayer v9'daki yenilikleri keşfedin. Popüler i18n kütüphaneleri için doğrudan uyumlu paketler ve Koleksiyonlar, Varyantlar ve Dinamik Kayıtlar desteği sunuluyor.
5
+ description: Intlayer v9'daki yenilikleri keşfedin. Popüler i18n kütüphaneleri için doğrudan uyumlu paketler ve Koleksiyonlar ve Varyantlar desteği sunuluyor.
6
6
  keywords:
7
7
  - Intlayer
8
8
  - Compatibility
9
9
  - Migration
10
10
  - Collections
11
11
  - Variants
12
- - Dynamic Records
13
12
  - i18next
14
13
  - next-intl
15
14
  - vue-i18n
@@ -22,7 +21,7 @@ author: aymericzip
22
21
 
23
22
  # Yeni Intlayer v9 - Yenilikler Neler?
24
23
 
25
- Intlayer v9'a hoş geldiniz! Bu ana sürüm, büyük i18n kütüphaneleri (`react-i18next`, `next-intl`, `vue-i18n` vb.) için sunulan **Compat Adapter Paketleri** ile Intlayer'a geçiş sürecini basitleştirmede dev bir adımı temsil ediyor ve zengin içerik yapıları için destek ekliyor: **Koleksiyonlar (Collections)**, **Varyantlar (Variants)** ve **Dinamik Kayıtlar (Dynamic Records)**.
24
+ Intlayer v9'a hoş geldiniz! Bu ana sürüm, büyük i18n kütüphaneleri (`react-i18next`, `next-intl`, `vue-i18n` vb.) için sunulan **Compat Adapter Paketleri** ile Intlayer'a geçiş sürecini basitleştirmede dev bir adımı temsil ediyor ve zengin içerik yapıları için destek ekliyor: **Koleksiyonlar (Collections)** ve **Varyantlar (Variants)**.
26
25
 
27
26
  ## İçindekiler
28
27
 
@@ -41,8 +40,10 @@ Popüler i18n kütüphanelerinden Intlayer'a geçiş yapmak artık her zamankind
41
40
  - `@intlayer/i18next`
42
41
  - `@intlayer/react-i18next`
43
42
  - `@intlayer/next-intl`
43
+ - `@intlayer/react-intl`
44
44
  - `@intlayer/next-i18next`
45
45
  - `@intlayer/vue-i18n`
46
+ - `@intlayer/lingui`
46
47
 
47
48
  Örneğin, sadece şunu değiştirin:
48
49
 
@@ -100,7 +101,7 @@ Tüm compat adapter'lar artık çeviri çözümlemesini tek ve son derece optimi
100
101
 
101
102
  ---
102
103
 
103
- ## Özellik Detayları: Koleksiyonlar, Varyantlar ve Dinamik Kayıtlar
104
+ ## Özellik Detayları: Koleksiyonlar ve Varyantlar
104
105
 
105
106
  Intlayer v9, statik anahtar-değer nesnelerinin ötesine geçerek sözlüklerin uçtan uca tam tiplendirilmiş dinamik düzen yapıları tanımlamasına olanak tanır.
106
107
 
@@ -144,6 +145,8 @@ const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: s
144
145
 
145
146
  A/B testleri, mevsimsel başlıklar, özellik bayrakları (feature flags) veya özel açılış sayfaları sunun:
146
147
 
148
+ #### Dize varyantları (örneğin, A/B testleri)
149
+
147
150
  ```ts fileName="hero.content.ts"
148
151
  import { t, type Dictionary } from "intlayer";
149
152
 
@@ -167,16 +170,14 @@ export default {
167
170
  const banner = useIntlayer("hero-banner", { variant: "black_friday" });
168
171
  ```
169
172
 
170
- ### 3. Dinamik Kayıtlar (Dynamic Records)
171
-
172
- Girdileri çalışma zamanında sorgu kimlikleri (query IDs) aracılığıyla dinamik olarak yüklenen sözlükler tanımlayın:
173
+ #### Nesne varyantları (örneğin, Dinamik Kayıtlar)
173
174
 
174
175
  ```ts fileName="product.content.ts"
175
176
  import { t, type Dictionary } from "intlayer";
176
177
 
177
178
  export default {
178
179
  key: "product-copy",
179
- meta: {
180
+ variant: {
180
181
  id: "prod_123",
181
182
  category: "books",
182
183
  },
@@ -229,7 +230,7 @@ export default defineConfig({
229
230
  });
230
231
  ```
231
232
 
232
- - **Compiler**: `compiler.enabled` ayarlandığında ve `compiler.output` yolu yapılandırıldığında otomatik olarak etkinleştirilir. Artık `intlayerCompiler()`'ı ayrı olarak kaydetmeniz gerekmez.
233
+ - **Compiler**: `compiler.enabled` `true` olarak ayarlandığında ve `compiler.output` yolu yapılandırıldığında otomatik olarak etkinleştirilir. Artık `intlayerCompiler()`'ı ayrı olarak kaydetmeniz gerekmez.
233
234
  - **Proxy**: Yeni `routing.enableProxy` seçeneğine göre otomatik olarak etkinleştirilir (varsayılan olarak `true`). Geliştirme, önizleme ve üretim SSR'de locale algılama / yönlendirme / yeniden yazma middleware'ini bağlar. Artık `intlayerProxy()`'ı ayrı olarak kaydetmeniz gerekmez.
234
235
 
235
236
  ### `routing.enableProxy` seçeneği
@@ -252,6 +253,27 @@ Bağımsız `intlayerCompiler()` ve `intlayerProxy()` eklentileri gelişmiş kur
252
253
 
253
254
  ---
254
255
 
256
+ ## Derleyici varsayılan olarak devre dışı
257
+
258
+ Intlayer v9'dan itibaren, **derleyici varsayılan olarak devre dışıdır** (`compiler.enabled` artık varsayılan olarak `false`'tur). `.content.ts` dosyalarınızın derleme zamanı çıkarımını etkinleştirmek için yapılandırmanızda `compiler.enabled: true` olarak ayarlayın:
259
+
260
+ ```ts fileName="intlayer.config.ts"
261
+ import type { IntlayerConfig } from "intlayer";
262
+
263
+ const config: IntlayerConfig = {
264
+ compiler: {
265
+ enabled: true, // Varsayılan: false — v9'dan itibaren derleyiciyi etkinleştirmek için gereklidir
266
+ output: ({ fileName }) => `./${fileName}.content.ts`,
267
+ },
268
+ };
269
+
270
+ export default config;
271
+ ```
272
+
273
+ Derleyici devre dışı bırakıldığında, Intlayer derleme zamanı çıkarım adımını atlar ve önceden bildirdiğiniz sözlüklere dayanır. Yalnızca bundler eklentisinin (`@intlayer/swc`, `@intlayer/babel` veya `intlayer()` Vite eklentisi) içeriği otomatik olarak çıkarmasını istediğinizde etkinleştirin.
274
+
275
+ ---
276
+
255
277
  ## React Native: tek paket içe aktarmaları
256
278
 
257
279
  Bir React Native veya Expo uygulamasında, artık `react-intlayer` ve `react-native-intlayer` arasında gidip gelmenize gerek yok. `react-native-intlayer` paketi artık **tüm `react-intlayer` API'sini yeniden dışa aktarıyor** (hook'lar, yardımcı programlar ve `/format`, `/html` ve `/markdown` alt yolları) ve `IntlayerProvider`'ı React Native polyfill'lerini otomatik olarak uyguluyor.
@@ -278,13 +300,14 @@ npm install intlayer react-native-intlayer
278
300
 
279
301
  v8'den yükseltme yapıyorsanız, v9'un yıkıcı değişiklikler (breaking changes) içermediğini unutmayın. Ancak işte temel değişiklikler:
280
302
 
303
+ - **Derleyici varsayılan olarak devre dışı**: `compiler.enabled` artık varsayılan olarak `false`'tur. `.content.ts` dosyalarınızın derleme zamanı çıkarımına güveniyorsanız, `intlayer.config.ts` dosyanızda `compiler.enabled: true` olarak ayarlayın.
281
304
  - **Diller ve Lehçeler (Locales & Dialects)**: Harici i18n bağımlılıkları kullanıyorsanız, içe aktarmaları otomatik olarak yeniden yazmak için yapılandırmanıza veya bundler kurulumunuza ilgili compat adapter eklentilerini ekleyin.
282
- - **Özel Seçiciler (Custom Selectors)**: `useIntlayer` çağrılırken, ikinci parametre artık `{ locale, item, variant, id }` içeren bir seçenek nesnesine ayrılmıştır. Daha önce doğrudan bir dil (locale) dizesi geçirdiyseniz bunu yapmaya devam edebilirsiniz, ancak gelişmiş seçimler için seçenekler nesnesini kullanmanız önerilir.
305
+ - **Özel Seçiciler (Custom Selectors)**: `useIntlayer` çağrılırken, ikinci parametre artık `{ locale, item, variant }` içeren bir seçenek nesnesine ayrılmıştır. Daha önce doğrudan bir dil (locale) dizesi geçirdiyseniz bunu yapmaya devam edebilirsiniz, ancak gelişmiş seçimler için seçenekler nesnesini kullanmanız önerilir.
283
306
 
284
307
  ---
285
308
 
286
309
  ## Faydalı bağlantılar
287
310
 
288
311
  - [Compat Adapter Paketleri Kılavuzu](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/compat/index.md)
289
- - [Dinamik Sözlükler - Koleksiyonlar, Varyantlar ve Dinamik Kayıtlar](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dynamic_dictionaries/index.md)
312
+ - [Dinamik Sözlükler - Koleksiyonlar ve Varyantlar](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/dynamic_dictionaries/index.md)
290
313
  - [Yapılandırma Referansı](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md)
@@ -1,13 +1,12 @@
1
1
  ---
2
2
  createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: Динамічні Словники
5
- description: Огляд трьох функцій динамічних словників Intlayer — колекцій, варіантів та динамічних записів — для створення гнучкого вмісту i18n, керованого під час виконання.
3
+ updatedAt: 2026-06-26
4
+ title: Динамічні словники
5
+ description: Огляд можливостей динамічних словників Intlayer — колекцій і варіантів — для створення гнучкого i18n-контенту, керованого під час виконання.
6
6
  keywords:
7
- - Динамічні Словники
7
+ - Динамічні словники
8
8
  - Колекції
9
9
  - Варіанти
10
- - Динамічні Записи
11
10
  - Intlayer
12
11
  - Інтернаціоналізація
13
12
  slugs:
@@ -18,31 +17,38 @@ history:
18
17
  - version: 9.0.0
19
18
  date: 2026-06-12
20
19
  changes: "Випуск функції динамічних словників"
20
+ - version: 9.1.0
21
+ date: 2026-06-26
22
+ changes: "Динамічні записи об'єднано з варіантами — `variant` тепер приймає рядок або об'єкт"
21
23
  author: aymericzip
22
24
  ---
23
25
 
24
- # Динамічні Словники
26
+ # Динамічні словники
25
27
 
26
- Intlayer підтримує три механізми для представлення вмісту, що виходить за межі одного статичного словника на ключ. Кожен з них оголошується через **поле метаданих верхнього рівня** у файлі вмісту; жодна функція-обгортка (wrapper) не потрібна.
28
+ Intlayer підтримує два механізми для вираження контенту, що виходить за межі єдиного статичного словника на ключ. Кожен оголошується через **поле метаданих верхнього рівня** у файлі контенту; функція-обгортка не потрібна.
27
29
 
28
- | Функція | Поле метаданих | Селектор в `useIntlayer` |
29
- | ------------------------------------------------------------------------------------------------------------------------- | ----------------- | ------------------------ |
30
- | [Колекції](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/collections.md) | `item: N` | `{ item: N }` |
31
- | [Варіанти](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/variants.md) | `variant: "name"` | `{ variant: "name" }` |
32
- | [Динамічні Записи](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/dynamic_content.md) | `meta: { id, … }` | `{ id, … }` |
30
+ | Можливість | Поле метаданих | Селектор у `useIntlayer` |
31
+ | ------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ------------------------------------------------ |
32
+ | [Колекції](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/collections.md) | `item: N` | `{ item: N }` |
33
+ | [Варіанти](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/variants.md) | `variant: "name"` _або_ `variant: { … }` | `{ variant: "name" }` _або_ `{ variant: { … } }` |
33
34
 
34
- Усі три механізми поєднуються з аргументом локалі та підтримують вибіркове / ледаче завантаження (lazy loading) за допомогою `importMode`.
35
+ Обидва поєднуються з аргументом locale і підтримують вибіркове / відкладене завантаження через `importMode`.
35
36
 
36
37
  ## Коли що використовувати
37
38
 
38
- - **Колекції** — упорядкований список елементів, керованих в окремих файлах (елементи FAQ, повідомлення в блогах, продукти).
39
- - **Варіанти** — іменовані альтернативи вмісту для A/B-тестів, сезонних банерів або прапорців функцій (feature flags).
40
- - **Динамічні записи** вміст, що отримується під час виконання за непрозорим ідентифікатором ID (записи CMS, вміст конкретного користувача).
39
+ - **Колекції** — упорядкований список елементів, керованих в окремих файлах (записи FAQ, пости блогу, товари).
40
+ - **Варіанти** — іменовані або структуровані альтернативи контенту:
41
+ - **рядковий** варіант для A/B-тестів, сезонних банерів або feature-прапорців;
42
+ - **об'єктний** варіант для записів CMS, контенту конкретного користувача або будь-якого контенту, адресованого набором полів (колишні «динамічні записи»).
41
43
 
42
- ## Вирішення конфліктів селекторів
44
+ > У попередніх версіях для контенту за записами було окреме поле `meta`. Його об'єднано з `variant`: передавайте `variant` **об'єкт** замість використання `meta`.
43
45
 
44
- Коли у словнику є кілька селекторів, порядок вирішення наступний:
46
+ ## Усунення неоднозначності селектора
47
+
48
+ Ключ може оголошувати обидва виміри одночасно (наприклад, колекція, кожен елемент якої має варіант). Вони розв'язуються в порядку:
45
49
 
46
50
  ```
47
- variant → meta → item
51
+ variant → item
48
52
  ```
53
+
54
+ Отже, `{ variant: "promo" }` для ключа variant × item повертає всі promo-елементи як масив, а додавання `{ item: 2 }` звужує результат до одного запису.