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

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,271 +0,0 @@
1
- ---
2
- createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: السجلات الديناميكية
5
- description: استخدم حقل meta في ملفات محتوى Intlayer للإعلان عن السجلات التي يديرها نظام إدارة المحتوى (CMS) والتي يتم جلبها في وقت التشغيل بواسطة معرف غير شفاف، مما يتيح محتوى ديناميكيًا قوي النوع بدون تعداد في وقت البناء.
6
- keywords:
7
- - السجلات الديناميكية
8
- - المحتوى الديناميكي
9
- - نظام إدارة المحتوى
10
- - محتوى وقت التشغيل
11
- - Intlayer
12
- - تدويل
13
- slugs:
14
- - doc
15
- - concept
16
- - dynamic-records
17
- history:
18
- - version: 9.0.0
19
- date: 2026-06-12
20
- changes: "إصدار ميزة المحتوى الديناميكي"
21
- author: aymericzip
22
- ---
23
-
24
- # السجلات الديناميكية
25
-
26
- **السجل الديناميكي** (dynamic record) هو ملف محتوى لا يتم تحديد هويته بواسطة فهرس تسلسلي أو متغير مسمى، بل بواسطة مجموعة عشوائية من أزواج المفاتيح والقيم المعلنة في حقل `meta`. يستخدم Intlayer هذه الحقول كمحدد في وقت التشغيل، مما يتيح معالجة سجلات CMS، أو نسخ محددة للمستخدم، أو أي محتوى لا تُعرف مفاتيحه في وقت البناء.
27
-
28
- ## الإعلان عن السجلات الديناميكية
29
-
30
- ```ts fileName="product-copy.abc.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
31
- import { t, type Dictionary } from "intlayer";
32
-
33
- const dictionary = {
34
- key: "product-copy",
35
- meta: {
36
- id: "prod_abc",
37
- userId: "user_123",
38
- },
39
- content: {
40
- name: t({ en: "Widget Pro", fr: "Widget Pro" }),
41
- description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
42
- },
43
- } satisfies Dictionary;
44
-
45
- export default dictionary;
46
- ```
47
-
48
- ```ts fileName="product-copy.abcd.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
49
- import { t, type Dictionary } from "intlayer";
50
-
51
- const dictionary = {
52
- key: "product-copy",
53
- meta: {
54
- id: "prod_abcd",
55
- userId: "user_123",
56
- },
57
- content: {
58
- name: t({ en: "Widget Lite", fr: "Widget Lite" }),
59
- description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
60
- },
61
- } satisfies Dictionary;
62
-
63
- export default dictionary;
64
- ```
65
-
66
- ## استهلاك السجلات الديناميكية
67
-
68
- جميع حقول `meta` **مطلوبة** في المحدد. يؤدي حذف أي حقل إلى إرجاع `null` ويعد خطأ في TypeScript.
69
-
70
- <Tabs group="framework">
71
- <Tab label="React" value="react">
72
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
73
- import { useIntlayer } from "react-intlayer";
74
-
75
- export const ProductCopy = ({
76
- productId,
77
- userId,
78
- }: {
79
- productId: string;
80
- userId: string;
81
- }) => {
82
- const content = useIntlayer("product-copy", { id: productId, userId });
83
- // يضمن TypeScript توفير كل من `id` و `userId`.
84
-
85
- if (!content) return null;
86
-
87
- return <p>{content.description}</p>;
88
- };
89
- ```
90
-
91
- </Tab>
92
- <Tab label="Next.js" value="nextjs">
93
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
94
- import { useIntlayer } from "next-intlayer";
95
-
96
- export const ProductCopy = ({
97
- productId,
98
- userId,
99
- }: {
100
- productId: string;
101
- userId: string;
102
- }) => {
103
- const content = useIntlayer("product-copy", { id: productId, userId });
104
- // يضمن TypeScript توفير كل من `id` و `userId`.
105
-
106
- if (!content) return null;
107
-
108
- return <p>{content.description}</p>;
109
- };
110
- ```
111
-
112
- </Tab>
113
- <Tab label="Vue" value="vue">
114
- ```vue fileName="ProductCopy.vue" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
115
- <script setup>
116
- import { useIntlayer } from "vue-intlayer";
117
-
118
- const props = defineProps({
119
- productId: String,
120
- userId: String,
121
- });
122
-
123
- const content = useIntlayer("product-copy", { id: props.productId, userId: props.userId });
124
- </script>
125
-
126
- <template>
127
- <p v-if="content">{{ content.description }}</p>
128
- </template>
129
- ```
130
-
131
- </Tab>
132
- <Tab label="Svelte" value="svelte">
133
- ```svelte fileName="ProductCopy.svelte" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
134
- <script lang="ts">
135
- import { useIntlayer } from "svelte-intlayer";
136
-
137
- export let productId: string;
138
- export let userId: string;
139
-
140
- const content = useIntlayer("product-copy", { id: productId, userId });
141
- </script>
142
-
143
- {#if $content}
144
- <p>{$content.description}</p>
145
- {/if}
146
- ```
147
-
148
- </Tab>
149
- <Tab label="Preact" value="preact">
150
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
151
- import { useIntlayer } from "preact-intlayer";
152
-
153
- export const ProductCopy = ({
154
- productId,
155
- userId,
156
- }: {
157
- productId: string;
158
- userId: string;
159
- }) => {
160
- const content = useIntlayer("product-copy", { id: productId, userId });
161
- // يضمن TypeScript توفير كل من `id` و `userId`.
162
-
163
- if (!content) return null;
164
-
165
- return <p>{content.description}</p>;
166
- };
167
- ```
168
-
169
- </Tab>
170
- <Tab label="Solid" value="solid">
171
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
172
- import { useIntlayer } from "solid-intlayer";
173
-
174
- export const ProductCopy = (props: {
175
- productId: string;
176
- userId: string;
177
- }) => {
178
- const content = useIntlayer("product-copy", { id: props.productId, userId: props.userId });
179
- // يضمن TypeScript توفير كل من `id` و `userId`.
180
-
181
- return (
182
- <>
183
- {content() && <p>{content().description}</p>}
184
- </>
185
- );
186
- };
187
- ```
188
-
189
- </Tab>
190
- <Tab label="Angular" value="angular">
191
- ```typescript fileName="product-copy.component.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
192
- import { Component, Input, OnInit } from "@angular/core";
193
- import { useIntlayer } from "angular-intlayer";
194
-
195
- @Component({
196
- selector: "app-product-copy",
197
- template: `
198
- @if (content()) {
199
- <p>{{ content().description }}</p>
200
- }
201
- `,
202
- })
203
- export class ProductCopyComponent implements OnInit {
204
- @Input() productId!: string;
205
- @Input() userId!: string;
206
-
207
- content: any;
208
-
209
- ngOnInit() {
210
- this.content = useIntlayer("product-copy", { id: this.productId, userId: this.userId });
211
- }
212
- }
213
- ```
214
-
215
- </Tab>
216
- <Tab label="Vanilla JS" value="vanilla">
217
- ```javascript fileName="product-copy.js"
218
- import { useIntlayer } from "vanilla-intlayer";
219
-
220
- const content = useIntlayer("product-copy", {
221
- id: "prod_abcd",
222
- userId: "user_123"
223
- });
224
-
225
- if (content) {
226
- document.body.innerHTML = `<p>${content.description}</p>`;
227
- }
228
- ```
229
-
230
- </Tab>
231
- </Tabs>
232
-
233
- ### مع تحديد لغة صريحة
234
-
235
- ```tsx
236
- const content = useIntlayer("product-copy", {
237
- id: "prod_abc",
238
- userId: "user_123",
239
- locale: "fr",
240
- });
241
- ```
242
-
243
- ### حقل meta مفقود — خطأ وقت الترجمة
244
-
245
- ```ts
246
- // خطأ في النوع: `userId` مفقود
247
- const content = useIntlayer("product-copy", { id: "prod_abc" });
248
- ```
249
-
250
- ## وضع التحميل
251
-
252
- عادة ما يتم تحميل السجلات الديناميكية بشكل كسول. قم بتعيين `importMode` في القاموس للتحكم في ذلك:
253
-
254
- ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
255
- const dictionary = {
256
- key: "product-copy",
257
- importMode: "fetch", // أو "dynamic"
258
- meta: { id: "prod_abc", userId: "user_123" },
259
- content: { … },
260
- } satisfies Dictionary;
261
-
262
- export default dictionary;
263
- ```
264
-
265
- انظر [تحسين الحزمة](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ar/bundle_optimization.md) لمعرفة التفاصيل حول الأوضاع `static` و `dynamic` و `fetch`.
266
-
267
- ## حالات الاستخدام الشائعة
268
-
269
- - نسخة تسويقية لكل منتج تتم إدارتها في نظام إدارة المحتوى (CMS)
270
- - محتوى خاص بالمستخدم أو خاص بالحساب
271
- - أي محتوى يتم تعيينه بواسطة معرف تشغيل غير شفاف
@@ -1,271 +0,0 @@
1
- ---
2
- createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: Dynamische Einträge
5
- description: Verwenden Sie das Meta-Feld in Inhaltsdateien von Intlayer, um vom CMS verwaltete Einträge zu deklarieren, die zur Laufzeit über eine opake ID abgerufen werden. Dies ermöglicht streng typisierte dynamische Inhalte ohne Enumeration zur Build-Zeit.
6
- keywords:
7
- - Dynamische Einträge
8
- - Dynamischer Inhalt
9
- - CMS
10
- - Laufzeitinhalte
11
- - Intlayer
12
- - Internationalisierung
13
- slugs:
14
- - doc
15
- - concept
16
- - dynamic-records
17
- history:
18
- - version: 9.0.0
19
- date: 2026-06-12
20
- changes: "Veröffentlichung der dynamischen Inhaltsfunktion"
21
- author: aymericzip
22
- ---
23
-
24
- # Dynamische Einträge
25
-
26
- Ein **dynamischer Eintrag** (dynamic record) ist eine Inhaltsdatei, deren Identität kein sequenzieller Index oder eine benannte Variante ist, sondern ein beliebiges Satz von Schlüssel-Wert-Paaren, die in einem `meta`-Feld deklariert sind. Intlayer verwendet diese Felder zur Laufzeit als Selektor. Dadurch ist es möglich, CMS-Einträge, benutzerspezifische Texte oder beliebige Inhalte zu adressieren, deren Schlüssel zur Build-Zeit noch nicht bekannt sind.
27
-
28
- ## Deklarieren von dynamischen Einträgen
29
-
30
- ```ts fileName="product-copy.abc.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
31
- import { t, type Dictionary } from "intlayer";
32
-
33
- const dictionary = {
34
- key: "product-copy",
35
- meta: {
36
- id: "prod_abc",
37
- userId: "user_123",
38
- },
39
- content: {
40
- name: t({ en: "Widget Pro", fr: "Widget Pro" }),
41
- description: t({ en: "The best widget.", fr: "Le meilleur widget." }),
42
- },
43
- } satisfies Dictionary;
44
-
45
- export default dictionary;
46
- ```
47
-
48
- ```ts fileName="product-copy.abcd.content.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
49
- import { t, type Dictionary } from "intlayer";
50
-
51
- const dictionary = {
52
- key: "product-copy",
53
- meta: {
54
- id: "prod_abcd",
55
- userId: "user_123",
56
- },
57
- content: {
58
- name: t({ en: "Widget Lite", fr: "Widget Lite" }),
59
- description: t({ en: "A lighter option.", fr: "Une option plus légère." }),
60
- },
61
- } satisfies Dictionary;
62
-
63
- export default dictionary;
64
- ```
65
-
66
- ## Nutzen von dynamischen Einträgen
67
-
68
- Alle `meta`-Felder sind im Selektor **erforderlich**. Das Weglassen eines Feldes gibt `null` zurück und führt zu einem TypeScript-Fehler.
69
-
70
- <Tabs group="framework">
71
- <Tab label="React" value="react">
72
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
73
- import { useIntlayer } from "react-intlayer";
74
-
75
- export const ProductCopy = ({
76
- productId,
77
- userId,
78
- }: {
79
- productId: string;
80
- userId: string;
81
- }) => {
82
- const content = useIntlayer("product-copy", { id: productId, userId });
83
- // TypeScript erzwingt, dass sowohl `id` als auch `userId` angegeben werden.
84
-
85
- if (!content) return null;
86
-
87
- return <p>{content.description}</p>;
88
- };
89
- ```
90
-
91
- </Tab>
92
- <Tab label="Next.js" value="nextjs">
93
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
94
- import { useIntlayer } from "next-intlayer";
95
-
96
- export const ProductCopy = ({
97
- productId,
98
- userId,
99
- }: {
100
- productId: string;
101
- userId: string;
102
- }) => {
103
- const content = useIntlayer("product-copy", { id: productId, userId });
104
- // TypeScript erzwingt, dass sowohl `id` als auch `userId` angegeben werden.
105
-
106
- if (!content) return null;
107
-
108
- return <p>{content.description}</p>;
109
- };
110
- ```
111
-
112
- </Tab>
113
- <Tab label="Vue" value="vue">
114
- ```vue fileName="ProductCopy.vue" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
115
- <script setup>
116
- import { useIntlayer } from "vue-intlayer";
117
-
118
- const props = defineProps({
119
- productId: String,
120
- userId: String,
121
- });
122
-
123
- const content = useIntlayer("product-copy", { id: props.productId, userId: props.userId });
124
- </script>
125
-
126
- <template>
127
- <p v-if="content">{{ content.description }}</p>
128
- </template>
129
- ```
130
-
131
- </Tab>
132
- <Tab label="Svelte" value="svelte">
133
- ```svelte fileName="ProductCopy.svelte" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
134
- <script lang="ts">
135
- import { useIntlayer } from "svelte-intlayer";
136
-
137
- export let productId: string;
138
- export let userId: string;
139
-
140
- const content = useIntlayer("product-copy", { id: productId, userId });
141
- </script>
142
-
143
- {#if $content}
144
- <p>{$content.description}</p>
145
- {/if}
146
- ```
147
-
148
- </Tab>
149
- <Tab label="Preact" value="preact">
150
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
151
- import { useIntlayer } from "preact-intlayer";
152
-
153
- export const ProductCopy = ({
154
- productId,
155
- userId,
156
- }: {
157
- productId: string;
158
- userId: string;
159
- }) => {
160
- const content = useIntlayer("product-copy", { id: productId, userId });
161
- // TypeScript erzwingt, dass sowohl `id` als auch `userId` angegeben werden.
162
-
163
- if (!content) return null;
164
-
165
- return <p>{content.description}</p>;
166
- };
167
- ```
168
-
169
- </Tab>
170
- <Tab label="Solid" value="solid">
171
- ```tsx fileName="ProductCopy.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
172
- import { useIntlayer } from "solid-intlayer";
173
-
174
- export const ProductCopy = (props: {
175
- productId: string;
176
- userId: string;
177
- }) => {
178
- const content = useIntlayer("product-copy", { id: props.productId, userId: props.userId });
179
- // TypeScript erzwingt, dass sowohl `id` als auch `userId` angegeben werden.
180
-
181
- return (
182
- <>
183
- {content() && <p>{content().description}</p>}
184
- </>
185
- );
186
- };
187
- ```
188
-
189
- </Tab>
190
- <Tab label="Angular" value="angular">
191
- ```typescript fileName="product-copy.component.ts" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
192
- import { Component, Input, OnInit } from "@angular/core";
193
- import { useIntlayer } from "angular-intlayer";
194
-
195
- @Component({
196
- selector: "app-product-copy",
197
- template: `
198
- @if (content()) {
199
- <p>{{ content().description }}</p>
200
- }
201
- `,
202
- })
203
- export class ProductCopyComponent implements OnInit {
204
- @Input() productId!: string;
205
- @Input() userId!: string;
206
-
207
- content: any;
208
-
209
- ngOnInit() {
210
- this.content = useIntlayer("product-copy", { id: this.productId, userId: this.userId });
211
- }
212
- }
213
- ```
214
-
215
- </Tab>
216
- <Tab label="Vanilla JS" value="vanilla">
217
- ```javascript fileName="product-copy.js"
218
- import { useIntlayer } from "vanilla-intlayer";
219
-
220
- const content = useIntlayer("product-copy", {
221
- id: "prod_abcd",
222
- userId: "user_123"
223
- });
224
-
225
- if (content) {
226
- document.body.innerHTML = `<p>${content.description}</p>`;
227
- }
228
- ```
229
-
230
- </Tab>
231
- </Tabs>
232
-
233
- ### Mit explizitem Locale
234
-
235
- ```tsx
236
- const content = useIntlayer("product-copy", {
237
- id: "prod_abc",
238
- userId: "user_123",
239
- locale: "de",
240
- });
241
- ```
242
-
243
- ### Fehlendes Meta-Feld — Fehler zur Compile-Zeit
244
-
245
- ```ts
246
- // Typfehler: `userId` fehlt
247
- const content = useIntlayer("product-copy", { id: "prod_abc" });
248
- ```
249
-
250
- ## Lademodus (loading mode)
251
-
252
- Dynamische Einträge werden normalerweise verzögert (lazy) geladen. Legen Sie `importMode` für das Wörterbuch fest, um dies zu steuern:
253
-
254
- ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
255
- const dictionary = {
256
- key: "product-copy",
257
- importMode: "fetch", // oder "dynamic"
258
- meta: { id: "prod_abc", userId: "user_123" },
259
- content: { … },
260
- } satisfies Dictionary;
261
-
262
- export default dictionary;
263
- ```
264
-
265
- Weitere Details zu den Modi `static`, `dynamic` und `fetch` finden Sie unter [Bundle-Optimierung](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/bundle_optimization.md).
266
-
267
- ## Typische Anwendungsfälle
268
-
269
- - Produktbezogene Marketingtexte, die in einem CMS verwaltet werden
270
- - Benutzerspezifische oder kontospezifische Inhalte
271
- - Beliebige Inhalte, die durch eine opake Runtime-ID gekennzeichnet sind