@intlayer/docs 9.1.0 → 9.1.1

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.
@@ -22,7 +22,10 @@ history:
22
22
  changes: "إصدار ميزة المتغيرات"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "أصبح `variant` يقبل سلسلة نصية أو كائنًا — تُعلَن `meta` / السجلات الديناميكية السابقة كمتغيرات كائنية"
25
+ changes: "تقبل `variant` الآن سلسلة أو كائنًا — تُعلن السجلات الديناميكية أو `meta` السابقة كمتغيرات كائنات"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "تُعرّف المتغيرة فقط المفاتيح التي تتجاوزها؛ بينما تتراجع المتغيرات غير المُعرّفة إلى الإدخال الافتراضي"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -37,9 +40,40 @@ author: aymericzip
37
40
 
38
41
  > يحلّ الشكل الكائني محل حقل `meta` السابق. في كل مكان كنت تكتب فيه سابقًا `meta: { id, … }`، اكتب `variant: { id, … }`، وحدّدها بـ `{ variant: { id, … } }`.
39
42
 
40
- ## المتغيرات المُسمّاة (النصية)
43
+ ### المتغيرات الجزئية
41
44
 
42
- يمثّل كل ملف بديلًا مُسمّى واحدًا. حذف `variant` (أو ضبطه على `"default"`) يجعله البديل الاحتياطي.
45
+ تُعرّف المتغيرة **فقط المفاتيح التي تتجاوزها**؛ ويتم وراثة الباقي من الإدخال الافتراضي.
46
+
47
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
48
+ import { t, type Dictionary } from "intlayer";
49
+
50
+ const dictionary = {
51
+ key: "hero-banner",
52
+ variant: "summer",
53
+ content: {
54
+ headline: t({
55
+ en: "Build faster all summer",
56
+ fr: "Développez plus vite tout l'été",
57
+ }),
58
+ },
59
+ } satisfies Dictionary;
60
+
61
+ export default dictionary;
62
+ ```
63
+
64
+ ```tsx
65
+ useIntlayer("hero-banner", { variant: "summer" });
66
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — تم وراثة `cta`
67
+
68
+ useIntlayer("hero-banner", { variant: "never-declared" });
69
+ // → الإدخال الافتراضي
70
+ ```
71
+
72
+ لذلك لا تضيف ملف متغيرة إلا عندما تختلف الصياغة بالفعل. يتحول المفتاح إلى `null` فقط عندما يُعرّف متغيرات ولكن دون إدخال افتراضي.
73
+
74
+ ### استخدام المتغيرات المسماة
75
+
76
+ #### المتغير الافتراضي
43
77
 
44
78
  ```ts fileName="hero-banner.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
45
79
  import { t, type Dictionary } from "intlayer";
@@ -77,10 +111,6 @@ const dictionary = {
77
111
  export default dictionary;
78
112
  ```
79
113
 
80
- ### استهلاك المتغيرات المُسمّاة
81
-
82
- #### المتغير الافتراضي
83
-
84
114
  <Tabs group="framework">
85
115
  <Tab label="React" value="react">
86
116
  ```tsx fileName="Hero.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` akzeptiert jetzt einen String oder ein Objekt — die früheren `meta` / dynamischen Datensätze werden als Objekt-Varianten deklariert"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Eine Variante deklariert nur die Schlüssel, die sie überschreibt; nicht deklarierte Varianten fallen auf den Standardeintrag zurück"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Teilvarianten
84
+
85
+ Eine Variante deklariert **nur die Schlüssel, die sie überschreibt**; der Rest wird vom Standardeintrag geerbt.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` geerbt
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → der Standardeintrag
110
+ ```
111
+
112
+ Fügen Sie also nur dort eine Varianten-Datei hinzu, wo der Wortlaut tatsächlich abweicht. Ein Schlüssel wird nur dann in `null` aufgelöst, wenn er Varianten deklariert, aber keinen Standardeintrag.
113
+
80
114
  ### Benannte Varianten verwenden
81
115
 
82
116
  #### Standardvariante
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-06-12
3
- updatedAt: 2026-06-26
3
+ updatedAt: 2026-07-31
4
4
  title: Variants
5
5
  description: Use the variant metadata field in Intlayer content files to declare named or structured content alternatives — A/B tests, seasonal banners, feature-flagged copy, CMS records, user-specific content — and switch between them at runtime without code changes.
6
6
  keywords:
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` now accepts a string or an object — the former `meta` / dynamic records are declared as object variants"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "A variant declares only the keys it overrides; undeclared variants fall back to the default entry"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Partial variants
84
+
85
+ A variant declares **only the keys it overrides**; the rest are inherited from the default entry.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Build faster all summer", cta: "Get started" } — `cta` inherited
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → the default entry
110
+ ```
111
+
112
+ So you only add a variant file where the wording actually differs. A key resolves to `null` only when it declares variants but no default entry.
113
+
80
114
  ### Consuming named variants
81
115
 
82
116
  #### Default variant
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` now accepts a string or an object — the former `meta` / dynamic records are declared as object variants"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "A variant declares only the keys it overrides; undeclared variants fall back to the default entry"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Partial variants
84
+
85
+ A variant declares **only the keys it overrides**; the rest are inherited from the default entry.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Build faster all summer", cta: "Get started" } — `cta` inherited
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → the default entry
110
+ ```
111
+
112
+ So you only add a variant file where the wording actually differs. A key resolves to `null` only when it declares variants but no default entry.
113
+
80
114
  ### Consuming named variants
81
115
 
82
116
  #### Default variant
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` ahora acepta una cadena o un objeto — los antiguos `meta` / registros dinámicos se declaran como variantes de objeto"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Una variante declara solo las claves que anula; las variantes no declaradas recurren a la entrada por defecto"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Variantes parciales
84
+
85
+ Una variante declara **solo las claves que anula**; el resto se hereda de la entrada por defecto.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` heredado
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → la entrada por defecto
110
+ ```
111
+
112
+ Por lo tanto, solo debe agregar un archivo de variante donde la redacción realmente difiera. Una clave se resuelve en `null` solo cuando declara variantes pero ninguna entrada por defecto.
113
+
80
114
  ### Consumir variantes con nombre
81
115
 
82
116
  #### Variante por defecto
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` accepte désormais une chaîne ou un objet — les anciens `meta` / enregistrements dynamiques se déclarent comme variantes objet"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Une variante déclare uniquement les clés qu'elle remplace ; les variantes non déclarées se rabattent sur l'entrée par défaut"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Variantes partielles
84
+
85
+ Une variante déclare **uniquement les clés qu'elle remplace** ; le reste est hérité de l'entrée par défaut.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` hérité
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → l'entrée par défaut
110
+ ```
111
+
112
+ Ainsi, vous n'ajoutez un fichier de variante que là où la formulation diffère réellement. Une clé se résout en `null` uniquement lorsqu'elle déclare des variantes mais aucune entrée par défaut.
113
+
80
114
  ### Consommer des variantes nommées
81
115
 
82
116
  #### Variante par défaut
@@ -22,7 +22,10 @@ history:
22
22
  changes: "वैरिएंट सुविधा का रिलीज़"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "अब `variant` एक स्ट्रिंग या ऑब्जेक्ट स्वीकार करता है — पूर्व `meta` / डायनेमिक रिकॉर्ड ऑब्जेक्ट वैरिएंट के रूप में घोषित किए जाते हैं"
25
+ changes: "`variant` अब एक स्ट्रिंग या ऑब्जेक्ट स्वीकार करता है — पूर्व `meta` / गतिशील रिकॉर्ड को ऑब्जेक्ट वेरिएंट के रूप में घोषित किया जाता है"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "वेरिएंट केवल उन्हीं कुंजियों को घोषित करता है जिन्हें वह ओवरराइड करता है; अघोषित वेरिएंट डिफ़ॉल्ट प्रविष्टि पर वापस आ जाते हैं"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,7 +80,38 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
80
- ### नामित वैरिएंट का उपयोग
83
+ ### आंशिक वेरिएंट
84
+
85
+ एक वेरिएंट **केवल उन्हीं कुंजियों को घोषित करता है जिन्हें वह ओवरराइड करता है**; बाकी डिफ़ॉल्ट प्रविष्टि से विरासत में मिलती हैं।
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` विरासत में मिला
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → डिफ़ॉल्ट प्रविष्टि
110
+ ```
111
+
112
+ इसलिए आप केवल वहीं वेरिएंट फ़ाइल जोड़ते हैं जहां शब्द वास्तव में भिन्न होते हैं। एक कुंजी केवल तभी `null` पर हल होती है जब वह वेरिएंट घोषित करती है लेकिन कोई डिफ़ॉल्ट प्रविष्टि नहीं होती है।
113
+
114
+ ### नामित वेरिएंट का उपयोग करना
81
115
 
82
116
  #### डिफ़ॉल्ट वैरिएंट
83
117
 
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` kini menerima string atau objek — `meta` / record dinamis sebelumnya dideklarasikan sebagai varian objek"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Varian hanya mendeklarasikan kunci yang ditimpanya; varian yang tidak dideklarasikan akan kembali ke entri default"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Varian parsial
84
+
85
+ Varian **hanya mendeklarasikan kunci yang ditimpanya**; sisanya diwarisi dari entri default.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` diwarisi
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → entri default
110
+ ```
111
+
112
+ Jadi Anda hanya menambahkan file varian di mana kata-katanya benar-benar berbeda. Sebuah kunci hanya menjadi `null` jika mendeklarasikan varian tetapi tidak ada entri default.
113
+
80
114
  ### Mengonsumsi varian bernama
81
115
 
82
116
  #### Varian default
@@ -22,7 +22,10 @@ history:
22
22
  changes: "Rilascio della funzionalità delle varianti"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` ora accetta una stringa o un oggetto — i precedenti `meta` / record dinamici si dichiarano come varianti oggetto"
25
+ changes: "`variant` ora accetta una stringa o un oggetto — i precedenti `meta` / record dinamici vengono dichiarati come varianti oggetto"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Una variante dichiara solo le chiavi che sovrascrive; le varianti non dichiarate ricadono sulla voce predefinita"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Varianti parziali
84
+
85
+ Una variante dichiara **solo le chiavi che sovrascrive**; il resto viene ereditato dalla voce predefinita.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` ereditato
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → la voce predefinita
110
+ ```
111
+
112
+ Quindi aggiungi un file variante solo dove la formulazione differisce effettivamente. Una chiave si risolve in `null` solo quando dichiara varianti ma nessuna voce predefinita.
113
+
80
114
  ### Consumare varianti con nome
81
115
 
82
116
  #### Variante predefinita
@@ -22,7 +22,10 @@ history:
22
22
  changes: "バリアント機能のリリース"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` が文字列またはオブジェクトを受け取るようになりました `meta` / 動的レコードはオブジェクトバリアントとして宣言します"
25
+ changes: "`variant`は文字列またはオブジェクトを受け付けるようになりました以前の `meta` / 動的レコードはオブジェクトバリアントとして宣言されます"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "バリアントは上書きするキーのみを宣言します。宣言されていないバリアントはデフォルトのエントリにフォールバックします"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### 部分的なバリアント
84
+
85
+ バリアントは**上書きするキーのみを宣言します**。残りはデフォルトのエントリから継承されます。
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` は継承されます
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → デフォルトのエントリ
110
+ ```
111
+
112
+ したがって、実際にテキストが異なる場所にのみバリアントファイルを追加します。バリアントを宣言しているがデフォルトのエントリがない場合にのみ、キーは `null` に解決されます。
113
+
80
114
  ### 名前付きバリアントの利用
81
115
 
82
116
  #### デフォルトバリアント
@@ -22,7 +22,10 @@ history:
22
22
  changes: "변형 기능 출시"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "이제 `variant`는 문자열 또는 객체를 허용합니다 — 이전의 `meta` / 동적 레코드는 객체 변형으로 선언됩니다"
25
+ changes: "`variant`는 이제 문자열 또는 객체를 허용합니다 — 이전의 `meta` / 동적 레코드는 객체 변형으로 선언됩니다"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "변형은 재정의하는 키만 선언합니다. 선언되지 않은 변형은 기본 항목으로 대체됩니다"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### 부분 변형
84
+
85
+ 변형은 **재정의하는 키만 선언합니다**. 나머지는 기본 항목에서 상속됩니다.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta`가 상속됨
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → 기본 항목
110
+ ```
111
+
112
+ 따라서 텍스트가 실제로 다른 곳에만 변형 파일을 추가하면 됩니다. 변형을 선언했지만 기본 항목이 없는 경우에만 키가 `null`로 확인됩니다.
113
+
80
114
  ### 이름 지정 변형 사용
81
115
 
82
116
  #### 기본 변형
@@ -22,7 +22,10 @@ history:
22
22
  changes: "Wydanie funkcji wariantów"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` przyjmuje teraz ciąg znaków lub obiekt — dawne `meta` / rekordy dynamiczne deklaruje się jako warianty obiektowe"
25
+ changes: "`variant` akceptuje teraz ciąg znaków lub obiekt — dawne rekordy `meta` / dynamiczne deklarowane jako warianty obiektowe"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Wariant deklaruje tylko klucze, które nadpisuje; niezadeklarowane warianty powracają do domyślnego wpisu"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Warianty częściowe
84
+
85
+ Wariant deklaruje **tylko klucze, które nadpisuje**; reszta jest dziedziczona z wpisu domyślnego.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` odziedziczone
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → wpis domyślny
110
+ ```
111
+
112
+ Dlatego dodajesz plik wariantu tylko tam, gdzie brzmienie faktycznie się różni. Klucz jest rozwiązywany na `null` tylko wtedy, gdy deklaruje warianty, ale nie ma domyślnego wpisu.
113
+
80
114
  ### Korzystanie z wariantów nazwanych
81
115
 
82
116
  #### Wariant domyślny
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` agora aceita uma string ou um objeto — os antigos `meta` / registros dinâmicos são declarados como variantes de objeto"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Uma variante declara apenas as chaves que sobrescreve; as variantes não declaradas retornam para a entrada padrão"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Variantes parciais
84
+
85
+ Uma variante declara **apenas as chaves que sobrescreve**; o restante é herdado da entrada padrão.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` herdado
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → a entrada padrão
110
+ ```
111
+
112
+ Portanto, adicione um arquivo de variante apenas onde o texto realmente difere. Uma chave é resolvida como `null` apenas quando declara variantes, mas nenhuma entrada padrão.
113
+
80
114
  ### Consumir variantes nomeadas
81
115
 
82
116
  #### Variante padrão
@@ -22,7 +22,10 @@ history:
22
22
  changes: "Выпуск функции вариантов"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` теперь принимает строку или объект — прежние `meta` / динамические записи объявляются как объектные варианты"
25
+ changes: "`variant` теперь принимает строку или объект — прежние `meta` / динамические записи объявляются как вариант объектов"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Вариант объявляет только ключи, которые он переопределяет; необъявленные варианты возвращаются к записи по умолчанию"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Частичные варианты
84
+
85
+ Вариант **объявляет только ключи, которые он переопределяет**; остальные наследуются из записи по умолчанию.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` унаследовано
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → запись по умолчанию
110
+ ```
111
+
112
+ Поэтому вы добавляете файл варианта только там, где текст действительно отличается. Ключ разрешается в `null` только в том случае, если он объявляет варианты, но не имеет записи по умолчанию.
113
+
80
114
  ### Использование именованных вариантов
81
115
 
82
116
  #### Вариант по умолчанию
@@ -22,7 +22,10 @@ history:
22
22
  changes: "Varyantlar özelliğinin yayımlanması"
23
23
  - version: 9.1.0
24
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"
25
+ changes: "`variant` artık bir dize veya bir nesne kabul ediyor — önceki `meta` / dinamik kayıtlar nesne varyantları olarak bildiriliyor"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Bir varyant yalnızca geçersiz kıldığı anahtarları bildirir; bildirilmemiş varyantlar varsayılan girdiye geri döner"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Kısmi varyantlar
84
+
85
+ Bir varyant **yalnızca geçersiz kıldığı anahtarları bildirir**; geri kalanı varsayılan girdiden miras alınır.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` miras alındı
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → varsayılan girdi
110
+ ```
111
+
112
+ Böylece yalnızca ifadelerin gerçekten farklı olduğu durumlarda bir varyant dosyası eklersiniz. Bir anahtar, yalnızca varyantları bildirip varsayılan girdisi olmadığında `null` olarak çözülür.
113
+
80
114
  ### Adlandırılmış varyantları kullanma
81
115
 
82
116
  #### Varsayılan varyant
@@ -23,6 +23,9 @@ history:
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
25
  changes: "`variant` тепер приймає рядок або об'єкт — колишні `meta` / динамічні записи оголошуються як об'єктні варіанти"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Варіант оголошує лише ключі, які він перевизначає; неоголошені варіанти повертаються до запису за замовчуванням"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### Часткові варіанти
84
+
85
+ Варіант **оголошує лише ключі, які він перевизначає**; решта успадковується з запису за замовчуванням.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` успадковано
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → запис за замовчуванням
110
+ ```
111
+
112
+ Тому ви додаєте файл варіанту лише там, де текст дійсно відрізняється. Ключ дозволяється в `null` тільки в тому випадку, якщо він оголошує варіанти, але не має запису за замовчуванням.
113
+
80
114
  ### Використання іменованих варіантів
81
115
 
82
116
  #### Варіант за замовчуванням
@@ -22,7 +22,10 @@ history:
22
22
  changes: "Phát hành tính năng biến thể"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` giờ chấp nhận một chuỗi hoặc một đối tượng — `meta` / bản ghi động trước đây được khai báo dưới dạng biến thể đối tượng"
25
+ changes: "`variant` hiện chấp nhận một chuỗi hoặc một đối tượng — trước đây `meta` / bản ghi động được khai báo biến thể đối tượng"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "Biến thể chỉ khai báo các khóa mà nó ghi đè; các biến thể không được khai báo sẽ quay lại mục mặc định"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,7 +80,38 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
80
- ### Sử dụng biến thể được đặt tên
83
+ ### Biến thể một phần
84
+
85
+ Một biến thể **chỉ khai báo các khóa mà nó ghi đè**; phần còn lại được kế thừa từ mục mặc định.
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — `cta` được kế thừa
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → mục mặc định
110
+ ```
111
+
112
+ Vì vậy, bạn chỉ thêm một tệp biến thể ở nơi văn bản thực sự khác biệt. Một khóa chỉ giải quyết thành `null` khi nó khai báo các biến thể nhưng không có mục mặc định.
113
+
114
+ ### Tiêu thụ các biến thể được đặt tên
81
115
 
82
116
  #### Biến thể mặc định
83
117
 
@@ -22,7 +22,10 @@ history:
22
22
  changes: "变体功能发布"
23
23
  - version: 9.1.0
24
24
  date: 2026-06-26
25
- changes: "`variant` 现在接受字符串或对象——以前的 `meta` / 动态记录现声明为对象变体"
25
+ changes: "`variant` 现在接受字符串或对象 — 以前的 `meta` / 动态记录现在声明为对象变体"
26
+ - version: 9.1.1
27
+ date: 2026-07-31
28
+ changes: "变体仅声明它覆盖的键;未声明的变体将回退到默认条目"
26
29
  author: aymericzip
27
30
  ---
28
31
 
@@ -77,6 +80,37 @@ const dictionary = {
77
80
  export default dictionary;
78
81
  ```
79
82
 
83
+ ### 部分变体
84
+
85
+ 变体**仅声明它覆盖的键**;其余部分从默认条目继承。
86
+
87
+ ```ts fileName="hero-banner.summer.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
88
+ import { t, type Dictionary } from "intlayer";
89
+
90
+ const dictionary = {
91
+ key: "hero-banner",
92
+ variant: "summer",
93
+ content: {
94
+ headline: t({
95
+ en: "Build faster all summer",
96
+ fr: "Développez plus vite tout l'été",
97
+ }),
98
+ },
99
+ } satisfies Dictionary;
100
+
101
+ export default dictionary;
102
+ ```
103
+
104
+ ```tsx
105
+ useIntlayer("hero-banner", { variant: "summer" });
106
+ // → { headline: "Développez plus vite tout l'été", cta: "Commencer" } — 继承了 `cta`
107
+
108
+ useIntlayer("hero-banner", { variant: "never-declared" });
109
+ // → 默认条目
110
+ ```
111
+
112
+ 因此,您只需在文本确实不同的地方添加变体文件。只有在声明了变体但没有默认条目的情况下,键才会解析为 `null`。
113
+
80
114
  ### 使用具名变体
81
115
 
82
116
  #### 默认变体
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/docs",
3
- "version": "9.1.0",
3
+ "version": "9.1.1",
4
4
  "private": false,
5
5
  "description": "Intlayer documentation",
6
6
  "keywords": [
@@ -73,13 +73,13 @@
73
73
  "watch": "webpack --config ./webpack.config.ts --watch"
74
74
  },
75
75
  "dependencies": {
76
- "@intlayer/config": "9.1.0",
77
- "@intlayer/core": "9.1.0",
78
- "@intlayer/types": "9.1.0"
76
+ "@intlayer/config": "9.1.1",
77
+ "@intlayer/core": "9.1.1",
78
+ "@intlayer/types": "9.1.1"
79
79
  },
80
80
  "devDependencies": {
81
- "@intlayer/api": "9.1.0",
82
- "@intlayer/cli": "9.1.0",
81
+ "@intlayer/api": "9.1.1",
82
+ "@intlayer/cli": "9.1.1",
83
83
  "@types/node": "26.1.2",
84
84
  "@utils/ts-config": "1.0.4",
85
85
  "@utils/ts-config-types": "1.0.4",