@intlayer/docs 8.9.4 → 8.9.5
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.
- package/docs/ar/benchmark/index.md +0 -3
- package/docs/ar/benchmark/nextjs.md +15 -6
- package/docs/ar/benchmark/solid.md +155 -0
- package/docs/ar/benchmark/svelte.md +148 -0
- package/docs/ar/benchmark/tanstack.md +12 -3
- package/docs/ar/benchmark/vue.md +160 -0
- package/docs/ar/configuration.md +16 -12
- package/docs/ar/dictionary/content_file.md +51 -1
- package/docs/ar/plugins/sync-po.md +0 -21
- package/docs/bn/configuration.md +16 -12
- package/docs/cs/configuration.md +16 -12
- package/docs/de/benchmark/index.md +0 -3
- package/docs/de/benchmark/nextjs.md +15 -6
- package/docs/de/benchmark/solid.md +155 -0
- package/docs/de/benchmark/svelte.md +148 -0
- package/docs/de/benchmark/tanstack.md +12 -3
- package/docs/de/benchmark/vue.md +160 -0
- package/docs/de/configuration.md +16 -12
- package/docs/de/dictionary/content_file.md +52 -2
- package/docs/de/plugins/sync-po.md +0 -22
- package/docs/en/benchmark/nextjs.md +11 -2
- package/docs/en/benchmark/solid.md +22 -4
- package/docs/en/benchmark/svelte.md +17 -5
- package/docs/en/benchmark/tanstack.md +18 -3
- package/docs/en/benchmark/vue.md +17 -11
- package/docs/en/configuration.md +16 -13
- package/docs/en/dictionary/content_file.md +51 -1
- package/docs/en/plugins/sync-po.md +0 -21
- package/docs/en-GB/benchmark/index.md +0 -3
- package/docs/en-GB/benchmark/nextjs.md +15 -6
- package/docs/en-GB/benchmark/solid.md +155 -0
- package/docs/en-GB/benchmark/svelte.md +148 -0
- package/docs/en-GB/benchmark/tanstack.md +12 -3
- package/docs/en-GB/benchmark/vue.md +160 -0
- package/docs/en-GB/configuration.md +15 -11
- package/docs/en-GB/dictionary/content_file.md +51 -1
- package/docs/en-GB/plugins/sync-po.md +0 -21
- package/docs/es/benchmark/index.md +0 -3
- package/docs/es/benchmark/nextjs.md +15 -6
- package/docs/es/benchmark/solid.md +155 -0
- package/docs/es/benchmark/svelte.md +148 -0
- package/docs/es/benchmark/tanstack.md +12 -3
- package/docs/es/benchmark/vue.md +160 -0
- package/docs/es/configuration.md +16 -12
- package/docs/es/dictionary/content_file.md +51 -1
- package/docs/es/plugins/sync-po.md +0 -21
- package/docs/fr/benchmark/index.md +0 -3
- package/docs/fr/benchmark/nextjs.md +15 -6
- package/docs/fr/benchmark/solid.md +155 -0
- package/docs/fr/benchmark/svelte.md +148 -0
- package/docs/fr/benchmark/tanstack.md +12 -3
- package/docs/fr/benchmark/vue.md +160 -0
- package/docs/fr/configuration.md +16 -12
- package/docs/fr/dictionary/content_file.md +51 -1
- package/docs/fr/plugins/sync-po.md +0 -21
- package/docs/hi/benchmark/nextjs.md +15 -6
- package/docs/hi/benchmark/solid.md +155 -0
- package/docs/hi/benchmark/svelte.md +148 -0
- package/docs/hi/benchmark/tanstack.md +12 -3
- package/docs/hi/benchmark/vue.md +160 -0
- package/docs/hi/configuration.md +16 -12
- package/docs/hi/dictionary/content_file.md +51 -1
- package/docs/hi/plugins/sync-po.md +0 -21
- package/docs/id/benchmark/index.md +0 -3
- package/docs/id/benchmark/nextjs.md +15 -6
- package/docs/id/benchmark/solid.md +155 -0
- package/docs/id/benchmark/svelte.md +148 -0
- package/docs/id/benchmark/tanstack.md +12 -3
- package/docs/id/benchmark/vue.md +160 -0
- package/docs/id/configuration.md +16 -12
- package/docs/id/dictionary/content_file.md +51 -1
- package/docs/id/plugins/sync-po.md +0 -21
- package/docs/it/benchmark/index.md +1 -4
- package/docs/it/benchmark/nextjs.md +15 -6
- package/docs/it/benchmark/solid.md +155 -0
- package/docs/it/benchmark/svelte.md +148 -0
- package/docs/it/benchmark/tanstack.md +12 -3
- package/docs/it/benchmark/vue.md +160 -0
- package/docs/it/configuration.md +16 -12
- package/docs/it/dictionary/content_file.md +51 -1
- package/docs/it/plugins/sync-po.md +0 -21
- package/docs/ja/benchmark/index.md +5 -5
- package/docs/ja/benchmark/nextjs.md +15 -6
- package/docs/ja/benchmark/solid.md +155 -0
- package/docs/ja/benchmark/svelte.md +148 -0
- package/docs/ja/benchmark/tanstack.md +12 -3
- package/docs/ja/benchmark/vue.md +160 -0
- package/docs/ja/configuration.md +16 -12
- package/docs/ja/dictionary/content_file.md +50 -2
- package/docs/ja/intlayer_with_nextjs_no_locale_path.md +4 -3
- package/docs/ja/plugins/sync-po.md +0 -21
- package/docs/ko/benchmark/nextjs.md +15 -6
- package/docs/ko/benchmark/solid.md +155 -0
- package/docs/ko/benchmark/svelte.md +148 -0
- package/docs/ko/benchmark/tanstack.md +12 -3
- package/docs/ko/benchmark/vue.md +160 -0
- package/docs/ko/configuration.md +16 -12
- package/docs/ko/dictionary/content_file.md +51 -1
- package/docs/ko/intlayer_with_nextjs_no_locale_path.md +3 -2
- package/docs/ko/plugins/sync-po.md +0 -21
- package/docs/nl/configuration.md +16 -12
- package/docs/pl/benchmark/index.md +0 -3
- package/docs/pl/benchmark/nextjs.md +15 -6
- package/docs/pl/benchmark/solid.md +155 -0
- package/docs/pl/benchmark/svelte.md +148 -0
- package/docs/pl/benchmark/tanstack.md +12 -3
- package/docs/pl/benchmark/vue.md +160 -0
- package/docs/pl/configuration.md +16 -12
- package/docs/pl/dictionary/content_file.md +51 -1
- package/docs/pl/plugins/sync-po.md +0 -21
- package/docs/pt/benchmark/index.md +0 -3
- package/docs/pt/benchmark/nextjs.md +16 -7
- package/docs/pt/benchmark/solid.md +155 -0
- package/docs/pt/benchmark/svelte.md +148 -0
- package/docs/pt/benchmark/tanstack.md +13 -4
- package/docs/pt/benchmark/vue.md +160 -0
- package/docs/pt/configuration.md +16 -12
- package/docs/pt/dictionary/content_file.md +51 -1
- package/docs/pt/plugins/sync-po.md +0 -21
- package/docs/ru/benchmark/nextjs.md +15 -6
- package/docs/ru/benchmark/solid.md +155 -0
- package/docs/ru/benchmark/svelte.md +148 -0
- package/docs/ru/benchmark/tanstack.md +12 -3
- package/docs/ru/benchmark/vue.md +160 -0
- package/docs/ru/configuration.md +16 -12
- package/docs/ru/dictionary/content_file.md +52 -2
- package/docs/ru/plugins/sync-po.md +0 -21
- package/docs/tr/benchmark/index.md +0 -3
- package/docs/tr/benchmark/nextjs.md +15 -6
- package/docs/tr/benchmark/solid.md +155 -0
- package/docs/tr/benchmark/svelte.md +148 -0
- package/docs/tr/benchmark/tanstack.md +12 -3
- package/docs/tr/benchmark/vue.md +160 -0
- package/docs/tr/configuration.md +16 -12
- package/docs/tr/dictionary/content_file.md +51 -1
- package/docs/tr/plugins/sync-po.md +0 -21
- package/docs/uk/benchmark/nextjs.md +15 -6
- package/docs/uk/benchmark/solid.md +155 -0
- package/docs/uk/benchmark/svelte.md +148 -0
- package/docs/uk/benchmark/tanstack.md +12 -3
- package/docs/uk/benchmark/vue.md +160 -0
- package/docs/uk/configuration.md +16 -12
- package/docs/uk/dictionary/content_file.md +51 -1
- package/docs/uk/plugins/sync-po.md +0 -21
- package/docs/ur/configuration.md +16 -12
- package/docs/vi/benchmark/index.md +0 -3
- package/docs/vi/benchmark/nextjs.md +15 -6
- package/docs/vi/benchmark/solid.md +155 -0
- package/docs/vi/benchmark/svelte.md +148 -0
- package/docs/vi/benchmark/tanstack.md +12 -3
- package/docs/vi/benchmark/vue.md +160 -0
- package/docs/vi/configuration.md +16 -12
- package/docs/vi/dictionary/content_file.md +51 -1
- package/docs/vi/intlayer_with_nextjs_15.md +10 -57
- package/docs/vi/plugins/sync-po.md +0 -21
- package/docs/zh/benchmark/nextjs.md +15 -6
- package/docs/zh/benchmark/solid.md +155 -0
- package/docs/zh/benchmark/svelte.md +148 -0
- package/docs/zh/benchmark/tanstack.md +12 -3
- package/docs/zh/benchmark/vue.md +160 -0
- package/docs/zh/configuration.md +16 -12
- package/docs/zh/dictionary/content_file.md +51 -3
- package/docs/zh/plugins/sync-po.md +0 -21
- package/frequent_questions/ar/intlayerNode.md +3 -3
- package/frequent_questions/de/intlayerNode.md +3 -3
- package/frequent_questions/en/intlayerNode.md +3 -3
- package/frequent_questions/en-GB/intlayerNode.md +3 -3
- package/frequent_questions/es/intlayerNode.md +3 -3
- package/frequent_questions/fr/intlayerNode.md +3 -3
- package/frequent_questions/hi/intlayerNode.md +3 -3
- package/frequent_questions/id/intlayerNode.md +3 -3
- package/frequent_questions/it/intlayerNode.md +3 -3
- package/frequent_questions/ja/intlayerNode.md +3 -3
- package/frequent_questions/ko/intlayerNode.md +3 -3
- package/frequent_questions/pl/intlayerNode.md +3 -3
- package/frequent_questions/pt/intlayerNode.md +3 -3
- package/frequent_questions/ru/intlayerNode.md +3 -3
- package/frequent_questions/tr/intlayerNode.md +3 -3
- package/frequent_questions/uk/intlayerNode.md +3 -3
- package/frequent_questions/vi/intlayerNode.md +3 -3
- package/frequent_questions/zh/intlayerNode.md +3 -3
- package/package.json +8 -8
package/docs/it/configuration.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-13
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-05-12
|
|
4
4
|
title: Configurazione
|
|
5
5
|
description: Scopri come configurare Intlayer per la tua applicazione. Comprendi le diverse impostazioni e opzioni disponibili per personalizzare Intlayer secondo le tue necessità.
|
|
6
6
|
keywords:
|
|
@@ -14,6 +14,9 @@ slugs:
|
|
|
14
14
|
- concept
|
|
15
15
|
- configuration
|
|
16
16
|
history:
|
|
17
|
+
- version: 8.9.4
|
|
18
|
+
date: 2026-05-12
|
|
19
|
+
changes: "Aggiunto il supporto per il provider LM Studio"
|
|
17
20
|
- version: 8.7.0
|
|
18
21
|
date: 2026-04-08
|
|
19
22
|
changes: "Aggiunte le opzioni `prune` e `minify` alla configurazione di build"
|
|
@@ -350,7 +353,7 @@ const config: IntlayerConfig = {
|
|
|
350
353
|
ai: {
|
|
351
354
|
/**
|
|
352
355
|
* Fornitore IA da utilizzare.
|
|
353
|
-
* Opzioni: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai'
|
|
356
|
+
* Opzioni: 'openai', 'anthropic', 'mistral', 'deepseek', 'gemini', 'ollama', 'openrouter', 'alibaba', 'fireworks', 'groq', 'huggingface', 'bedrock', 'googlevertex', 'togetherai', 'lmstudio'
|
|
354
357
|
* Predefinito: 'openai'
|
|
355
358
|
*/
|
|
356
359
|
provider: "openai",
|
|
@@ -919,16 +922,17 @@ Intlayer supporta diversi fornitori IA per la massima flessibilità. I fornitori
|
|
|
919
922
|
- **Groq**
|
|
920
923
|
- **Amazon Bedrock**
|
|
921
924
|
- **Together.ai**
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
|
925
|
-
|
|
|
926
|
-
| `
|
|
927
|
-
| `
|
|
928
|
-
| `
|
|
929
|
-
| `
|
|
930
|
-
| `
|
|
931
|
-
| `
|
|
925
|
+
- **LM Studio**
|
|
926
|
+
|
|
927
|
+
| Campo | Descrizione | Tipo | Predefinito | Esempio | Commenti |
|
|
928
|
+
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
929
|
+
| `provider` | Fornitore IA da utilizzare per le funzionalità IA di Intlayer. | `'openai'` | <br/> `'anthropic'` | <br/> `'mistral'` | <br/> `'deepseek'` | <br/> `'gemini'` | <br/> `'ollama'` | <br/> `'openrouter'` | <br/> `'alibaba'` | <br/> `'fireworks'` | <br/> `'groq'` | <br/> `'huggingface'` | <br/> `'bedrock'` | <br/> `'googleaistudio'` | <br/> `'googlevertex'` | <br/> `'togetherai'` | <br/> `'lmstudio'` | `undefined` | `'anthropic'` | Fornitori diversi richiedono chiavi API diverse e hanno prezzi diversi. |
|
|
930
|
+
| `model` | Modello IA da utilizzare per le funzionalità IA. | `string` | Nessuno | `'gpt-4o-2024-11-20'` | I modelli specifici dipendono dal fornitore. |
|
|
931
|
+
| `temperature` | Controlla la casualità della risposta IA. | `number` | Nessuno | `0.1` | Temperatura più alta = più creativo e meno affidabile. |
|
|
932
|
+
| `apiKey` | La tua chiave API per il fornitore selezionato. | `string` | Nessuno | `process.env.OPENAI_API_KEY` | Deve essere mantenuto segreto; usa le variabili d'ambiente. |
|
|
933
|
+
| `applicationContext` | Contesto aggiuntivo sulla tua applicazione per aiutare l'IA a generare traduzioni più accurate (dominio, pubblico di destinazione, tono, terminologia). | `string` | Nessuno | `'Mio contesto applicativo personalizzato'` | Può essere utilizzato per aggiungere regole (es: `"Non dovresti tradurre i tuoi URL"`). |
|
|
934
|
+
| `baseURL` | URL base per l'API IA. | `string` | Nessuno | `'https://api.openai.com/v1'` <br/> `'http://localhost:5000'` | Può puntare a endpoint API IA locali o personalizzati. |
|
|
935
|
+
| `dataSerialization` | Formato di serializzazione dei dati per le funzionalità IA. | `'json'` | <br/> `'toon'` | `undefined` | `'toon'` | • `'json'`: predefinito, affidabile; utilizza più token.<br/>• `'toon'`: meno token, meno stabile.<br/>• Passa il contesto al modello come parametro aggiuntivo (reasoning effort, ecc.). |
|
|
932
936
|
|
|
933
937
|
---
|
|
934
938
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-02-07
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-05-12
|
|
4
4
|
title: File di Contenuto
|
|
5
5
|
description: Scopri come personalizzare le estensioni per i tuoi file di dichiarazione dei contenuti. Segui questa documentazione per implementare condizioni in modo efficiente nel tuo progetto.
|
|
6
6
|
keywords:
|
|
@@ -12,6 +12,9 @@ slugs:
|
|
|
12
12
|
- concept
|
|
13
13
|
- content
|
|
14
14
|
history:
|
|
15
|
+
- version: 8.9.0
|
|
16
|
+
date: 2026-05-12
|
|
17
|
+
changes: "Aggiungi il tipo di nodo di contenuto `plural`"
|
|
15
18
|
- version: 8.0.0
|
|
16
19
|
date: 2026-01-28
|
|
17
20
|
changes: "Aggiunto tipo di nodo contenuto `html`"
|
|
@@ -63,6 +66,7 @@ import { type ReactNode } from "react";
|
|
|
63
66
|
import {
|
|
64
67
|
t,
|
|
65
68
|
enu,
|
|
69
|
+
plural,
|
|
66
70
|
cond,
|
|
67
71
|
nest,
|
|
68
72
|
md,
|
|
@@ -82,6 +86,7 @@ interface Content {
|
|
|
82
86
|
};
|
|
83
87
|
multilingualContent: string;
|
|
84
88
|
quantityContent: string;
|
|
89
|
+
pluralContent: string;
|
|
85
90
|
conditionalContent: string;
|
|
86
91
|
markdownContent: never;
|
|
87
92
|
htmlContent: never;
|
|
@@ -118,6 +123,10 @@ export default {
|
|
|
118
123
|
">5": "Alcune macchine",
|
|
119
124
|
">19": "Molte macchine",
|
|
120
125
|
}),
|
|
126
|
+
pluralContent: plural({
|
|
127
|
+
one: "One car",
|
|
128
|
+
other: "{{count}} cars",
|
|
129
|
+
}),
|
|
121
130
|
conditionalContent: cond({
|
|
122
131
|
true: "La validazione è abilitata",
|
|
123
132
|
false: "La validazione è disabilitata",
|
|
@@ -172,6 +181,13 @@ export default {
|
|
|
172
181
|
">5": "Alcune auto",
|
|
173
182
|
">19": "Molte auto",
|
|
174
183
|
},
|
|
184
|
+
"pluralContent": {
|
|
185
|
+
"nodeType": "plural",
|
|
186
|
+
"plural": {
|
|
187
|
+
"one": "One car",
|
|
188
|
+
"other": "{{count}} cars",
|
|
189
|
+
},
|
|
190
|
+
},
|
|
175
191
|
},
|
|
176
192
|
"conditionalContent": {
|
|
177
193
|
"nodeType": "condizione",
|
|
@@ -219,6 +235,7 @@ I nodi di contenuto sono i mattoni fondamentali del contenuto del dizionario. Po
|
|
|
219
235
|
- **Valori primitivi**: stringhe, numeri, booleani, null, undefined
|
|
220
236
|
- **Nodi tipizzati**: Tipi di contenuto speciali come traduzioni, condizioni, markdown, ecc.
|
|
221
237
|
- **Funzioni**: Contenuto dinamico che può essere valutato a runtime [vedi Recupero Funzioni](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/function_fetching.md)
|
|
238
|
+
- **Contenuto Plurale**: Vedere Contenuto Plurale [Vedere Contenuto Plurale](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/plural.md)
|
|
222
239
|
- **Contenuto annidato**: Riferimenti ad altri dizionari
|
|
223
240
|
|
|
224
241
|
#### Tipi di Contenuto
|
|
@@ -544,6 +561,8 @@ multilingualContent: t({
|
|
|
544
561
|
});
|
|
545
562
|
```
|
|
546
563
|
|
|
564
|
+
> Vedere [Contenuto di Traduzione (`t`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/translation.md) per ulteriori informazioni.
|
|
565
|
+
|
|
547
566
|
### Contenuto Condizionale (`cond`)
|
|
548
567
|
|
|
549
568
|
Contenuto che cambia in base a condizioni booleane:
|
|
@@ -557,6 +576,8 @@ conditionalContent: cond({
|
|
|
557
576
|
});
|
|
558
577
|
```
|
|
559
578
|
|
|
579
|
+
> Vedere [Contenuto Condizionale (`cond`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/condition.md) per ulteriori informazioni.
|
|
580
|
+
|
|
560
581
|
### Contenuto Enumerato (`enu`)
|
|
561
582
|
|
|
562
583
|
Contenuto che varia in base a valori enumerati:
|
|
@@ -571,6 +592,23 @@ statusContent: enu({
|
|
|
571
592
|
});
|
|
572
593
|
```
|
|
573
594
|
|
|
595
|
+
> Vedere [Contenuto Enumerato (`enu`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/enumeration.md) per ulteriori informazioni.
|
|
596
|
+
|
|
597
|
+
### Contenuto Plurale (`plural`)
|
|
598
|
+
|
|
599
|
+
Contenuto che varia in base alle regole del plurale:
|
|
600
|
+
|
|
601
|
+
```typescript
|
|
602
|
+
import { plural } from "intlayer";
|
|
603
|
+
|
|
604
|
+
pluralContent: plural({
|
|
605
|
+
one: "One car",
|
|
606
|
+
other: "{{count}} cars",
|
|
607
|
+
});
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
> Vedere [Contenuto Plurale Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/plural.md) per ulteriori informazioni.
|
|
611
|
+
|
|
574
612
|
### Contenuto di Inserimento (`insert`)
|
|
575
613
|
|
|
576
614
|
Contenuto che può essere inserito in altri contenuti:
|
|
@@ -581,6 +619,8 @@ import { insert } from "intlayer";
|
|
|
581
619
|
insertionContent: insert("Questo testo può essere inserito ovunque");
|
|
582
620
|
```
|
|
583
621
|
|
|
622
|
+
> Vedere [Contenuto di Inserimento (`insert`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/insertion.md) per ulteriori informazioni.
|
|
623
|
+
|
|
584
624
|
### Contenuto Nidificato (`nest`)
|
|
585
625
|
|
|
586
626
|
Riferimenti ad altri dizionari:
|
|
@@ -591,6 +631,8 @@ import { nest } from "intlayer";
|
|
|
591
631
|
nestedContent: nest("about-page");
|
|
592
632
|
```
|
|
593
633
|
|
|
634
|
+
> Vedere [Contenuto Nidificato (`nest`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/nesting.md) per ulteriori informazioni.
|
|
635
|
+
|
|
594
636
|
### Contenuto Markdown (`md`)
|
|
595
637
|
|
|
596
638
|
Contenuto di testo ricco in formato Markdown:
|
|
@@ -603,6 +645,8 @@ markdownContent: md(
|
|
|
603
645
|
);
|
|
604
646
|
```
|
|
605
647
|
|
|
648
|
+
> Vedere [Contenuto Markdown (`md`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/markdown.md) per ulteriori informazioni.
|
|
649
|
+
|
|
606
650
|
### Contenuto HTML (`html`)
|
|
607
651
|
|
|
608
652
|
Contenuto HTML ricco che può usare tag standard o componenti personalizzati:
|
|
@@ -620,6 +664,8 @@ localizedHtmlContent: t({
|
|
|
620
664
|
});
|
|
621
665
|
```
|
|
622
666
|
|
|
667
|
+
> Vedere [Contenuto HTML (`html`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/html.md) per ulteriori informazioni.
|
|
668
|
+
|
|
623
669
|
### Contenuto per Genere (`gender`)
|
|
624
670
|
|
|
625
671
|
Contenuto che varia in base al genere:
|
|
@@ -634,6 +680,8 @@ genderContent: gender({
|
|
|
634
680
|
});
|
|
635
681
|
```
|
|
636
682
|
|
|
683
|
+
> Vedere [Contenuto per Genere (`gender`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/gender.md) per ulteriori informazioni.
|
|
684
|
+
|
|
637
685
|
### Contenuto da File (`file`)
|
|
638
686
|
|
|
639
687
|
Riferimenti a file esterni:
|
|
@@ -644,6 +692,8 @@ import { file } from "intlayer";
|
|
|
644
692
|
fileContent: file("./path/to/content.txt");
|
|
645
693
|
```
|
|
646
694
|
|
|
695
|
+
> Vedere [Contenuto da File (`file`) Doc](https://github.com/aymericzip/intlayer/blob/main/docs/docs/it/dictionary/file.md) per ulteriori informazioni.
|
|
696
|
+
|
|
647
697
|
## Creazione di File di Contenuto
|
|
648
698
|
|
|
649
699
|
### Struttura Base di un File di Contenuto
|
|
@@ -160,30 +160,9 @@ syncPO({
|
|
|
160
160
|
source: ({ key, locale }) => string, // richiesto
|
|
161
161
|
location?: string, // etichetta opzionale, default: "sync-po::path/to/source"
|
|
162
162
|
priority?: number, // priorità opzionale per la risoluzione dei conflitti, default: 0
|
|
163
|
-
format?: 'icu' | 'i18next' | 'vue-i18n', // opzionale, necessario solo quando i valori msgstr utilizzano una specifica sintassi di interpolazione
|
|
164
163
|
});
|
|
165
164
|
```
|
|
166
165
|
|
|
167
|
-
#### `format` ('icu' | 'i18next' | 'vue-i18n')
|
|
168
|
-
|
|
169
|
-
I file PO sono sempre file Gettext Portable Object — questo è fisso. Questa opzione descrive solo la **sintassi di interpolazione** utilizzata all'interno dei valori `msgstr`, in modo che Intlayer possa convertirli nel proprio formato al momento del parsing (tramite `formatDictionary`) e viceversa durante la scrittura dell'output.
|
|
170
|
-
|
|
171
|
-
- `undefined` _(default)_: i valori `msgstr` sono trattati come stringhe semplici — nessuna trasformazione. Usa questo per la maggior parte dei file PO.
|
|
172
|
-
- `'icu'`: i valori `msgstr` utilizzano la sintassi dei messaggi ICU (es. `{count, plural, one {# item} other {# items}}`).
|
|
173
|
-
- `'i18next'`: i valori `msgstr` utilizzano la sintassi di interpolazione i18next (es. `{{variable}}`).
|
|
174
|
-
- `'vue-i18n'`: i valori `msgstr` utilizzano la sintassi Vue I18n.
|
|
175
|
-
|
|
176
|
-
> La trasformazione è applicata da `formatDictionary` di `@intlayer/chokidar` al caricamento e invertita con `formatDictionaryOutput` alla scrittura. Per regole complesse come i plurali ICU, la fedeltà del round-trip non è garantita.
|
|
177
|
-
|
|
178
|
-
**Esempio — i file PO contengono interpolazione in stile i18next:**
|
|
179
|
-
|
|
180
|
-
```ts
|
|
181
|
-
syncPO({
|
|
182
|
-
source: ({ key, locale }) => `./locales/${locale}/${key}.po`,
|
|
183
|
-
format: "i18next",
|
|
184
|
-
}),
|
|
185
|
-
```
|
|
186
|
-
|
|
187
166
|
### Sorgenti PO multiple e priorità
|
|
188
167
|
|
|
189
168
|
Puoi aggiungere più plugin `syncPO` per sincronizzare diverse sorgenti PO. Questo è utile quando hai più sorgenti di traduzione o diverse strutture PO nel tuo progetto.
|
|
@@ -25,8 +25,8 @@ Benchmark Bloom は、複数の React フレームワークとロード戦略に
|
|
|
25
25
|
|
|
26
26
|
各フレームワークの詳細レポートと技術ドキュメントは次のとおりです。
|
|
27
27
|
|
|
28
|
-
- [**Next.js
|
|
29
|
-
- [**TanStack Start
|
|
30
|
-
- [**Vue
|
|
31
|
-
- [**Solid
|
|
32
|
-
- [**Svelte
|
|
28
|
+
- [**Next.js ベンチマークレポート**](./nextjs.md)
|
|
29
|
+
- [**TanStack Start ベンチマークレポート**](./tanstack.md)
|
|
30
|
+
- [**Vue ベンチマークレポート**](./vue.md)
|
|
31
|
+
- [**Solid ベンチマークレポート**](./solid.md)
|
|
32
|
+
- [**Svelte ベンチマークレポート**](./svelte.md)
|
|
@@ -61,6 +61,13 @@ history:
|
|
|
61
61
|
|
|
62
62
|
Intlayerは、これらの各側面において最適化を試みています。
|
|
63
63
|
|
|
64
|
+
## TL;DR
|
|
65
|
+
|
|
66
|
+
- **Intlayer** & **next-translate**: Next.jsのパフォーマンスにおいて最適な選択肢。最小のフットプリントと最高の静的レンダリングサポートを提供。
|
|
67
|
+
- **next-intl**: 最もトレンドのオプションだが、大規模なアプリケーション向けに最適化するには重く、複雑。
|
|
68
|
+
- **next-i18next**: 人気がありプラグインも豊富だが、バンドル重量が非常に大きい(Intlayer의約3倍)。
|
|
69
|
+
- **避けるべき**: **gt-next** と **lingo.dev**。深刻なパフォーマンスの問題、ベンダーロックイン、ビルドを破壊するバグのため。
|
|
70
|
+
|
|
64
71
|
## アプリをテストする
|
|
65
72
|
|
|
66
73
|
これらの問題を顕在化させるために、無料のスキャナーを作成しました。[こちら](https://intlayer.org/i18n-seo-scanner)で試すことができます。
|
|
@@ -99,14 +106,14 @@ WebpackやTurbopackを使用し、`[locale]/page.tsx`のようなルートを宣
|
|
|
99
106
|
このベンチマークでは、以下のライブラリを比較しました。
|
|
100
107
|
|
|
101
108
|
- `Base App`(i18nライブラリなし)
|
|
102
|
-
- `next-intlayer` (v8.7.
|
|
109
|
+
- `next-intlayer` (v8.7.12)
|
|
103
110
|
- `next-i18next` (v16.0.5)
|
|
104
111
|
- `next-intl` (v4.9.1)
|
|
105
112
|
- `@lingui/core` (v5.3.0)
|
|
106
113
|
- `next-translate` (v3.1.2)
|
|
107
114
|
- `next-international` (v1.3.1)
|
|
108
115
|
- `@inlang/paraglide-js` (v2.15.1)
|
|
109
|
-
-
|
|
116
|
+
- `@tolgee/react` (v7.0.0)
|
|
110
117
|
- `@lingo.dev/compiler` (v0.4.0)
|
|
111
118
|
- `wuchale` (v0.22.11)
|
|
112
119
|
- `gt-next` (v6.16.5)
|
|
@@ -161,10 +168,10 @@ Next.jsのバージョンは`16.2.4`(App Router)を使用しました。
|
|
|
161
168
|
|
|
162
169
|
**(General Translation)** (`gt-next@6.16.5`):
|
|
163
170
|
|
|
164
|
-
- 110kbのアプリに対して、`gt-
|
|
171
|
+
- 110kbのアプリに対して、`gt-next`は440kb以上の余分なデータを追加します。
|
|
165
172
|
- General Translationを使用した最初のビルドで「Quota Exceeded, please upgrade your plan(クォータ超過、プランをアップグレードしてください)」と表示されました。
|
|
166
173
|
- 翻訳がレンダリングされません。`Error: <T> used on the client-side outside of <GTProvider>`というエラーが発生しましたが、これはライブラリのバグのようです。
|
|
167
|
-
- **gt-
|
|
174
|
+
- **gt-next**を実装中、ライブラリの[問題](https://github.com/generaltranslation/gt/issues/1210#event-24510646961)にも遭遇しました。`does not provide an export named 'printAST' - @formatjs/icu-messageformat-parser`というエラーでアプリケーションが壊れました。この問題を報告した後、メンテナは24時間以内に修正しました。
|
|
168
175
|
- このライブラリはNext.jsページの静的レンダリングをブロックします。
|
|
169
176
|
|
|
170
177
|
**(Lingo.dev)** (`@lingo.dev/compiler@0.4.0`):
|
|
@@ -186,9 +193,11 @@ Next.jsのバージョンは`16.2.4`(App Router)を使用しました。
|
|
|
186
193
|
個人的には、プッシュのたびにJSファイルを再生成しなければならないのが嫌いです。これはPRを通じて常にマージ競合のリスクを生み出します。また、このツールはNext.jsよりもViteにフォーカスしているように見えます。
|
|
187
194
|
最後に、他のソリューションと比較して、Paraglideはコンテンツをレンダリングするために現在のロケールを取得するためのストア(例:Reactコンテキスト)を使用しません。パースされる各ノードについて、localStorageやクッキーなどからロケールをリクエストします。これにより、コンポーネントの反応性に影響を与える不要なロジックが実行されます。
|
|
188
195
|
|
|
196
|
+
> paraglideについての注意:このソリューションは、インポートのためにコードベースにコードを注入します。その結果、ベンチマークレポートの「ライブラリサイズ」指標はほぼ0になります。コード生成は良いことです。なぜなら、使用される関数には必要なロジック(すべてのプレフィックス対プレフィックスなし、クッキー対ストレージなど)のみが含まれるからです。対照的に、Intlayerはビルド時に環境変数を注入して、ロジックに応じてコンテンツをツリーシェイキングするようバンドラーに強制します。このおかげで、paraglideとintlayerは、i18nextやnext-intlよりも6〜10倍軽量なソリューションとなっています。
|
|
197
|
+
|
|
189
198
|
### 3 — 許容できるソリューション
|
|
190
199
|
|
|
191
|
-
**(Tolgee)** (
|
|
200
|
+
**(Tolgee)** (`@tolgee/react@7.0.0`):
|
|
192
201
|
|
|
193
202
|
`Tolgee`は前述の問題の多くに対処しています。しかし、同様のツールよりも導入が難しいと感じました。型安全性が提供されていないため、コンパイル時に紛失したキーを見つけることも困難です。キーの不備を検出するために、Tolgeeの関数を自前の関数でラップする必要がありました。
|
|
194
203
|
|
|
@@ -216,7 +225,7 @@ Next.jsのバージョンは`16.2.4`(App Router)を使用しました。
|
|
|
216
225
|
|
|
217
226
|
`t()`スタイルのAPIがお好みなら、`next-translate`が私の主な推奨事項です。`next-translate-plugin`を介して優雅に動作し、Webpack / Turbopackローダーを使用して`getStaticProps`経由でネームスペースをロードします。また、今回の中で最も軽量な選択肢です(約2.5kb)。ネームスぺーシングについては、設定ファイルでページやルートごとにネームスペースを定義する方法がよく考えられており、**next-intl**や**next-i18next**のような主要な選択肢よりもメンテナンスが容易です。バージョン`3.1.2`では、静的レンダリングが機能せず、Next.jsが動的レンダリングにフォールバックすることに気づきました。
|
|
218
227
|
|
|
219
|
-
**(Intlayer)** (`next-intlayer@8.7.
|
|
228
|
+
**(Intlayer)** (`next-intlayer@8.7.12`):
|
|
220
229
|
|
|
221
230
|
客観性を保つため、自分自身のソリューションである`next-intlayer`については個人的な判断を控えさせていただきます。
|
|
222
231
|
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-04-20
|
|
3
|
+
updatedAt: 2026-04-21
|
|
4
|
+
title: 2026年 Solid向けの最高のi18nソリューション - ベンチマークレポート
|
|
5
|
+
description: solid-primitives、solid-i18next、IntlayerなどのSolid国際化(i18n)ライブラリを比較します。バンドルサイズ、リーク、反応性に関する詳細なパフォーマンスレポート。
|
|
6
|
+
keywords:
|
|
7
|
+
- benchmark
|
|
8
|
+
- i18n
|
|
9
|
+
- intl
|
|
10
|
+
- solid
|
|
11
|
+
- パフォーマンス
|
|
12
|
+
- intlayer
|
|
13
|
+
slugs:
|
|
14
|
+
- doc
|
|
15
|
+
- benchmark
|
|
16
|
+
- solid
|
|
17
|
+
author: Aymeric PINEAU
|
|
18
|
+
applicationTemplate: https://github.com/intlayer-org/benchmark-i18n-solid-template
|
|
19
|
+
history:
|
|
20
|
+
- version: 8.7.12
|
|
21
|
+
date: 2026-01-06
|
|
22
|
+
changes: "ベンチマークの初期化"
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Solid i18nライブラリ - 2026年ベンチマークレポート
|
|
26
|
+
|
|
27
|
+
このページは、Solidにおけるi18nソリューションのベンチマークレポートです。
|
|
28
|
+
|
|
29
|
+
## 目次
|
|
30
|
+
|
|
31
|
+
<Toc/>
|
|
32
|
+
|
|
33
|
+
## インタラクティブベンチマーク
|
|
34
|
+
|
|
35
|
+
<I18nBenchmark framework="vite-solid" vertical/>
|
|
36
|
+
|
|
37
|
+
## 結果のリファレンス:
|
|
38
|
+
|
|
39
|
+
<iframe
|
|
40
|
+
src="https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_solid.md"
|
|
41
|
+
width="100%"
|
|
42
|
+
height="600px"
|
|
43
|
+
style="border:none;">
|
|
44
|
+
</iframe>
|
|
45
|
+
|
|
46
|
+
> https://intlayer.org/markdown?url=https%3A%2F%2Fraw.githubusercontent.com%2Fintlayer-org%2Fbenchmark-i18n%2Fmain%2Freport%2Fscripts%2Fsummarize-vite_solid.md
|
|
47
|
+
|
|
48
|
+
完全なベンチマークリポジトリは[こちら](https://github.com/intlayer-org/benchmark-i18n/tree/main)でご覧いただけます。
|
|
49
|
+
|
|
50
|
+
## はじめに
|
|
51
|
+
|
|
52
|
+
国際化ソリューションは、Solidアプリにおいて最も重い依存関係の一つです。主なリスクは、不必要なコンテンツ(単一のルートのバンドルに含まれる他のページや他のロケールの翻訳)を送信してしまうことです。
|
|
53
|
+
|
|
54
|
+
アプリが成長するにつれて、この問題はクライアントに送信されるJavaScriptを急速に増大させ、ナビゲーションを遅くする可能性があります。
|
|
55
|
+
|
|
56
|
+
実際、最適化が不十分な実装では、国際化されたページがi18nなしのバージョンよりも数倍重くなることがあります。
|
|
57
|
+
|
|
58
|
+
もう一つの影響は、開発者エクスペリエンス(DX)です。コンテンツの宣言方法、型、名前空間の構成、動的ロード、ロケール変更時の反応性などが含まれます。
|
|
59
|
+
|
|
60
|
+
## TL;DR
|
|
61
|
+
|
|
62
|
+
- **Intlayer**: 高度な機能と最適化を必要とするプロフェッショナルなSolidアプリケーションに推奨される選択肢(v8.7.12)。
|
|
63
|
+
- **@solid-primitives/i18n**: シンプルなプロジェクトには優れた軽量な代替案ですが、遅延ロードなどの高度な機能に欠けます。
|
|
64
|
+
- **solid-i18next**: 標準的ですが重い選択肢(Intlayerの約4.7倍)で、React i18nextと同じ欠点があります。
|
|
65
|
+
- **Paraglide**: 革新的なアプローチですが、一部のセットアップではDXが複雑で、ツリーシェイキングの問題があります。
|
|
66
|
+
|
|
67
|
+
## アプリをテストする
|
|
68
|
+
|
|
69
|
+
i18nリークの問題を素早く特定するために、無料のスキャナーを用意しました。[こちら](https://intlayer.org/i18n-seo-scanner)でお試しいただけます。
|
|
70
|
+
|
|
71
|
+
<iframe src="https://intlayer.org/i18n-seo-scanner" width="100%" height="600px" style="border:none;"/>
|
|
72
|
+
|
|
73
|
+
## 問題点
|
|
74
|
+
|
|
75
|
+
多言語アプリのコストを抑えるためには、2つのレバーが不可欠です。
|
|
76
|
+
|
|
77
|
+
- ページ/名前空間ごとにコンテンツを分割し、不要な時に辞書全体をロードしないようにする。
|
|
78
|
+
- 必要な時にだけ、適切なロケールを動的にロードする。
|
|
79
|
+
|
|
80
|
+
これらのアプローチの技術的限界を理解する:
|
|
81
|
+
|
|
82
|
+
**動的ロード**
|
|
83
|
+
|
|
84
|
+
動的ロードがない場合、ほとんどのソリューションは最初のレンダリングからメッセージをメモリに保持するため、ルートやロケールが多いアプリでは大きなオーバーヘッドとなります。
|
|
85
|
+
|
|
86
|
+
動的ロードを使用する場合、トレードオフを受け入れることになります。初期JSは減りますが、言語切り替え時などに追加のリクエストが発生することがあります。
|
|
87
|
+
|
|
88
|
+
**コンテンツの分割**
|
|
89
|
+
|
|
90
|
+
`t('a.b.c')` を中心に構築された構文は非常に便利ですが、実行時に大きなJSONオブジェクトを保持することを助長しがちです。このモデルでは、ライブラリがページごとの分割戦略を提供していない限り、ツリーシェイキングが難しくなります。
|
|
91
|
+
|
|
92
|
+
## 研究方法
|
|
93
|
+
|
|
94
|
+
このベンチマークでは、以下のライブラリを比較しました。
|
|
95
|
+
|
|
96
|
+
- `Base App` (i18nライブラリなし)
|
|
97
|
+
- `solid-intlayer` (v8.7.12)
|
|
98
|
+
- `@solid-primitives/i18n` (v2.2.1)
|
|
99
|
+
- `solid-i18next` (v17.0.2)
|
|
100
|
+
- `@inlang/paraglide-js` (v2.17.0)
|
|
101
|
+
|
|
102
|
+
フレームワークは `Solid` で、**10ページ**と**10言語**を持つ多言語アプリを使用しました。
|
|
103
|
+
|
|
104
|
+
**4つのロード戦略**を比較しました。
|
|
105
|
+
|
|
106
|
+
| 戦略 | 名前空間なし(グローバル) | 名前空間あり(スコープ) |
|
|
107
|
+
| :------------- | :---------------------------------------------- | :--------------------------------------------------------- |
|
|
108
|
+
| **静的ロード** | **Static**: 起動時にすべてをメモリに保持。 | **Scoped static**: 名前空間で分割。起動時にすべてロード。 |
|
|
109
|
+
| **動的ロード** | **Dynamic**: ロケールごとのオンデマンドロード。 | **Scoped dynamic**: 名前空間とロケールごとの詳細なロード。 |
|
|
110
|
+
|
|
111
|
+
## 戦略のまとめ
|
|
112
|
+
|
|
113
|
+
- **静的(Static)**: シンプル。初期ロード後のネットワーク遅延なし。欠点:バンドルサイズが大きい。
|
|
114
|
+
- **動的(Dynamic)**: 初期重量を削減(遅延ロード)。ロケールが多い場合に理想的。
|
|
115
|
+
- **名前空間付き静的(Scoped static)**: 複雑な追加リクエストなしで、コードを整理(論理的分離)した状態に保つ。
|
|
116
|
+
- **名前空間付き動的(Scoped dynamic)**: コード分割とパフォーマンスのための最善のアプローチ。現在のビューとアクティブなロケールに必要なものだけをロードし、メモリ使用量を最小限に抑える。
|
|
117
|
+
|
|
118
|
+
## 結果の詳細
|
|
119
|
+
|
|
120
|
+
### 1 - 避けるべきソリューション
|
|
121
|
+
|
|
122
|
+
> Solidエコシステムにおいて、明確に避けるべきソリューションはありません。
|
|
123
|
+
|
|
124
|
+
### 2 - 許容できるソリューション
|
|
125
|
+
|
|
126
|
+
**(solid-i18next)** (`solid-i18next@17.0.2`):
|
|
127
|
+
|
|
128
|
+
`solid-i18next` は、JavaScriptアプリのi18nニーズに応えた最初のソリューションの一つであったため、おそらく最も人気のあるオプションです。また、特定の問題を解決するためのコミュニティプラグインも幅広く揃っています。
|
|
129
|
+
|
|
130
|
+
パッケージは重いです(~14.6kb。これは `solid-intlayer` の約4.7倍です)。
|
|
131
|
+
|
|
132
|
+
それでも、`t('a.b.c')` 上に構築されたスタックと同じ主要な欠点を共有しています。最適化は可能ですが非常に時間がかかり、大規模なプロジェクトでは悪い習慣(名前空間 + 動的ロード + 型)に陥るリスクがあります。
|
|
133
|
+
|
|
134
|
+
**(@solid-primitives/i18n)** (`@solid-primitives/i18n@2.2.1`):
|
|
135
|
+
|
|
136
|
+
Solid primitive は非常に軽量で効率的です。小規模なプロジェクトにはこのソリューションを推奨しますが、クッキー管理、プロキシリダイレクト、フォーマッタなどを含むプロフェッショナルなソリューションには機能が不足しがちです。
|
|
137
|
+
また、ページサイズの最適化のための遅延ロードや名前空間のスコーピングも欠けています。
|
|
138
|
+
|
|
139
|
+
**(Paraglide)** (`@inlang/paraglide-js@2.17.0`):
|
|
140
|
+
|
|
141
|
+
`Paraglide` は革新的でよく考えられたアプローチを提供しています。それでも、このベンチマークでは、彼らが宣伝しているツリーシェイキングは私の実装では機能しませんでした。ワークフローとDXも他のオプションより複雑です。
|
|
142
|
+
個人的には、プッシュする前に毎回JSファイルを再生成しなければならないのが好きではありません。
|
|
143
|
+
最後に、他のソリューションと比較して、Paraglide はコンテンツをレンダリングするための現在のロケールを取得するためにストア(例:Solid signal)を使用しません。パースされる各ノードに対して、localStorage / cookie などからロケールを要求します。これにより、コンポーネントの反応性に影響を与える不要なロジックの実行が発生します。
|
|
144
|
+
|
|
145
|
+
### 3 - 推奨事項
|
|
146
|
+
|
|
147
|
+
**(Intlayer)** (`solid-intlayer@8.7.12`):
|
|
148
|
+
|
|
149
|
+
客観性を保つため、`solid-intlayer` については私自身のソリューションであるため、個人的な評価は控えます。
|
|
150
|
+
|
|
151
|
+
### 個人メモ
|
|
152
|
+
|
|
153
|
+
このメモは個人的なものであり、ベンチマーク結果には影響しません。それでも、i18nの世界では翻訳されたコンテンツに対して `const t = useTranslation('xx')` + `<>{t('xx.xx')}</>` のようなパターンが一般的です。
|
|
154
|
+
|
|
155
|
+
Solidアプリにおいて、関数を `JSX.Element` として注入することは、私の考えではアンチパターンです。また、回避可能な複雑さとJavaScriptの実行オーバーヘッド(たとえほとんど目立たなくても)を追加することになります。
|