@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,271 +0,0 @@
1
- ---
2
- createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: Registros Dinámicos
5
- description: Utilice el campo meta en los archivos de contenido de Intlayer para declarar registros administrados por CMS obtenidos en tiempo de ejecución mediante un ID opaco, lo que permite contenido dinámico fuertemente tipado sin enumeración en tiempo de compilación.
6
- keywords:
7
- - Registros Dinámicos
8
- - Contenido Dinámico
9
- - CMS
10
- - Contenido en Tiempo de Ejecución
11
- - Intlayer
12
- - Internacionalización
13
- slugs:
14
- - doc
15
- - concept
16
- - dynamic-records
17
- history:
18
- - version: 9.0.0
19
- date: 2026-06-12
20
- changes: "Lanzamiento de la función de contenido dinámico"
21
- author: aymericzip
22
- ---
23
-
24
- # Registros Dinámicos
25
-
26
- Un **registro dinámico** (dynamic record) es un archivo de contenido cuya identidad no es un índice secuencial o una variante nombrada, sino un conjunto arbitrario de pares clave-valor declarados en un campo `meta`. Intlayer utiliza esos campos como el selector en tiempo de ejecución, lo que permite direccionar registros de CMS, copias específicas del usuario o cualquier contenido cuyas claves no se conozcan en tiempo de compilación.
27
-
28
- ## Declarar registros dinámicos
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
- ## Consumir registros dinámicos
67
-
68
- Todos los campos `meta` son **obligatorios** en el selector. Omitir cualquier campo devuelve `null` y es un error de 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 garantiza que se proporcionen tanto `id` como `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 garantiza que se proporcionen tanto `id` como `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 garantiza que se proporcionen tanto `id` como `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 garantiza que se proporcionen tanto `id` como `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
- ### Con configuración regional explícita
234
-
235
- ```tsx
236
- const content = useIntlayer("product-copy", {
237
- id: "prod_abc",
238
- userId: "user_123",
239
- locale: "es",
240
- });
241
- ```
242
-
243
- ### Falta el campo meta — error en tiempo de compilación
244
-
245
- ```ts
246
- // Error de tipo: falta `userId`
247
- const content = useIntlayer("product-copy", { id: "prod_abc" });
248
- ```
249
-
250
- ## Mode de carga (loading mode)
251
-
252
- Los registros dinámicos suelen cargarse de forma diferida. Establezca `importMode` en el diccionario para controlar esto:
253
-
254
- ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
255
- const dictionary = {
256
- key: "product-copy",
257
- importMode: "fetch", // o "dynamic"
258
- meta: { id: "prod_abc", userId: "user_123" },
259
- content: { … },
260
- } satisfies Dictionary;
261
-
262
- export default dictionary;
263
- ```
264
-
265
- Consulte [optimización del bundle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/es/bundle_optimization.md) para obtener más detalles sobre los modos `static`, `dynamic` y `fetch`.
266
-
267
- ## Casos de uso típicos
268
-
269
- - Copia de marketing por producto gestionada en un CMS
270
- - Contenido específico del usuario o de la cuenta
271
- - Cualquier contenido identificado por un ID de tiempo de ejecución opaco
@@ -1,271 +0,0 @@
1
- ---
2
- createdAt: 2026-06-12
3
- updatedAt: 2026-06-12
4
- title: Enregistrements Dynamiques
5
- description: Utilisez le champ meta dans les fichiers de contenu d'Intlayer pour déclarer des enregistrements gérés par CMS récupérés au moment de l'exécution par un identifiant opaque, permettant un contenu dynamique fortement typé sans énumération au moment de la compilation.
6
- keywords:
7
- - Enregistrements Dynamiques
8
- - Contenu Dynamique
9
- - CMS
10
- - Contenu au moment de l'exécution
11
- - Intlayer
12
- - Internationalisation
13
- slugs:
14
- - doc
15
- - concept
16
- - dynamic-records
17
- history:
18
- - version: 9.0.0
19
- date: 2026-06-12
20
- changes: "Lancement de la fonctionnalité de contenu dynamique"
21
- author: aymericzip
22
- ---
23
-
24
- # Enregistrements Dynamiques
25
-
26
- Un **enregistrement dynamique** (dynamic record) est un fichier de contenu dont l'identité n'est pas un index séquentiel ou une variante nommée, mais un ensemble arbitraire de paires clé-valeur déclarées dans un champ `meta`. Intlayer utilise ces champs comme sélecteur au moment de l'exécution, ce qui permet d'adresser des enregistrements CMS, des copies spécifiques à l'utilisateur ou tout contenu dont les clés ne sont pas connues au moment de la compilation.
27
-
28
- ## Déclarer des enregistrements dynamiques
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
- ## Consommer des enregistrements dynamiques
67
-
68
- Tous les champs `meta` sont **obligatoires** dans le sélecteur. Omettre un champ renvoie `null` et génère une erreur 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 garantit que "id" et "userId" sont tous deux fournis.
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 garantit que "id" et "userId" sont tous two fournis.
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 garantit que "id" et "userId" sont tous deux fournis.
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 garantit que "id" et "userId" sont tous deux fournis.
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
- ### Avec une locale explicite
234
-
235
- ```tsx
236
- const content = useIntlayer("product-copy", {
237
- id: "prod_abc",
238
- userId: "user_123",
239
- locale: "fr",
240
- });
241
- ```
242
-
243
- ### Champ meta manquant — erreur de compilation
244
-
245
- ```ts
246
- // Erreur de type : `userId` est manquant
247
- const content = useIntlayer("product-copy", { id: "prod_abc" });
248
- ```
249
-
250
- ## Mode de chargement (loading mode)
251
-
252
- Les enregistrements dynamiques sont généralement chargés de manière différée. Définissez `importMode` sur le dictionnaire pour contrôler cela :
253
-
254
- ```ts contentDeclarationFormat={["typescript", "esm", "commonjs"]}
255
- const dictionary = {
256
- key: "product-copy",
257
- importMode: "fetch", // ou "dynamic"
258
- meta: { id: "prod_abc", userId: "user_123" },
259
- content: { … },
260
- } satisfies Dictionary;
261
-
262
- export default dictionary;
263
- ```
264
-
265
- Voir [optimisation du bundle](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/bundle_optimization.md) pour plus de détails sur les modes `static`, `dynamic` et `fetch`.
266
-
267
- ## Cas d'utilisation typiques
268
-
269
- - Copie marketing par produit gérée dans un CMS
270
- - Contenu spécifique à l'utilisateur ou au compte
271
- - Tout contenu identifié par un ID opaque au moment de l'exécution