@intlayer/docs 8.12.5-canary.0 → 9.0.0-canary.2
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/dist/cjs/generated/docs.entry.cjs +320 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +320 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +16 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/cli/doc-review.md +110 -4
- package/docs/ar/cli/index.md +1 -1
- package/docs/ar/cli/scan.md +1 -1
- package/docs/ar/configuration.md +36 -3
- package/docs/ar/dictionary/condition.md +167 -5
- package/docs/ar/dictionary/enumeration.md +540 -6
- package/docs/ar/dictionary/file.md +151 -1
- package/docs/ar/dictionary/gender.md +168 -7
- package/docs/ar/dictionary/nesting.md +173 -65
- package/docs/ar/dictionary/plurial.md +174 -5
- package/docs/ar/dictionary/translation.md +156 -2
- package/docs/ar/dynamic_dictionaries/collections.md +1 -1
- package/docs/ar/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ar/dynamic_dictionaries/index.md +1 -1
- package/docs/ar/dynamic_dictionaries/variants.md +1 -1
- package/docs/ar/intlayer_with_vite+react.md +31 -31
- package/docs/ar/releases/v8.md +187 -1
- package/docs/ar/releases/v9.md +232 -0
- package/docs/bn/cli/index.md +1 -1
- package/docs/bn/cli/scan.md +1 -1
- package/docs/bn/configuration.md +36 -3
- package/docs/cs/cli/index.md +1 -1
- package/docs/cs/cli/scan.md +1 -1
- package/docs/cs/configuration.md +35 -2
- package/docs/de/cli/doc-review.md +110 -4
- package/docs/de/cli/index.md +1 -1
- package/docs/de/cli/scan.md +1 -1
- package/docs/de/configuration.md +35 -2
- package/docs/de/dictionary/condition.md +167 -5
- package/docs/de/dictionary/enumeration.md +777 -7
- package/docs/de/dictionary/file.md +151 -1
- package/docs/de/dictionary/gender.md +168 -7
- package/docs/de/dictionary/nesting.md +173 -65
- package/docs/de/dictionary/plurial.md +347 -7
- package/docs/de/dictionary/translation.md +156 -2
- package/docs/de/dynamic_dictionaries/collections.md +1 -1
- package/docs/de/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/de/dynamic_dictionaries/index.md +1 -1
- package/docs/de/dynamic_dictionaries/variants.md +1 -1
- package/docs/de/intlayer_with_vite+react.md +48 -48
- package/docs/de/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/de/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/de/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/de/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/de/releases/v8.md +197 -1
- package/docs/de/releases/v9.md +232 -0
- package/docs/en/CI_CD.md +7 -7
- package/docs/en/cli/ci.md +62 -8
- package/docs/en/cli/doc-review.md +110 -4
- package/docs/en/cli/index.md +1 -1
- package/docs/en/cli/scan.md +1 -1
- package/docs/en/compat/i18n-js.md +44 -0
- package/docs/en/compat/i18next.md +59 -0
- package/docs/en/compat/index.md +51 -0
- package/docs/en/compat/lingui.md +44 -0
- package/docs/en/compat/next-i18next.md +57 -0
- package/docs/en/compat/next-intl.md +59 -0
- package/docs/en/compat/next-translate.md +45 -0
- package/docs/en/compat/ngx-translate.md +45 -0
- package/docs/en/compat/nuxtjs-i18n.md +46 -0
- package/docs/en/compat/polyglot.md +45 -0
- package/docs/en/compat/react-i18next.md +58 -0
- package/docs/en/compat/react-intl.md +55 -0
- package/docs/en/compat/svelte-i18n.md +47 -0
- package/docs/en/compat/transloco.md +45 -0
- package/docs/en/compat/vue-i18n.md +58 -0
- package/docs/en/configuration.md +35 -2
- package/docs/en/dictionary/condition.md +163 -1
- package/docs/en/dictionary/enumeration.md +309 -7
- package/docs/en/dictionary/file.md +151 -1
- package/docs/en/dictionary/gender.md +162 -1
- package/docs/en/dictionary/nesting.md +173 -9
- package/docs/en/dictionary/plurial.md +155 -10
- package/docs/en/dictionary/translation.md +145 -52
- package/docs/en/dynamic_dictionaries/collections.md +1 -1
- package/docs/en/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/en/dynamic_dictionaries/index.md +1 -1
- package/docs/en/dynamic_dictionaries/variants.md +1 -1
- package/docs/en/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/en/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/en/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/en/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/en/releases/v8.md +187 -1
- package/docs/en/releases/v9.md +220 -0
- package/docs/en-GB/cli/doc-review.md +110 -4
- package/docs/en-GB/cli/index.md +1 -1
- package/docs/en-GB/cli/scan.md +1 -1
- package/docs/en-GB/configuration.md +35 -2
- package/docs/en-GB/dictionary/condition.md +364 -1
- package/docs/en-GB/dictionary/enumeration.md +577 -5
- package/docs/en-GB/dictionary/file.md +317 -1
- package/docs/en-GB/dictionary/gender.md +375 -2
- package/docs/en-GB/dictionary/nesting.md +368 -71
- package/docs/en-GB/dictionary/plurial.md +347 -7
- package/docs/en-GB/dictionary/translation.md +320 -32
- package/docs/en-GB/dynamic_dictionaries/collections.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/index.md +1 -1
- package/docs/en-GB/dynamic_dictionaries/variants.md +1 -1
- package/docs/en-GB/releases/v8.md +1 -1
- package/docs/en-GB/releases/v9.md +220 -0
- package/docs/es/cli/doc-review.md +110 -4
- package/docs/es/cli/index.md +1 -1
- package/docs/es/cli/scan.md +1 -1
- package/docs/es/configuration.md +36 -3
- package/docs/es/dictionary/condition.md +167 -5
- package/docs/es/dictionary/enumeration.md +537 -12
- package/docs/es/dictionary/file.md +151 -1
- package/docs/es/dictionary/gender.md +168 -7
- package/docs/es/dictionary/nesting.md +173 -65
- package/docs/es/dictionary/plurial.md +347 -7
- package/docs/es/dictionary/translation.md +156 -2
- package/docs/es/dynamic_dictionaries/collections.md +1 -1
- package/docs/es/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/es/dynamic_dictionaries/index.md +1 -1
- package/docs/es/dynamic_dictionaries/variants.md +1 -1
- package/docs/es/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/es/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/es/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/es/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/es/releases/v8.md +187 -1
- package/docs/es/releases/v9.md +228 -0
- package/docs/fr/cli/doc-review.md +110 -4
- package/docs/fr/cli/index.md +1 -1
- package/docs/fr/cli/scan.md +1 -1
- package/docs/fr/configuration.md +49 -16
- package/docs/fr/dictionary/condition.md +369 -6
- package/docs/fr/dictionary/enumeration.md +540 -6
- package/docs/fr/dictionary/file.md +151 -1
- package/docs/fr/dictionary/gender.md +168 -7
- package/docs/fr/dictionary/nesting.md +357 -86
- package/docs/fr/dictionary/plurial.md +174 -5
- package/docs/fr/dictionary/translation.md +156 -2
- package/docs/fr/dynamic_dictionaries/collections.md +1 -1
- package/docs/fr/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/fr/dynamic_dictionaries/index.md +1 -1
- package/docs/fr/dynamic_dictionaries/variants.md +1 -1
- package/docs/fr/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/fr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/fr/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/fr/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/fr/releases/v8.md +187 -1
- package/docs/fr/releases/v9.md +220 -0
- package/docs/hi/cli/doc-review.md +110 -4
- package/docs/hi/cli/index.md +1 -1
- package/docs/hi/cli/scan.md +1 -1
- package/docs/hi/configuration.md +49 -16
- package/docs/hi/dictionary/condition.md +167 -5
- package/docs/hi/dictionary/enumeration.md +540 -6
- package/docs/hi/dictionary/file.md +151 -1
- package/docs/hi/dictionary/gender.md +168 -7
- package/docs/hi/dictionary/nesting.md +173 -65
- package/docs/hi/dictionary/plurial.md +174 -5
- package/docs/hi/dictionary/translation.md +155 -5
- package/docs/hi/dynamic_dictionaries/collections.md +1 -1
- package/docs/hi/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/hi/dynamic_dictionaries/index.md +1 -1
- package/docs/hi/dynamic_dictionaries/variants.md +1 -1
- package/docs/hi/releases/v8.md +188 -2
- package/docs/hi/releases/v9.md +232 -0
- package/docs/id/cli/doc-review.md +110 -4
- package/docs/id/cli/index.md +1 -1
- package/docs/id/cli/scan.md +1 -1
- package/docs/id/configuration.md +35 -2
- package/docs/id/dictionary/condition.md +167 -5
- package/docs/id/dictionary/enumeration.md +540 -6
- package/docs/id/dictionary/file.md +318 -2
- package/docs/id/dictionary/gender.md +381 -8
- package/docs/id/dictionary/nesting.md +357 -86
- package/docs/id/dictionary/plurial.md +174 -5
- package/docs/id/dictionary/translation.md +156 -2
- package/docs/id/dynamic_dictionaries/collections.md +1 -1
- package/docs/id/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/id/dynamic_dictionaries/index.md +1 -1
- package/docs/id/dynamic_dictionaries/variants.md +1 -1
- package/docs/id/releases/v8.md +191 -2
- package/docs/id/releases/v9.md +232 -0
- package/docs/it/cli/doc-review.md +110 -4
- package/docs/it/cli/index.md +1 -1
- package/docs/it/cli/scan.md +1 -1
- package/docs/it/configuration.md +49 -16
- package/docs/it/dictionary/condition.md +167 -5
- package/docs/it/dictionary/enumeration.md +540 -6
- package/docs/it/dictionary/file.md +318 -2
- package/docs/it/dictionary/gender.md +168 -7
- package/docs/it/dictionary/nesting.md +173 -65
- package/docs/it/dictionary/plurial.md +347 -7
- package/docs/it/dictionary/translation.md +156 -2
- package/docs/it/dynamic_dictionaries/collections.md +1 -1
- package/docs/it/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/it/dynamic_dictionaries/index.md +1 -1
- package/docs/it/dynamic_dictionaries/variants.md +1 -1
- package/docs/it/intlayer_with_vite+react.md +0 -48
- package/docs/it/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/it/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/it/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/it/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/it/releases/v8.md +200 -2
- package/docs/it/releases/v9.md +232 -0
- package/docs/ja/cli/doc-review.md +110 -4
- package/docs/ja/cli/index.md +1 -1
- package/docs/ja/cli/scan.md +1 -1
- package/docs/ja/configuration.md +50 -17
- package/docs/ja/dictionary/condition.md +167 -5
- package/docs/ja/dictionary/enumeration.md +540 -6
- package/docs/ja/dictionary/file.md +151 -1
- package/docs/ja/dictionary/gender.md +168 -7
- package/docs/ja/dictionary/nesting.md +173 -65
- package/docs/ja/dictionary/plurial.md +174 -5
- package/docs/ja/dictionary/translation.md +169 -8
- package/docs/ja/dynamic_dictionaries/collections.md +1 -1
- package/docs/ja/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ja/dynamic_dictionaries/index.md +1 -1
- package/docs/ja/dynamic_dictionaries/variants.md +1 -1
- package/docs/ja/intlayer_with_vite+react.md +290 -0
- package/docs/ja/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ja/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ja/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ja/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ja/releases/v8.md +193 -4
- package/docs/ja/releases/v9.md +232 -0
- package/docs/ko/cli/doc-review.md +110 -4
- package/docs/ko/cli/index.md +1 -1
- package/docs/ko/cli/scan.md +1 -1
- package/docs/ko/configuration.md +49 -16
- package/docs/ko/dictionary/condition.md +167 -5
- package/docs/ko/dictionary/enumeration.md +540 -6
- package/docs/ko/dictionary/file.md +151 -1
- package/docs/ko/dictionary/gender.md +168 -7
- package/docs/ko/dictionary/nesting.md +173 -65
- package/docs/ko/dictionary/plurial.md +174 -5
- package/docs/ko/dictionary/translation.md +169 -8
- package/docs/ko/dynamic_dictionaries/collections.md +1 -1
- package/docs/ko/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ko/dynamic_dictionaries/index.md +1 -1
- package/docs/ko/dynamic_dictionaries/variants.md +1 -1
- package/docs/ko/intlayer_with_vite+react.md +48 -490
- package/docs/ko/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ko/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ko/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ko/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ko/releases/v8.md +192 -1
- package/docs/ko/releases/v9.md +232 -0
- package/docs/nl/cli/index.md +1 -1
- package/docs/nl/cli/scan.md +1 -1
- package/docs/nl/configuration.md +36 -3
- package/docs/pl/cli/doc-review.md +110 -4
- package/docs/pl/cli/index.md +1 -1
- package/docs/pl/cli/scan.md +1 -1
- package/docs/pl/configuration.md +35 -2
- package/docs/pl/dictionary/condition.md +167 -5
- package/docs/pl/dictionary/enumeration.md +540 -6
- package/docs/pl/dictionary/file.md +318 -2
- package/docs/pl/dictionary/gender.md +168 -7
- package/docs/pl/dictionary/nesting.md +173 -65
- package/docs/pl/dictionary/plurial.md +174 -5
- package/docs/pl/dictionary/translation.md +156 -2
- package/docs/pl/dynamic_dictionaries/collections.md +1 -1
- package/docs/pl/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/pl/dynamic_dictionaries/index.md +1 -1
- package/docs/pl/dynamic_dictionaries/variants.md +1 -1
- package/docs/pl/releases/v8.md +188 -2
- package/docs/pl/releases/v9.md +232 -0
- package/docs/pt/cli/doc-review.md +110 -4
- package/docs/pt/cli/index.md +1 -1
- package/docs/pt/cli/scan.md +1 -1
- package/docs/pt/configuration.md +49 -16
- package/docs/pt/dictionary/condition.md +167 -5
- package/docs/pt/dictionary/enumeration.md +540 -6
- package/docs/pt/dictionary/file.md +151 -1
- package/docs/pt/dictionary/gender.md +168 -7
- package/docs/pt/dictionary/nesting.md +173 -65
- package/docs/pt/dictionary/plurial.md +347 -7
- package/docs/pt/dictionary/translation.md +156 -2
- package/docs/pt/dynamic_dictionaries/collections.md +1 -1
- package/docs/pt/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/pt/dynamic_dictionaries/index.md +1 -1
- package/docs/pt/dynamic_dictionaries/variants.md +1 -1
- package/docs/pt/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/pt/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/pt/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/pt/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/pt/releases/v8.md +187 -1
- package/docs/pt/releases/v9.md +232 -0
- package/docs/ru/cli/doc-review.md +110 -4
- package/docs/ru/cli/index.md +1 -1
- package/docs/ru/cli/scan.md +1 -1
- package/docs/ru/configuration.md +35 -2
- package/docs/ru/dictionary/condition.md +366 -39
- package/docs/ru/dictionary/enumeration.md +777 -7
- package/docs/ru/dictionary/file.md +318 -2
- package/docs/ru/dictionary/gender.md +168 -7
- package/docs/ru/dictionary/nesting.md +368 -71
- package/docs/ru/dictionary/plurial.md +347 -7
- package/docs/ru/dictionary/translation.md +321 -33
- package/docs/ru/dynamic_dictionaries/collections.md +1 -1
- package/docs/ru/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/ru/dynamic_dictionaries/index.md +1 -1
- package/docs/ru/dynamic_dictionaries/variants.md +1 -1
- package/docs/ru/intlayer_with_vite+react.md +48 -47
- package/docs/ru/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/ru/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/ru/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/ru/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/ru/releases/v8.md +194 -2
- package/docs/ru/releases/v9.md +232 -0
- package/docs/tr/cli/doc-review.md +110 -4
- package/docs/tr/cli/index.md +1 -1
- package/docs/tr/cli/scan.md +1 -1
- package/docs/tr/configuration.md +35 -2
- package/docs/tr/dictionary/condition.md +167 -5
- package/docs/tr/dictionary/enumeration.md +540 -6
- package/docs/tr/dictionary/file.md +151 -1
- package/docs/tr/dictionary/gender.md +168 -7
- package/docs/tr/dictionary/nesting.md +173 -65
- package/docs/tr/dictionary/plurial.md +174 -5
- package/docs/tr/dictionary/translation.md +156 -2
- package/docs/tr/dynamic_dictionaries/collections.md +1 -1
- package/docs/tr/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/tr/dynamic_dictionaries/index.md +1 -1
- package/docs/tr/dynamic_dictionaries/variants.md +1 -1
- package/docs/tr/migration_from_i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_next-i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_next-intl_to_intlayer.md +1 -1
- package/docs/tr/migration_from_nuxtjs_i18n_to_intlayer.md +1 -1
- package/docs/tr/migration_from_react-i18next_to_intlayer.md +1 -1
- package/docs/tr/migration_from_vue-i18n_to_intlayer.md +1 -1
- package/docs/tr/releases/v8.md +187 -1
- package/docs/tr/releases/v9.md +232 -0
- package/docs/uk/cli/doc-review.md +110 -4
- package/docs/uk/cli/index.md +1 -1
- package/docs/uk/cli/scan.md +1 -1
- package/docs/uk/configuration.md +35 -2
- package/docs/uk/dictionary/condition.md +167 -5
- package/docs/uk/dictionary/enumeration.md +540 -6
- package/docs/uk/dictionary/file.md +318 -2
- package/docs/uk/dictionary/gender.md +381 -8
- package/docs/uk/dictionary/nesting.md +173 -65
- package/docs/uk/dictionary/plurial.md +174 -5
- package/docs/uk/dictionary/translation.md +156 -2
- package/docs/uk/dynamic_dictionaries/collections.md +1 -1
- package/docs/uk/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/uk/dynamic_dictionaries/index.md +1 -1
- package/docs/uk/dynamic_dictionaries/variants.md +1 -1
- package/docs/uk/releases/v8.md +191 -3
- package/docs/uk/releases/v9.md +232 -0
- package/docs/ur/cli/index.md +1 -1
- package/docs/ur/cli/scan.md +1 -1
- package/docs/ur/configuration.md +36 -3
- package/docs/vi/cli/doc-review.md +110 -4
- package/docs/vi/cli/index.md +1 -1
- package/docs/vi/cli/scan.md +1 -1
- package/docs/vi/configuration.md +50 -17
- package/docs/vi/dictionary/condition.md +167 -5
- package/docs/vi/dictionary/enumeration.md +591 -14
- package/docs/vi/dictionary/file.md +318 -2
- package/docs/vi/dictionary/gender.md +168 -7
- package/docs/vi/dictionary/nesting.md +357 -86
- package/docs/vi/dictionary/plurial.md +174 -5
- package/docs/vi/dictionary/translation.md +156 -2
- package/docs/vi/dynamic_dictionaries/collections.md +1 -1
- package/docs/vi/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/vi/dynamic_dictionaries/index.md +1 -1
- package/docs/vi/dynamic_dictionaries/variants.md +1 -1
- package/docs/vi/releases/v8.md +190 -1
- package/docs/vi/releases/v9.md +232 -0
- package/docs/zh/cli/doc-review.md +110 -4
- package/docs/zh/cli/index.md +1 -1
- package/docs/zh/cli/scan.md +1 -1
- package/docs/zh/configuration.md +49 -16
- package/docs/zh/dictionary/condition.md +167 -5
- package/docs/zh/dictionary/enumeration.md +540 -6
- package/docs/zh/dictionary/file.md +151 -1
- package/docs/zh/dictionary/gender.md +168 -7
- package/docs/zh/dictionary/nesting.md +173 -65
- package/docs/zh/dictionary/plurial.md +174 -5
- package/docs/zh/dictionary/translation.md +169 -8
- package/docs/zh/dynamic_dictionaries/collections.md +1 -1
- package/docs/zh/dynamic_dictionaries/dynamic_content.md +1 -1
- package/docs/zh/dynamic_dictionaries/index.md +1 -1
- package/docs/zh/dynamic_dictionaries/variants.md +1 -1
- package/docs/zh/intlayer_with_vite+react.md +48 -288
- package/docs/zh/releases/v8.md +1 -1
- package/docs/zh/releases/v9.md +220 -0
- package/package.json +7 -7
- package/src/generated/docs.entry.ts +320 -0
- package/dist/esm/_virtual/_rolldown/runtime.mjs +0 -8
|
@@ -27,46 +27,180 @@ author: aymericzip
|
|
|
27
27
|
|
|
28
28
|
## Defining Translations
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
<Tabs group="framework">
|
|
31
|
+
<Tab label="React" value="react">
|
|
31
32
|
|
|
32
|
-
|
|
33
|
+
With `react-intlayer`, you can use translations in React components. Here's an example:
|
|
33
34
|
|
|
34
|
-
```
|
|
35
|
-
import {
|
|
35
|
+
```jsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
36
|
+
import type { FC } from "react";
|
|
37
|
+
import { useIntlayer } from "react-intlayer";
|
|
36
38
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
39
|
+
const MyComponent: FC = () => {
|
|
40
|
+
const content = useIntlayer("multi_lang");
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
},
|
|
50
|
-
} satisfies Dictionary<Content>;
|
|
42
|
+
return (
|
|
43
|
+
<div>
|
|
44
|
+
<p>{content.welcomeMessage}</p>
|
|
45
|
+
</div>
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default MyComponent;
|
|
51
50
|
```
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
"
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
52
|
+
This component fetches the corresponding translation based on the current locale set in your application.
|
|
53
|
+
|
|
54
|
+
</Tab>
|
|
55
|
+
<Tab label="Next.js" value="nextjs">
|
|
56
|
+
|
|
57
|
+
With `next-intlayer`, you can use translations in React Server Components or Client Components. Here's an example in a Client Component:
|
|
58
|
+
|
|
59
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
60
|
+
"use client";
|
|
61
|
+
|
|
62
|
+
import type { FC } from "react";
|
|
63
|
+
import { useIntlayer } from "next-intlayer";
|
|
64
|
+
|
|
65
|
+
const MyComponent: FC = () => {
|
|
66
|
+
const content = useIntlayer("multi_lang");
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<div>
|
|
70
|
+
<p>{content.welcomeMessage}</p>
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default MyComponent;
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
</Tab>
|
|
79
|
+
<Tab label="Vue" value="vue">
|
|
80
|
+
|
|
81
|
+
With `vue-intlayer`, you can use translations in Vue components. Here's an example:
|
|
82
|
+
|
|
83
|
+
```vue fileName="**/*.vue"
|
|
84
|
+
<script setup lang="ts">
|
|
85
|
+
import { useIntlayer } from "vue-intlayer";
|
|
86
|
+
|
|
87
|
+
const content = useIntlayer("multi_lang");
|
|
88
|
+
</script>
|
|
89
|
+
|
|
90
|
+
<template>
|
|
91
|
+
<div>
|
|
92
|
+
<p>{{ content.welcomeMessage }}</p>
|
|
93
|
+
</div>
|
|
94
|
+
</template>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
</Tab>
|
|
98
|
+
<Tab label="Svelte" value="svelte">
|
|
99
|
+
|
|
100
|
+
With `svelte-intlayer`, you can use translations in Svelte components. The hook returns a Svelte store. Here's an example:
|
|
101
|
+
|
|
102
|
+
```svelte fileName="**/*.svelte"
|
|
103
|
+
<script lang="ts">
|
|
104
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
105
|
+
|
|
106
|
+
const content = useIntlayer("multi_lang");
|
|
107
|
+
</script>
|
|
108
|
+
|
|
109
|
+
<div>
|
|
110
|
+
<p>{$content.welcomeMessage}</p>
|
|
111
|
+
</div>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
</Tab>
|
|
115
|
+
<Tab label="Preact" value="preact">
|
|
116
|
+
|
|
117
|
+
With `preact-intlayer`, you can use translations in Preact components. Here's an example:
|
|
118
|
+
|
|
119
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
120
|
+
import type { FC } from "preact";
|
|
121
|
+
import { useIntlayer } from "preact-intlayer";
|
|
122
|
+
|
|
123
|
+
const MyComponent: FC = () => {
|
|
124
|
+
const content = useIntlayer("multi_lang");
|
|
125
|
+
|
|
126
|
+
return (
|
|
127
|
+
<div>
|
|
128
|
+
<p>{content.welcomeMessage}</p>
|
|
129
|
+
</div>
|
|
130
|
+
);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
export default MyComponent;
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
</Tab>
|
|
137
|
+
<Tab label="Solid" value="solid">
|
|
138
|
+
|
|
139
|
+
With `solid-intlayer`, you can use translations in SolidJS components. Here's an example:
|
|
140
|
+
|
|
141
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
142
|
+
import type { Component } from "solid-js";
|
|
143
|
+
import { useIntlayer } from "solid-intlayer";
|
|
144
|
+
|
|
145
|
+
const MyComponent: Component = () => {
|
|
146
|
+
const content = useIntlayer("multi_lang");
|
|
147
|
+
|
|
148
|
+
return (
|
|
149
|
+
<div>
|
|
150
|
+
<p>{content.welcomeMessage}</p>
|
|
151
|
+
</div>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export default MyComponent;
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
</Tab>
|
|
159
|
+
<Tab label="Angular" value="angular">
|
|
160
|
+
|
|
161
|
+
With `angular-intlayer`, you can use translations in Angular components. Here's an example:
|
|
162
|
+
|
|
163
|
+
```typescript fileName="app.component.ts" codeFormat="typescript"
|
|
164
|
+
import { Component } from "@angular/core";
|
|
165
|
+
import { useIntlayer } from "angular-intlayer";
|
|
166
|
+
|
|
167
|
+
@Component({
|
|
168
|
+
selector: "app-my-component",
|
|
169
|
+
template: `
|
|
170
|
+
<div>
|
|
171
|
+
<p>{{ content().welcomeMessage }}</p>
|
|
172
|
+
</div>
|
|
173
|
+
`,
|
|
174
|
+
})
|
|
175
|
+
export class MyComponent {
|
|
176
|
+
content = useIntlayer("multi_lang");
|
|
67
177
|
}
|
|
68
178
|
```
|
|
69
179
|
|
|
180
|
+
</Tab>
|
|
181
|
+
<Tab label="Vanilla JS" value="vanilla">
|
|
182
|
+
|
|
183
|
+
With `vanilla-intlayer`, you can use translations by subscribing to content changes. Here's an example:
|
|
184
|
+
|
|
185
|
+
```typescript fileName="**/*.ts" codeFormat={["typescript", "esm"]}
|
|
186
|
+
import { installIntlayer, useIntlayer } from "vanilla-intlayer";
|
|
187
|
+
|
|
188
|
+
installIntlayer();
|
|
189
|
+
|
|
190
|
+
const content = useIntlayer("multi_lang").onChange((newContent) => {
|
|
191
|
+
document.getElementById("welcome-message")!.textContent = String(
|
|
192
|
+
newContent.welcomeMessage
|
|
193
|
+
);
|
|
194
|
+
});
|
|
195
|
+
|
|
196
|
+
// Initial render
|
|
197
|
+
document.getElementById("welcome-message")!.textContent = String(
|
|
198
|
+
content.welcomeMessage
|
|
199
|
+
);
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
</Tab>
|
|
203
|
+
</Tabs>
|
|
70
204
|
## Configuration for Locales
|
|
71
205
|
|
|
72
206
|
To ensure proper translation handling, you can configure the accepted locales in `intlayer.config.ts`. This configuration allows you to define the languages that your application supports:
|
|
@@ -85,7 +219,10 @@ export default config;
|
|
|
85
219
|
|
|
86
220
|
## Using Translations in React Components
|
|
87
221
|
|
|
88
|
-
|
|
222
|
+
<Tabs group="framework">
|
|
223
|
+
<Tab label="React" value="react">
|
|
224
|
+
|
|
225
|
+
With `react-intlayer`, you can use translations in React components. Here's an example:
|
|
89
226
|
|
|
90
227
|
```jsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
91
228
|
import type { FC } from "react";
|
|
@@ -106,6 +243,157 @@ export default MyComponent;
|
|
|
106
243
|
|
|
107
244
|
This component fetches the corresponding translation based on the current locale set in your application.
|
|
108
245
|
|
|
246
|
+
</Tab>
|
|
247
|
+
<Tab label="Next.js" value="nextjs">
|
|
248
|
+
|
|
249
|
+
With `next-intlayer`, you can use translations in React Server Components or Client Components. Here's an example in a Client Component:
|
|
250
|
+
|
|
251
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
252
|
+
"use client";
|
|
253
|
+
|
|
254
|
+
import type { FC } from "react";
|
|
255
|
+
import { useIntlayer } from "next-intlayer";
|
|
256
|
+
|
|
257
|
+
const MyComponent: FC = () => {
|
|
258
|
+
const content = useIntlayer("multi_lang");
|
|
259
|
+
|
|
260
|
+
return (
|
|
261
|
+
<div>
|
|
262
|
+
<p>{content.welcomeMessage}</p>
|
|
263
|
+
</div>
|
|
264
|
+
);
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
export default MyComponent;
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
</Tab>
|
|
271
|
+
<Tab label="Vue" value="vue">
|
|
272
|
+
|
|
273
|
+
With `vue-intlayer`, you can use translations in Vue components. Here's an example:
|
|
274
|
+
|
|
275
|
+
```vue fileName="**/*.vue"
|
|
276
|
+
<script setup lang="ts">
|
|
277
|
+
import { useIntlayer } from "vue-intlayer";
|
|
278
|
+
|
|
279
|
+
const content = useIntlayer("multi_lang");
|
|
280
|
+
</script>
|
|
281
|
+
|
|
282
|
+
<template>
|
|
283
|
+
<div>
|
|
284
|
+
<p>{{ content.welcomeMessage }}</p>
|
|
285
|
+
</div>
|
|
286
|
+
</template>
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
</Tab>
|
|
290
|
+
<Tab label="Svelte" value="svelte">
|
|
291
|
+
|
|
292
|
+
With `svelte-intlayer`, you can use translations in Svelte components. The hook returns a Svelte store. Here's an example:
|
|
293
|
+
|
|
294
|
+
```svelte fileName="**/*.svelte"
|
|
295
|
+
<script lang="ts">
|
|
296
|
+
import { useIntlayer } from "svelte-intlayer";
|
|
297
|
+
|
|
298
|
+
const content = useIntlayer("multi_lang");
|
|
299
|
+
</script>
|
|
300
|
+
|
|
301
|
+
<div>
|
|
302
|
+
<p>{$content.welcomeMessage}</p>
|
|
303
|
+
</div>
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
</Tab>
|
|
307
|
+
<Tab label="Preact" value="preact">
|
|
308
|
+
|
|
309
|
+
With `preact-intlayer`, you can use translations in Preact components. Here's an example:
|
|
310
|
+
|
|
311
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
312
|
+
import type { FC } from "preact";
|
|
313
|
+
import { useIntlayer } from "preact-intlayer";
|
|
314
|
+
|
|
315
|
+
const MyComponent: FC = () => {
|
|
316
|
+
const content = useIntlayer("multi_lang");
|
|
317
|
+
|
|
318
|
+
return (
|
|
319
|
+
<div>
|
|
320
|
+
<p>{content.welcomeMessage}</p>
|
|
321
|
+
</div>
|
|
322
|
+
);
|
|
323
|
+
};
|
|
324
|
+
|
|
325
|
+
export default MyComponent;
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
</Tab>
|
|
329
|
+
<Tab label="Solid" value="solid">
|
|
330
|
+
|
|
331
|
+
With `solid-intlayer`, you can use translations in SolidJS components. Here's an example:
|
|
332
|
+
|
|
333
|
+
```tsx fileName="**/*.tsx" codeFormat={["typescript", "esm"]}
|
|
334
|
+
import type { Component } from "solid-js";
|
|
335
|
+
import { useIntlayer } from "solid-intlayer";
|
|
336
|
+
|
|
337
|
+
const MyComponent: Component = () => {
|
|
338
|
+
const content = useIntlayer("multi_lang");
|
|
339
|
+
|
|
340
|
+
return (
|
|
341
|
+
<div>
|
|
342
|
+
<p>{content.welcomeMessage}</p>
|
|
343
|
+
</div>
|
|
344
|
+
);
|
|
345
|
+
};
|
|
346
|
+
|
|
347
|
+
export default MyComponent;
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
</Tab>
|
|
351
|
+
<Tab label="Angular" value="angular">
|
|
352
|
+
|
|
353
|
+
With `angular-intlayer`, you can use translations in Angular components. Here's an example:
|
|
354
|
+
|
|
355
|
+
```typescript fileName="app.component.ts" codeFormat="typescript"
|
|
356
|
+
import { Component } from "@angular/core";
|
|
357
|
+
import { useIntlayer } from "angular-intlayer";
|
|
358
|
+
|
|
359
|
+
@Component({
|
|
360
|
+
selector: "app-my-component",
|
|
361
|
+
template: `
|
|
362
|
+
<div>
|
|
363
|
+
<p>{{ content().welcomeMessage }}</p>
|
|
364
|
+
</div>
|
|
365
|
+
`,
|
|
366
|
+
})
|
|
367
|
+
export class MyComponent {
|
|
368
|
+
content = useIntlayer("multi_lang");
|
|
369
|
+
}
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
</Tab>
|
|
373
|
+
<Tab label="Vanilla JS" value="vanilla">
|
|
374
|
+
|
|
375
|
+
With `vanilla-intlayer`, you can use translations by subscribing to content changes. Here's an example:
|
|
376
|
+
|
|
377
|
+
```typescript fileName="**/*.ts" codeFormat={["typescript", "esm"]}
|
|
378
|
+
import { installIntlayer, useIntlayer } from "vanilla-intlayer";
|
|
379
|
+
|
|
380
|
+
installIntlayer();
|
|
381
|
+
|
|
382
|
+
const content = useIntlayer("multi_lang").onChange((newContent) => {
|
|
383
|
+
document.getElementById("welcome-message")!.textContent = String(
|
|
384
|
+
newContent.welcomeMessage
|
|
385
|
+
);
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
// Initial render
|
|
389
|
+
document.getElementById("welcome-message")!.textContent = String(
|
|
390
|
+
content.welcomeMessage
|
|
391
|
+
);
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
</Tab>
|
|
395
|
+
</Tabs>
|
|
396
|
+
|
|
109
397
|
## Custom Content Objects
|
|
110
398
|
|
|
111
399
|
`intlayer` supports custom content objects for translation, allowing you to define more complex structures while ensuring type safety. Here's an example with a custom object:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-22
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
4
|
title: New Intlayer v8 - What's new?
|
|
5
5
|
description: Discover what's new in Intlayer v8. Major improvements in developer experience, content validation, and dictionary management.
|
|
6
6
|
keywords:
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-14
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
|
+
title: New Intlayer v9 - What's new?
|
|
5
|
+
description: Discover what's new in Intlayer v9. Introducing drop-in compatibility packages for popular i18n libraries and support for Collections, Variants, and Dynamic Records.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Compatibility
|
|
9
|
+
- Migration
|
|
10
|
+
- Collections
|
|
11
|
+
- Variants
|
|
12
|
+
- Dynamic Records
|
|
13
|
+
- i18next
|
|
14
|
+
- next-intl
|
|
15
|
+
- vue-i18n
|
|
16
|
+
slugs:
|
|
17
|
+
- doc
|
|
18
|
+
- releases
|
|
19
|
+
- v9
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# New Intlayer v9 - What's new?
|
|
24
|
+
|
|
25
|
+
Welcome to Intlayer v9! This major release marks a huge milestone in simplifying the migration path to Intlayer with **Compat Adapter Packages** for major i18n libraries (`react-i18next`, `next-intl`, `vue-i18n`, etc.) and adds support for rich content structures: **Collections**, **Variants**, and **Dynamic Records**.
|
|
26
|
+
|
|
27
|
+
## Table of contents
|
|
28
|
+
|
|
29
|
+
<TOC levels={[2]} maxDepth={1} />
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Compat Adapter Packages
|
|
34
|
+
|
|
35
|
+
Migrating to Intlayer from popular i18n libraries is now easier than ever. We have created five compat packages that expose the **exact same public APIs** as standard i18n libraries but delegate all translation work to Intlayer at runtime.
|
|
36
|
+
|
|
37
|
+
### Expose Same Public API with Strict Typing
|
|
38
|
+
|
|
39
|
+
By replacing imports, you get all the benefits of Intlayer (including compile-time type safety against your actual dictionaries) with minimal code changes:
|
|
40
|
+
|
|
41
|
+
- `@intlayer/i18next`
|
|
42
|
+
- `@intlayer/react-i18next`
|
|
43
|
+
- `@intlayer/next-intl`
|
|
44
|
+
- `@intlayer/next-i18next`
|
|
45
|
+
- `@intlayer/vue-i18n`
|
|
46
|
+
|
|
47
|
+
For example, simply change:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { useTranslation } from "react-i18next";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
to:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Your keys will now be **strictly typed** against your Intlayer dictionaries, offering full dot-path auto-completion in your IDE!
|
|
60
|
+
|
|
61
|
+
### Bundler Alias Plugins (Vite, Next.js, Turbopack)
|
|
62
|
+
|
|
63
|
+
To allow migrating without rewriting all your import statements manually, each compat adapter package includes a **custom bundler plugin** (Vite or Next.js) under the `/plugin` subpath.
|
|
64
|
+
|
|
65
|
+
These plugins automatically rewrite existing imports (e.g. `react-i18next` or `next-intl`) to their `@intlayer/*` equivalents at build time.
|
|
66
|
+
|
|
67
|
+
#### Next.js (Webpack / Turbopack) Example
|
|
68
|
+
|
|
69
|
+
Instead of `withIntlayer`, wrap your Next.js configuration with the compat plugin:
|
|
70
|
+
|
|
71
|
+
```ts fileName="next.config.ts"
|
|
72
|
+
import { createNextI18nPlugin } from "@intlayer/next-i18next/plugin";
|
|
73
|
+
import type { NextConfig } from "next";
|
|
74
|
+
|
|
75
|
+
const withIntlayer = createNextI18nPlugin();
|
|
76
|
+
const nextConfig: NextConfig = {};
|
|
77
|
+
|
|
78
|
+
export default withIntlayer(nextConfig);
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### Vite (React, Vue, Solid, Svelte) Example
|
|
82
|
+
|
|
83
|
+
```ts fileName="vite.config.ts"
|
|
84
|
+
import vueI18nVitePlugin from "@intlayer/vue-i18n/plugin";
|
|
85
|
+
|
|
86
|
+
export default defineConfig({
|
|
87
|
+
plugins: [vueI18nVitePlugin()],
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## Mutualized Runtime Resolver
|
|
94
|
+
|
|
95
|
+
All compat adapters now route translation resolution through a single, highly optimised runtime parser: `@intlayer/core/messageFormat`.
|
|
96
|
+
|
|
97
|
+
- **Interpolate Message**: Resolves standard `{{var}}` (whitespace & dot-paths), ICU formatted args (`{v, number, percent}` etc.), and bare `{var}` templates.
|
|
98
|
+
- **Message Node Resolver**: Resolves nested nodes: `insert()`, `plural()` (CLDR plural rules), `enu()` (enumeration), `gender()`, HTML tags, arrays, and callable function nodes.
|
|
99
|
+
- **Tokenised Tag Parser**: Supports inline XML/HTML tags and numbered tags (e.g., `<1>children</1>`) to power rich-text rendering out of the box.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Feature Spec: Collections, Variants & Dynamic Records
|
|
104
|
+
|
|
105
|
+
Intlayer v9 expands beyond static key-value objects, allowing dictionaries to declare dynamic layout structures that are fully typed end-to-end.
|
|
106
|
+
|
|
107
|
+
### 1. Collections
|
|
108
|
+
|
|
109
|
+
Define a CMS-managed list of ordered items (e.g. FAQs, products, or blog lists):
|
|
110
|
+
|
|
111
|
+
```ts fileName="faq.content.ts"
|
|
112
|
+
import { t, type Dictionary } from "intlayer";
|
|
113
|
+
|
|
114
|
+
export default {
|
|
115
|
+
key: "faq",
|
|
116
|
+
content: [
|
|
117
|
+
{
|
|
118
|
+
question: t({ en: "What is Intlayer?", fr: "Qu'est-ce qu'Intlayer ?" }),
|
|
119
|
+
answer: t({ en: "An i18n toolkit.", fr: "Une boîte à outils i18n." }),
|
|
120
|
+
},
|
|
121
|
+
],
|
|
122
|
+
} satisfies Dictionary;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
#### Usage:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
// Fetch all items
|
|
129
|
+
const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
|
|
130
|
+
|
|
131
|
+
// Fetch single item by index
|
|
132
|
+
const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### 2. Variants
|
|
136
|
+
|
|
137
|
+
Deliver A/B tests, seasonal headers, feature flags, or custom landing pages:
|
|
138
|
+
|
|
139
|
+
```ts fileName="hero.content.ts"
|
|
140
|
+
import { t, type Dictionary } from "intlayer";
|
|
141
|
+
|
|
142
|
+
export default {
|
|
143
|
+
key: "hero-banner",
|
|
144
|
+
variant: "default",
|
|
145
|
+
content: {
|
|
146
|
+
control: t({ en: "Welcome", fr: "Bienvenue" }),
|
|
147
|
+
black_friday: t({ en: "Shop now", fr: "Acheter maintenant" }),
|
|
148
|
+
},
|
|
149
|
+
} satisfies Dictionary;
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
#### Usage:
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
const banner = useIntlayer("hero-banner", { variant: "black_friday" });
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 3. Dynamic Records
|
|
159
|
+
|
|
160
|
+
Define dictionaries whose entries are loaded dynamically at runtime via query IDs:
|
|
161
|
+
|
|
162
|
+
```ts fileName="product.content.ts"
|
|
163
|
+
import { t, type Dictionary } from "intlayer";
|
|
164
|
+
|
|
165
|
+
export default {
|
|
166
|
+
key: "product-copy",
|
|
167
|
+
meta: {
|
|
168
|
+
id: "prod_123",
|
|
169
|
+
category: "books",
|
|
170
|
+
},
|
|
171
|
+
content: {
|
|
172
|
+
title: t({ en: "Clean Code", fr: "Code Propre" }),
|
|
173
|
+
},
|
|
174
|
+
} satisfies Dictionary;
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
#### Usage:
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
// Fetches only the requested item dynamically (requires Suspense)
|
|
181
|
+
const product = useIntlayer("product-copy", {
|
|
182
|
+
id: "prod_123",
|
|
183
|
+
category: "books",
|
|
184
|
+
});
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Dynamic Loading & Bundle Size Optimisations
|
|
190
|
+
|
|
191
|
+
To keep bundles extremely small, Intlayer v9 supports dynamic lazy loading.
|
|
192
|
+
|
|
193
|
+
In your configuration, set `importMode` to `'dynamic'` or `'fetch'`:
|
|
194
|
+
|
|
195
|
+
```ts fileName="intlayer.config.ts"
|
|
196
|
+
export default {
|
|
197
|
+
dictionary: {
|
|
198
|
+
importMode: "dynamic", // "static" | "dynamic" | "fetch"
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
At build time, `@intlayer/swc` and `@intlayer/babel` scan your files and replace `useIntlayer` / `getIntlayer` calls with tree-shakeable wrappers (`useDictionary` / `useDictionaryDynamic`). Only the content required for the selected collection item, variant, or locale is loaded, preventing your production bundle from containing unused translations.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Migration notes from v8
|
|
208
|
+
|
|
209
|
+
If you are upgrading from v8, note that the v9 does not include breaking changes. But here are the key changes:
|
|
210
|
+
|
|
211
|
+
- **Locales & Dialects**: If using external i18n dependencies, add their respective compat adapter plugins in your configuration or bundler setup to automatically rewrite imports.
|
|
212
|
+
- **Custom Selectors**: When calling `useIntlayer`, the second parameter is now reserved for an option object containing `{ locale, item, variant, id }`. If you previously passed a locale string directly, you can still do so, but using the options object is recommended for advanced selections.
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## Useful links
|
|
217
|
+
|
|
218
|
+
- [Compat Adapter Packages Guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/compat/index.md)
|
|
219
|
+
- [Dynamic Dictionaries - Collections, Variants & Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/dynamic_dictionaries/index.md)
|
|
220
|
+
- [Configuration Reference](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/configuration.md)
|