@intlayer/docs 7.3.0 → 7.3.2-canary.0

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 (107) hide show
  1. package/README.md +0 -2
  2. package/blog/ar/compiler_vs_declarative_i18n.md +1 -2
  3. package/blog/ar/list_i18n_technologies/frameworks/flutter.md +0 -22
  4. package/blog/de/compiler_vs_declarative_i18n.md +1 -2
  5. package/blog/de/list_i18n_technologies/frameworks/flutter.md +0 -22
  6. package/blog/en/compiler_vs_declarative_i18n.md +1 -2
  7. package/blog/en/list_i18n_technologies/frameworks/flutter.md +0 -22
  8. package/blog/en/list_i18n_technologies/frameworks/svelte.md +19 -3
  9. package/blog/en/list_i18n_technologies/frameworks/vue.md +16 -2
  10. package/blog/en-GB/compiler_vs_declarative_i18n.md +1 -2
  11. package/blog/en-GB/list_i18n_technologies/frameworks/flutter.md +0 -22
  12. package/blog/es/compiler_vs_declarative_i18n.md +1 -2
  13. package/blog/es/list_i18n_technologies/frameworks/flutter.md +0 -22
  14. package/blog/fr/compiler_vs_declarative_i18n.md +1 -2
  15. package/blog/fr/list_i18n_technologies/frameworks/flutter.md +0 -22
  16. package/blog/hi/compiler_vs_declarative_i18n.md +1 -2
  17. package/blog/hi/list_i18n_technologies/frameworks/flutter.md +0 -22
  18. package/blog/id/compiler_vs_declarative_i18n.md +1 -2
  19. package/blog/id/list_i18n_technologies/frameworks/flutter.md +0 -22
  20. package/blog/it/compiler_vs_declarative_i18n.md +1 -2
  21. package/blog/it/list_i18n_technologies/frameworks/flutter.md +0 -22
  22. package/blog/ja/compiler_vs_declarative_i18n.md +1 -2
  23. package/blog/ja/list_i18n_technologies/frameworks/flutter.md +0 -22
  24. package/blog/ko/compiler_vs_declarative_i18n.md +1 -2
  25. package/blog/ko/list_i18n_technologies/frameworks/flutter.md +0 -22
  26. package/blog/pl/compiler_vs_declarative_i18n.md +1 -2
  27. package/blog/pl/list_i18n_technologies/frameworks/flutter.md +0 -22
  28. package/blog/pt/compiler_vs_declarative_i18n.md +1 -2
  29. package/blog/pt/list_i18n_technologies/frameworks/flutter.md +0 -22
  30. package/blog/ru/compiler_vs_declarative_i18n.md +1 -2
  31. package/blog/ru/list_i18n_technologies/frameworks/flutter.md +0 -22
  32. package/blog/tr/compiler_vs_declarative_i18n.md +1 -2
  33. package/blog/tr/list_i18n_technologies/frameworks/flutter.md +0 -22
  34. package/blog/vi/compiler_vs_declarative_i18n.md +1 -2
  35. package/blog/vi/list_i18n_technologies/frameworks/flutter.md +0 -22
  36. package/blog/zh/compiler_vs_declarative_i18n.md +1 -2
  37. package/blog/zh/list_i18n_technologies/frameworks/flutter.md +0 -22
  38. package/dist/cjs/generated/docs.entry.cjs +38 -0
  39. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  40. package/dist/esm/generated/docs.entry.mjs +38 -0
  41. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  42. package/dist/types/generated/docs.entry.d.ts +2 -0
  43. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  44. package/docs/ar/bundle_optimization.md +184 -0
  45. package/docs/ar/compiler.md +133 -0
  46. package/docs/ar/vs_code_extension.md +4 -0
  47. package/docs/de/bundle_optimization.md +194 -0
  48. package/docs/de/compiler.md +133 -0
  49. package/docs/de/how_works_intlayer.md +1 -1
  50. package/docs/de/vs_code_extension.md +4 -0
  51. package/docs/en/bundle_optimization.md +184 -0
  52. package/docs/en/compiler.md +133 -0
  53. package/docs/en/configuration.md +5 -2
  54. package/docs/en/how_works_intlayer.md +1 -1
  55. package/docs/en/vs_code_extension.md +7 -0
  56. package/docs/en-GB/bundle_optimization.md +184 -0
  57. package/docs/en-GB/compiler.md +133 -0
  58. package/docs/en-GB/how_works_intlayer.md +1 -1
  59. package/docs/en-GB/vs_code_extension.md +4 -0
  60. package/docs/es/bundle_optimization.md +194 -0
  61. package/docs/es/compiler.md +133 -0
  62. package/docs/es/how_works_intlayer.md +1 -1
  63. package/docs/es/vs_code_extension.md +4 -0
  64. package/docs/fr/bundle_optimization.md +184 -0
  65. package/docs/fr/compiler.md +133 -0
  66. package/docs/fr/how_works_intlayer.md +1 -1
  67. package/docs/fr/vs_code_extension.md +4 -0
  68. package/docs/hi/bundle_optimization.md +184 -0
  69. package/docs/hi/compiler.md +133 -0
  70. package/docs/hi/vs_code_extension.md +4 -0
  71. package/docs/id/bundle_optimization.md +184 -0
  72. package/docs/id/compiler.md +133 -0
  73. package/docs/id/how_works_intlayer.md +1 -1
  74. package/docs/id/vs_code_extension.md +4 -0
  75. package/docs/it/bundle_optimization.md +184 -0
  76. package/docs/it/compiler.md +133 -0
  77. package/docs/it/how_works_intlayer.md +1 -1
  78. package/docs/it/vs_code_extension.md +4 -0
  79. package/docs/ja/bundle_optimization.md +184 -0
  80. package/docs/ja/compiler.md +133 -0
  81. package/docs/ja/vs_code_extension.md +4 -0
  82. package/docs/ko/bundle_optimization.md +184 -0
  83. package/docs/ko/compiler.md +133 -0
  84. package/docs/ko/vs_code_extension.md +4 -0
  85. package/docs/pl/bundle_optimization.md +184 -0
  86. package/docs/pl/compiler.md +133 -0
  87. package/docs/pl/how_works_intlayer.md +1 -1
  88. package/docs/pl/vs_code_extension.md +4 -0
  89. package/docs/pt/bundle_optimization.md +184 -0
  90. package/docs/pt/compiler.md +133 -0
  91. package/docs/pt/how_works_intlayer.md +1 -1
  92. package/docs/pt/vs_code_extension.md +4 -0
  93. package/docs/ru/bundle_optimization.md +184 -0
  94. package/docs/ru/compiler.md +133 -0
  95. package/docs/ru/vs_code_extension.md +4 -0
  96. package/docs/tr/bundle_optimization.md +184 -0
  97. package/docs/tr/compiler.md +133 -0
  98. package/docs/tr/how_works_intlayer.md +1 -1
  99. package/docs/tr/vs_code_extension.md +4 -0
  100. package/docs/vi/bundle_optimization.md +184 -0
  101. package/docs/vi/compiler.md +133 -0
  102. package/docs/vi/vs_code_extension.md +4 -0
  103. package/docs/zh/bundle_optimization.md +184 -0
  104. package/docs/zh/compiler.md +133 -0
  105. package/docs/zh/vs_code_extension.md +4 -0
  106. package/package.json +8 -7
  107. package/src/generated/docs.entry.ts +38 -0
@@ -42,6 +42,10 @@ Link do rozszerzenia: [https://marketplace.visualstudio.com/items?itemName=Intla
42
42
 
43
43
  ## Funkcje
44
44
 
45
+ ![Wyodrębnij zawartość](https://github.com/aymericzip/intlayer-vs-code-extension/blob/master/assets/vscode_extention_extract_content.gif?raw=true)
46
+
47
+ - **Wyodrębnij Zawartość** – Wyodrębnij zawartość z komponentów React / Vue / Svelte
48
+
45
49
  ![Wypełnianie słowników](https://github.com/aymericzip/intlayer-vs-code-extension/blob/master/assets/vscode_extention_fill_active_dictionary.gif?raw=true)
46
50
 
47
51
  - **Natychmiastowa Nawigacja** – Szybko przejdź do odpowiedniego pliku z treścią, klikając na klucz `useIntlayer`.
@@ -0,0 +1,184 @@
1
+ ---
2
+ createdAt: 2025-11-25
3
+ updatedAt: 2025-11-25
4
+ title: Otimizando o Tamanho e Desempenho do Bundle i18n
5
+ description: Reduza o tamanho do bundle da aplicação otimizando o conteúdo de internacionalização (i18n). Aprenda a aproveitar tree shaking e lazy loading para dicionários com Intlayer.
6
+ keywords:
7
+ - Otimização de Bundle
8
+ - Automação de Conteúdo
9
+ - Conteúdo Dinâmico
10
+ - Intlayer
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - concept
17
+ - bundle-optimization
18
+ history:
19
+ - version: 6.0.0
20
+ date: 2025-11-25
21
+ changes: Histórico inicial
22
+ ---
23
+
24
+ # Otimizando o Tamanho e Desempenho do Bundle i18n
25
+
26
+ Um dos desafios mais comuns com soluções tradicionais de i18n que dependem de arquivos JSON é gerenciar o tamanho do conteúdo. Se os desenvolvedores não separarem manualmente o conteúdo em namespaces, os usuários frequentemente acabam baixando traduções para todas as páginas e potencialmente para todos os idiomas apenas para visualizar uma única página.
27
+
28
+ Por exemplo, uma aplicação com 10 páginas traduzidas em 10 idiomas pode resultar em um usuário baixando o conteúdo de 100 páginas, mesmo que ele precise de **apenas uma** (a página atual no idioma atual). Isso leva a desperdício de largura de banda e tempos de carregamento mais lentos.
29
+
30
+ > Para detectar isso, você pode usar analisadores de bundle como `rollup-plugin-visualizer` (vite), `@next/bundle-analyzer` (next.js) ou `webpack-bundle-analyzer` (React CRA / Angular / etc).
31
+
32
+ **Intlayer resolve esse problema por meio da otimização em tempo de build.** Ele analisa seu código para detectar quais dicionários são realmente usados por componente e reinjeta apenas o conteúdo necessário no seu bundle.
33
+
34
+ ## Índice
35
+
36
+ <TOC />
37
+
38
+ ## Como Funciona
39
+
40
+ Intlayer utiliza uma **abordagem por componente**. Diferente dos arquivos JSON globais, seu conteúdo é definido junto ou dentro dos seus componentes. Durante o processo de build, o Intlayer:
41
+
42
+ 1. **Analisa** seu código para encontrar chamadas de `useIntlayer`.
43
+ 2. **Constrói** o conteúdo do dicionário correspondente.
44
+ 3. **Substitui** a chamada `useIntlayer` por código otimizado baseado na sua configuração.
45
+
46
+ Isso garante que:
47
+
48
+ - Se um componente não for importado, seu conteúdo não será incluído no bundle (Eliminação de Código Morto).
49
+ - Se um componente for carregado de forma lazy, seu conteúdo também será carregado de forma lazy.
50
+
51
+ ## Configuração por Plataforma
52
+
53
+ ### Next.js
54
+
55
+ Next.js requer o plugin `@intlayer/swc` para lidar com a transformação, pois o Next.js utiliza SWC para builds.
56
+
57
+ > Este plugin é instalado por padrão porque plugins SWC ainda são experimentais para Next.js. Isso pode mudar no futuro.
58
+
59
+ ### Vite
60
+
61
+ O Vite utiliza o plugin `@intlayer/babel`, que está incluído como dependência do `vite-intlayer`. A otimização está habilitada por padrão.
62
+
63
+ ### Webpack
64
+
65
+ Para habilitar a otimização do bundle com Intlayer no Webpack, você precisa instalar e configurar o plugin Babel (`@intlayer/babel`) ou SWC (`@intlayer/swc`) apropriado.
66
+
67
+ ### Expo / Lynx
68
+
69
+ A otimização do bundle **ainda não está disponível** para esta plataforma. O suporte será adicionado em uma versão futura.
70
+
71
+ ## Configuração
72
+
73
+ Você pode controlar como o Intlayer otimiza seu bundle através da propriedade `build` no seu arquivo `intlayer.config.ts`.
74
+
75
+ ```typescript fileName="intlayer.config.ts"
76
+ import { Locales, type IntlayerConfig } from "intlayer";
77
+
78
+ const config: IntlayerConfig = {
79
+ internationalization: {
80
+ locales: [Locales.ENGLISH, Locales.FRENCH],
81
+ defaultLocale: Locales.ENGLISH,
82
+ },
83
+ build: {
84
+ optimize: true,
85
+ importMode: "static", // ou 'dynamic'
86
+ traversePattern: ["**/*.{js,ts,mjs,cjs,jsx,tsx}", "!**/node_modules/**"],
87
+ },
88
+ };
89
+
90
+ export default config;
91
+ ```
92
+
93
+ > Manter a opção padrão para `optimize` é recomendado na maioria dos casos.
94
+
95
+ > Veja a documentação de configuração para mais detalhes: [Configuração](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/configuration.md)
96
+
97
+ ### Opções de Build
98
+
99
+ As seguintes opções estão disponíveis no objeto de configuração `build`:
100
+
101
+ | Propriedade | Tipo | Padrão | Descrição |
102
+ | :-------------------- | :------------------------------ | :------------------------------ | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
103
+ | **`optimize`** | `boolean` | `undefined` | Controla se a otimização da build está habilitada. Se `true`, o Intlayer substitui chamadas ao dicionário por injeções otimizadas. Se `false`, a otimização é desativada. Idealmente configurado como `true` em produção. |
104
+ | **`importMode`** | `'static' , 'dynamic' , 'live'` | `'static'` | Determina como os dicionários são carregados (veja detalhes abaixo). |
105
+ | **`traversePattern`** | `string[]` | `['**/*.{js,ts,jsx,tsx}', ...]` | Padrões glob que definem quais arquivos o Intlayer deve escanear para otimização. Use isso para excluir arquivos não relacionados e acelerar as builds. |
106
+ | **`outputFormat`** | `'esm', 'cjs'` | `'esm', 'cjs'` | Controla o formato de saída dos dicionários construídos. |
107
+
108
+ ## Modos de Importação
109
+
110
+ A configuração `importMode` determina como o conteúdo do dicionário é injetado no seu componente.
111
+
112
+ ### 1. Modo Estático (`default`)
113
+
114
+ No modo estático, o Intlayer substitui `useIntlayer` por `useDictionary` e injeta o dicionário diretamente no bundle JavaScript.
115
+
116
+ - **Prós:** Renderização instantânea (síncrona), zero requisições de rede adicionais durante a hidratação.
117
+ - **Contras:** O bundle inclui traduções para **todas** as línguas disponíveis para aquele componente específico.
118
+ - **Ideal para:** Aplicações Single Page (SPA).
119
+
120
+ **Exemplo de Código Transformado:**
121
+
122
+ ```tsx
123
+ // Seu código
124
+ const content = useIntlayer("my-key");
125
+
126
+ // Código otimizado (Estático)
127
+ const content = useDictionary({
128
+ key: "my-key",
129
+ content: {
130
+ nodeType: "translation",
131
+ translation: {
132
+ en: "My title",
133
+ fr: "Mon titre",
134
+ },
135
+ },
136
+ });
137
+ ```
138
+
139
+ ### 2. Modo Dinâmico
140
+
141
+ No modo dinâmico, o Intlayer substitui `useIntlayer` por `useDictionaryAsync`. Isso utiliza `import()` (mecanismo semelhante ao Suspense) para carregar preguiçosamente especificamente o JSON para o locale atual.
142
+
143
+ - **Prós:** **Tree shaking ao nível do locale.** Um usuário visualizando a versão em inglês irá _apenas_ baixar o dicionário em inglês. O dicionário em francês nunca é carregado.
144
+ - **Contras:** Dispara uma requisição de rede (busca de asset) por componente durante a hidratação.
145
+ - **Melhor para:** Blocos grandes de texto, artigos, ou aplicações que suportam muitas línguas onde o tamanho do bundle é crítico.
146
+
147
+ **Exemplo de Código Transformado:**
148
+
149
+ ```tsx
150
+ // Seu código
151
+ const content = useIntlayer("my-key");
152
+
153
+ // Código otimizado (Dinâmico)
154
+ const content = useDictionaryAsync({
155
+ en: () =>
156
+ import(".intlayer/dynamic_dictionary/my-key/en.json").then(
157
+ (mod) => mod.default
158
+ ),
159
+ fr: () =>
160
+ import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
161
+ (mod) => mod.default
162
+ ),
163
+ });
164
+ ```
165
+
166
+ > Ao usar `importMode: 'dynamic'`, se você tiver 100 componentes usando `useIntlayer` em uma única página, o navegador tentará fazer 100 requisições separadas. Para evitar essa "cascata" de requisições, agrupe o conteúdo em menos arquivos `.content` (por exemplo, um dicionário por seção da página) em vez de um por componente atômico.
167
+
168
+ > Atualmente, `importMode: 'dynamic'` não é totalmente suportado para Vue e Svelte. Recomenda-se usar `importMode: 'static'` para esses frameworks até atualizações futuras.
169
+
170
+ ### 3. Modo Live
171
+
172
+ Comporta-se de forma semelhante ao modo Dinâmico, mas tenta buscar os dicionários da API Intlayer Live Sync primeiro. Se a chamada à API falhar ou o conteúdo não estiver marcado para atualizações ao vivo, ele recorre à importação dinâmica.
173
+
174
+ > Veja a documentação do CMS para mais detalhes: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/intlayer_CMS.md)
175
+
176
+ ## Resumo: Estático vs Dinâmico
177
+
178
+ | Recurso | Modo Estático | Modo Dinâmico |
179
+ | :----------------------- | :------------------------------------------------ | :---------------------------------------- |
180
+ | **Tamanho do Bundle JS** | Maior (inclui todos os idiomas para o componente) | Menor (apenas código, sem conteúdo) |
181
+ | **Carregamento Inicial** | Instantâneo (Conteúdo está no bundle) | Pequeno atraso (Busca JSON) |
182
+ | **Requisições de Rede** | 0 requisições extras | 1 requisição por dicionário |
183
+ | **Tree Shaking** | Nível de componente | Nível de componente + Nível de localidade |
184
+ | **Melhor Caso de Uso** | Componentes de UI, Aplicações pequenas | Páginas com muito texto, Muitos idiomas |
@@ -0,0 +1,133 @@
1
+ ---
2
+ createdAt: 2025-09-09
3
+ updatedAt: 2025-09-09
4
+ title: Intlayer Compiler | Extração Automática de Conteúdo para i18n
5
+ description: Automatize seu processo de internacionalização com o Intlayer Compiler. Extraia conteúdo diretamente dos seus componentes para uma i18n mais rápida e eficiente em Vite, Next.js e mais.
6
+ keywords:
7
+ - Intlayer
8
+ - Compiler
9
+ - Internacionalização
10
+ - i18n
11
+ - Automação
12
+ - Extração
13
+ - Velocidade
14
+ - Vite
15
+ - Next.js
16
+ - React
17
+ - Vue
18
+ - Svelte
19
+ slugs:
20
+ - doc
21
+ - compiler
22
+ history:
23
+ - version: 7.3.1
24
+ date: 2025-11-27
25
+ changes: Lançamento do Compiler
26
+ ---
27
+
28
+ # Intlayer Compiler | Extração Automática de Conteúdo para i18n
29
+
30
+ ## O que é o Intlayer Compiler?
31
+
32
+ O **Intlayer Compiler** é uma ferramenta poderosa projetada para automatizar o processo de internacionalização (i18n) em suas aplicações. Ele escaneia seu código-fonte (JSX, TSX, Vue, Svelte) em busca de declarações de conteúdo, extrai-as e gera automaticamente os arquivos de dicionário necessários. Isso permite que você mantenha seu conteúdo localizado junto aos seus componentes, enquanto o Intlayer gerencia e sincroniza seus dicionários.
33
+
34
+ ## Por que Usar o Intlayer Compiler?
35
+
36
+ - **Automação**: Elimina a cópia manual e colagem de conteúdo nos dicionários.
37
+ - **Velocidade**: Extração de conteúdo otimizada garantindo que seu processo de build permaneça rápido.
38
+ - **Experiência do Desenvolvedor**: Mantenha as declarações de conteúdo exatamente onde são usadas, melhorando a manutenção.
39
+ - **Atualizações em Tempo Real**: Suporta Hot Module Replacement (HMR) para feedback instantâneo durante o desenvolvimento.
40
+
41
+ Veja o post do blog [Compiler vs. Declarative i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pt/compiler_vs_declarative_i18n.md) para uma comparação mais aprofundada.
42
+
43
+ ## Por que não usar o Intlayer Compiler?
44
+
45
+ Embora o compilador ofereça uma excelente experiência "funciona automaticamente", ele também introduz algumas compensações das quais você deve estar ciente:
46
+
47
+ - **Ambiguidade heurística**: O compilador deve adivinhar o que é conteúdo voltado para o usuário versus a lógica da aplicação (por exemplo, `className="active"`, códigos de status, IDs de produtos). Em bases de código complexas, isso pode levar a falsos positivos ou strings perdidas que exigem anotações manuais e exceções.
48
+ - **Extração apenas estática**: A extração baseada em compilador depende de análise estática. Strings que existem apenas em tempo de execução (códigos de erro de API, campos CMS, etc.) não podem ser descobertas ou traduzidas pelo compilador sozinho, então você ainda precisa de uma estratégia i18n de tempo de execução complementar.
49
+
50
+ Para uma comparação arquitetural mais profunda, veja o post do blog [Compiler vs. Declarative i18n](https://github.com/aymericzip/intlayer/blob/main/docs/blog/pt/compiler_vs_declarative_i18n.md).
51
+
52
+ Como alternativa, para automatizar seu processo i18n mantendo controle total sobre seu conteúdo, o Intlayer também fornece um comando de auto-extração `intlayer transform` (consulte a [documentação CLI](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/cli/transform.md)), ou o comando `Intlayer: extract content to Dictionary` da extensão Intlayer VS Code (consulte a [documentação da extensão VS Code](https://github.com/aymericzip/intlayer/blob/main/docs/docs/pt/vs_code_extension.md)).
53
+
54
+ ## Uso
55
+
56
+ ### Vite
57
+
58
+ Para aplicações baseadas em Vite (React, Vue, Svelte, etc.), a maneira mais fácil de usar o compilador é através do plugin `vite-intlayer`.
59
+
60
+ #### Instalação
61
+
62
+ ```bash
63
+ npm install vite-intlayer
64
+ ```
65
+
66
+ #### Configuração
67
+
68
+ Atualize seu `vite.config.ts` para incluir o plugin `intlayerCompiler`:
69
+
70
+ ```ts fileName="vite.config.ts"
71
+ import { defineConfig } from "vite";
72
+ import { intlayer, intlayerCompiler } from "vite-intlayer";
73
+
74
+ export default defineConfig({
75
+ plugins: [
76
+ intlayer(),
77
+ intlayerCompiler(), // Adiciona o plugin do compilador
78
+ ],
79
+ });
80
+ ```
81
+
82
+ #### Suporte a Frameworks
83
+
84
+ O plugin do Vite detecta e lida automaticamente com diferentes tipos de arquivos:
85
+
86
+ - **React / JSX / TSX**: Suportado nativamente.
87
+ - **Vue**: Requer `@intlayer/vue-compiler`.
88
+ - **Svelte**: Requer `@intlayer/svelte-compiler`.
89
+
90
+ Certifique-se de instalar o pacote do compilador apropriado para o seu framework:
91
+
92
+ ```bash
93
+ # Para Vue
94
+ npm install @intlayer/vue-compiler
95
+
96
+ # Para Svelte
97
+ npm install @intlayer/svelte-compiler
98
+ ```
99
+
100
+ ### Next.js (Babel)
101
+
102
+ Para Next.js ou outras aplicações baseadas em Webpack que usam Babel, você pode configurar o compilador usando o plugin `@intlayer/babel`.
103
+
104
+ #### Instalação
105
+
106
+ ```bash
107
+ npm install @intlayer/babel
108
+ ```
109
+
110
+ #### Configuração
111
+
112
+ Atualize seu `babel.config.js` (ou `babel.config.json`) para incluir o plugin de extração. Fornecemos um helper `getExtractPluginOptions` para carregar automaticamente sua configuração do Intlayer.
113
+
114
+ ```js fileName="babel.config.js"
115
+ const {
116
+ intlayerExtractBabelPlugin,
117
+ intlayerOptimizeBabelPlugin,
118
+ getExtractPluginOptions,
119
+ getOptimizePluginOptions,
120
+ } = require("@intlayer/babel");
121
+
122
+ module.exports = {
123
+ presets: ["next/babel"],
124
+ plugins: [
125
+ // Extract content from components into dictionaries
126
+ [intlayerExtractBabelPlugin, getExtractPluginOptions()],
127
+ // Optimize imports by replacing useIntlayer with direct dictionary imports
128
+ [intlayerOptimizeBabelPlugin, getOptimizePluginOptions()],
129
+ ],
130
+ };
131
+ ```
132
+
133
+ Esta configuração garante que o conteúdo declarado em seus componentes seja automaticamente extraído e usado para gerar dicionários durante o processo de build.
@@ -140,7 +140,7 @@ O pacote `vue-intlayer` é usado para interpretar os dicionários do Intlayer e
140
140
 
141
141
  O pacote `nuxt-intlayer` é um módulo Nuxt para tornar os dicionários do Intlayer utilizáveis em aplicações Nuxt. Ele integra recursos essenciais para fazer o Intlayer funcionar em um ambiente Nuxt, como middleware de tradução, roteamento e a configuração do arquivo `nuxt.config.js`.
142
142
 
143
- ### svelte-intlayer (WIP)
143
+ ### svelte-intlayer
144
144
 
145
145
  O pacote `svelte-intlayer` é usado para interpretar os dicionários do Intlayer e torná-los utilizáveis em aplicações Svelte.
146
146
 
@@ -42,6 +42,10 @@ Link da extensão: [https://marketplace.visualstudio.com/items?itemName=Intlayer
42
42
 
43
43
  ## Funcionalidades
44
44
 
45
+ ![Extrair conteúdo](https://github.com/aymericzip/intlayer-vs-code-extension/blob/master/assets/vscode_extention_extract_content.gif?raw=true)
46
+
47
+ - **Extrair Conteúdo** – Extraia conteúdo dos seus componentes React / Vue / Svelte
48
+
45
49
  ![Preencher dicionários](https://github.com/aymericzip/intlayer-vs-code-extension/blob/master/assets/vscode_extention_fill_active_dictionary.gif?raw=true)
46
50
 
47
51
  - **Navegação Instantânea** – Vá rapidamente para o arquivo de conteúdo correto ao clicar em uma chave `useIntlayer`.
@@ -0,0 +1,184 @@
1
+ ---
2
+ createdAt: 2025-11-25
3
+ updatedAt: 2025-11-25
4
+ title: Оптимизация размера и производительности i18n-бандла
5
+ description: Сократите размер бандла приложения, оптимизируя контент интернационализации (i18n). Узнайте, как использовать tree shaking и ленивую загрузку словарей с Intlayer.
6
+ keywords:
7
+ - Оптимизация бандла
8
+ - Автоматизация контента
9
+ - Динамический контент
10
+ - Intlayer
11
+ - Next.js
12
+ - JavaScript
13
+ - React
14
+ slugs:
15
+ - doc
16
+ - concept
17
+ - bundle-optimization
18
+ history:
19
+ - version: 6.0.0
20
+ date: 2025-11-25
21
+ changes: Инициализация истории
22
+ ---
23
+
24
+ # Оптимизация размера и производительности i18n-бандла
25
+
26
+ Одна из самых распространённых проблем традиционных решений i18n, основанных на JSON-файлах, — это управление размером контента. Если разработчики не разделяют контент вручную по namespace, пользователи часто загружают переводы для каждой страницы и, возможно, для каждого языка, чтобы просмотреть всего одну страницу.
27
+
28
+ Например, приложение с 10 страницами, переведёнными на 10 языков, может привести к тому, что пользователь загрузит контент 100 страниц, хотя ему нужна только **одна** (текущая страница на текущем языке). Это приводит к излишнему расходу трафика и замедлению времени загрузки.
29
+
30
+ > Для обнаружения этой проблемы можно использовать анализаторы бандлов, такие как `rollup-plugin-visualizer` (vite), `@next/bundle-analyzer` (next.js) или `webpack-bundle-analyzer` (React CRA / Angular / и др.).
31
+
32
+ **Intlayer решает эту проблему за счёт оптимизации на этапе сборки.** Он анализирует ваш код, чтобы определить, какие словари действительно используются в каждом компоненте, и внедряет в бандл только необходимый контент.
33
+
34
+ ## Содержание
35
+
36
+ <TOC />
37
+
38
+ ## Как это работает
39
+
40
+ Intlayer использует **подход на уровне компонентов**. В отличие от глобальных JSON-файлов, ваш контент определяется рядом с компонентами или внутри них. Во время процесса сборки Intlayer:
41
+
42
+ 1. **Анализирует** ваш код, чтобы найти вызовы `useIntlayer`.
43
+ 2. **Формирует** соответствующий словарь с контентом.
44
+ 3. **Заменяет** вызов `useIntlayer` на оптимизированный код в соответствии с вашей конфигурацией.
45
+
46
+ Это гарантирует, что:
47
+
48
+ - Если компонент не импортируется, его контент не включается в бандл (удаление неиспользуемого кода).
49
+ - Если компонент загружается лениво, его контент также загружается лениво.
50
+
51
+ ## Настройка по платформам
52
+
53
+ ### Next.js
54
+
55
+ Next.js требует плагин `@intlayer/swc` для обработки трансформации, так как Next.js использует SWC для сборки.
56
+
57
+ > Этот плагин установлен по умолчанию, поскольку плагины SWC для Next.js всё ещё находятся в экспериментальной стадии. В будущем это может измениться.
58
+
59
+ ### Vite
60
+
61
+ Vite использует плагин `@intlayer/babel`, который включён как зависимость в `vite-intlayer`. Оптимизация включена по умолчанию.
62
+
63
+ ### Webpack
64
+
65
+ Чтобы включить оптимизацию бандла с Intlayer в Webpack, необходимо установить и настроить соответствующий плагин Babel (`@intlayer/babel`) или SWC (`@intlayer/swc`).
66
+
67
+ ### Expo / Lynx
68
+
69
+ Оптимизация бандла **пока недоступна** для этой платформы. Поддержка будет добавлена в будущих релизах.
70
+
71
+ ## Конфигурация
72
+
73
+ Вы можете управлять тем, как Intlayer оптимизирует ваш бандл, через свойство `build` в вашем файле `intlayer.config.ts`.
74
+
75
+ ```typescript fileName="intlayer.config.ts"
76
+ import { Locales, type IntlayerConfig } from "intlayer";
77
+
78
+ const config: IntlayerConfig = {
79
+ internationalization: {
80
+ locales: [Locales.ENGLISH, Locales.FRENCH], // локали
81
+ defaultLocale: Locales.ENGLISH, // локаль по умолчанию
82
+ },
83
+ build: {
84
+ optimize: true, // включить оптимизацию
85
+ importMode: "static", // или 'dynamic' - режим импорта
86
+ traversePattern: ["**/*.{js,ts,mjs,cjs,jsx,tsx}", "!**/node_modules/**"], // шаблоны обхода файлов
87
+ },
88
+ };
89
+
90
+ export default config;
91
+ ```
92
+
93
+ > Рекомендуется сохранять значение по умолчанию для `optimize` в большинстве случаев.
94
+
95
+ > Подробнее о конфигурации смотрите в документации: [Configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/configuration.md)
96
+
97
+ ### Опции сборки
98
+
99
+ Следующие параметры доступны в объекте конфигурации `build`:
100
+
101
+ | Свойство | Тип | Значение по умолчанию | Описание |
102
+ | :-------------------- | :------------------------------ | :------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
103
+ | **`optimize`** | `boolean` | `undefined` | Управляет включением оптимизации сборки. Если `true`, Intlayer заменяет вызовы словарей на оптимизированные инъекции. Если `false`, оптимизация отключена. В идеале устанавливать `true` в продакшене. |
104
+ | **`importMode`** | `'static' , 'dynamic' , 'live'` | `'static'` | Определяет способ загрузки словарей (подробнее см. ниже). |
105
+ | **`traversePattern`** | `string[]` | `['**/*.{js,ts,jsx,tsx}', ...]` | Глобальные шаблоны, определяющие, какие файлы Intlayer должен сканировать для оптимизации. Используйте это, чтобы исключить несвязанные файлы и ускорить сборку. |
106
+ | **`outputFormat`** | `'esm', 'cjs'` | `'esm', 'cjs'` | Управляет форматом вывода собранных словарей. |
107
+
108
+ ## Режимы импорта
109
+
110
+ Настройка `importMode` определяет, как содержимое словаря внедряется в ваш компонент.
111
+
112
+ ### 1. Статический режим (`default`)
113
+
114
+ В статическом режиме Intlayer заменяет `useIntlayer` на `useDictionary` и внедряет словарь непосредственно в JavaScript-бандл.
115
+
116
+ - **Преимущества:** Мгновенный рендеринг (синхронный), отсутствие дополнительных сетевых запросов во время гидратации.
117
+ - **Недостатки:** Бандл включает переводы для **всех** доступных языков для данного компонента.
118
+ - **Лучше всего подходит для:** Одностраничных приложений (SPA).
119
+
120
+ **Пример преобразованного кода:**
121
+
122
+ ```tsx
123
+ // Ваш код
124
+ const content = useIntlayer("my-key");
125
+
126
+ // Оптимизированный код (Статический)
127
+ const content = useDictionary({
128
+ key: "my-key",
129
+ content: {
130
+ nodeType: "translation",
131
+ translation: {
132
+ en: "My title",
133
+ fr: "Mon titre",
134
+ },
135
+ },
136
+ });
137
+ ```
138
+
139
+ ### 2. Динамический режим
140
+
141
+ В динамическом режиме Intlayer заменяет `useIntlayer` на `useDictionaryAsync`. Это использует `import()` (механизм, похожий на Suspense) для ленивой загрузки JSON-файла конкретно для текущей локали.
142
+
143
+ - **Преимущества:** **Tree shaking на уровне локали.** Пользователь, просматривающий английскую версию, загрузит _только_ английский словарь. Французский словарь никогда не загружается.
144
+ - **Недостатки:** Во время гидратации для каждого компонента выполняется сетевой запрос (загрузка ассета).
145
+ - **Лучше всего подходит для:** Больших текстовых блоков, статей или приложений, поддерживающих множество языков, где критичен размер бандла.
146
+
147
+ **Пример преобразованного кода:**
148
+
149
+ ```tsx
150
+ // Ваш код
151
+ const content = useIntlayer("my-key");
152
+
153
+ // Оптимизированный код (Динамический)
154
+ const content = useDictionaryAsync({
155
+ en: () =>
156
+ import(".intlayer/dynamic_dictionary/my-key/en.json").then(
157
+ (mod) => mod.default
158
+ ),
159
+ fr: () =>
160
+ import(".intlayer/dynamic_dictionary/my-key/fr.json").then(
161
+ (mod) => mod.default
162
+ ),
163
+ });
164
+ ```
165
+
166
+ > При использовании `importMode: 'dynamic'`, если на одной странице 100 компонентов используют `useIntlayer`, браузер попытается выполнить 100 отдельных запросов. Чтобы избежать такой "водопадной" загрузки, группируйте контент в меньшее количество файлов `.content` (например, один словарь на секцию страницы), а не по одному на каждый атомарный компонент.
167
+
168
+ > В настоящее время `importMode: 'dynamic'` не полностью поддерживается для Vue и Svelte. Рекомендуется использовать `importMode: 'static'` для этих фреймворков до выхода дальнейших обновлений.
169
+
170
+ ### 3. Live Mode
171
+
172
+ Ведет себя аналогично динамическому режиму, но сначала пытается получить словари через Intlayer Live Sync API. Если вызов API не удался или контент не помечен для живых обновлений, происходит возврат к динамическому импорту.
173
+
174
+ > Подробнее смотрите в документации CMS: [CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ru/intlayer_CMS.md)
175
+
176
+ ## Сводка: Статический vs Динамический
177
+
178
+ | Особенность | Статический режим | Динамический режим |
179
+ | :--------------------- | :----------------------------------------- | :-------------------------------------------------- |
180
+ | **Размер JS-бандла** | Больше (включает все языки для компонента) | Самый маленький (только код, без контента) |
181
+ | **Начальная загрузка** | Мгновенно (контент включен в бандл) | Небольшая задержка (загрузка JSON) |
182
+ | **Сетевые запросы** | 0 дополнительных запросов | 1 запрос на каждый словарь |
183
+ | **Tree Shaking** | На уровне компонента | На уровне компонента + локали |
184
+ | **Лучшее применение** | UI-компоненты, небольшие приложения | Страницы с большим количеством текста, много языков |