@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
|
@@ -71,246 +71,6 @@ Intlayer 不仅仅是一个 i18n 解决方案,还提供了一个**自托管的
|
|
|
71
71
|
|
|
72
72
|
---
|
|
73
73
|
|
|
74
|
-
## 在 Vite 和 React 应用中设置 Intlayer 的分步指南
|
|
75
|
-
|
|
76
|
-
<Tabs defaultTab="video">
|
|
77
|
-
<Tab label="视频" value="video">
|
|
78
|
-
|
|
79
|
-
<iframe title="Vite 和 React 最佳的国际化解决方案?探索 Intlayer" class="m-auto aspect-16/9 w-full overflow-hidden rounded-lg border-0" allow="autoplay; gyroscope;" loading="lazy" width="1080" height="auto" src="https://www.youtube.com/embed/dS9L7uJeak4?si=VaKmrYMmXjo3xpk2"/>
|
|
80
|
-
|
|
81
|
-
</Tab>
|
|
82
|
-
<Tab label="代码" value="code">
|
|
83
|
-
|
|
84
|
-
<iframe
|
|
85
|
-
src="https://ide.intlayer.org/aymericzip/intlayer-vite-react-template?file=intlayer.config.ts"
|
|
86
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
87
|
-
title="演示 CodeSandbox - 如何使用 Intlayer 国际化您的应用程序"
|
|
88
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
89
|
-
loading="lazy"
|
|
90
|
-
/>
|
|
91
|
-
|
|
92
|
-
</Tab>
|
|
93
|
-
<Tab label="演示" value="demo">
|
|
94
|
-
|
|
95
|
-
<iframe
|
|
96
|
-
src="https://intlayer-vite-react-template.vercel.app"
|
|
97
|
-
className="m-auto overflow-hidden rounded-lg border-0 max-md:size-full max-md:h-[700px] md:aspect-16/9 md:w-full"
|
|
98
|
-
title="演示 - intlayer-vite-react-template"
|
|
99
|
-
sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts"
|
|
100
|
-
loading="lazy"
|
|
101
|
-
/>
|
|
102
|
-
|
|
103
|
-
</Tab>
|
|
104
|
-
</Tabs>
|
|
105
|
-
|
|
106
|
-
请参阅 GitHub 上的 [Application Template](https://github.com/aymericzip/intlayer-vite-react-template)。
|
|
107
|
-
|
|
108
|
-
### 第一步:安装依赖
|
|
109
|
-
|
|
110
|
-
使用 npm 安装所需的包:
|
|
111
|
-
|
|
112
|
-
```bash packageManager="npm"
|
|
113
|
-
npm install intlayer react-intlayer
|
|
114
|
-
npm install vite-intlayer --save-dev
|
|
115
|
-
npx intlayer init
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
```bash packageManager="pnpm"
|
|
119
|
-
pnpm add intlayer react-intlayer
|
|
120
|
-
pnpm add vite-intlayer --save-dev
|
|
121
|
-
pnpm intlayer init
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
```bash packageManager="yarn"
|
|
125
|
-
yarn add intlayer react-intlayer
|
|
126
|
-
yarn add vite-intlayer --save-dev
|
|
127
|
-
yarn intlayer init
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
```bash packageManager="bun"
|
|
131
|
-
bun add intlayer react-intlayer
|
|
132
|
-
bun add vite-intlayer --dev
|
|
133
|
-
bun x intlayer init
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
- **intlayer**
|
|
137
|
-
|
|
138
|
-
核心包,提供用于配置管理、翻译、[内容声明](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)、转译和[CLI命令](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/cli/index.md)的国际化工具。
|
|
139
|
-
|
|
140
|
-
- **react-intlayer**
|
|
141
|
-
将 Intlayer 集成到 React 应用中的包。它提供了用于 React 国际化的上下文提供者和钩子。
|
|
142
|
-
|
|
143
|
-
- **vite-intlayer**
|
|
144
|
-
包含用于将 Intlayer 集成到 [Vite 打包工具](https://vite.dev/guide/why.html#why-bundle-for-production) 的 Vite 插件,以及用于检测用户首选语言环境、管理 Cookie 和处理 URL 重定向的中间件。
|
|
145
|
-
|
|
146
|
-
### 第2步:配置您的项目
|
|
147
|
-
|
|
148
|
-
创建一个配置文件来配置您应用程序的语言:
|
|
149
|
-
|
|
150
|
-
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
151
|
-
import { Locales, type IntlayerConfig } from "intlayer";
|
|
152
|
-
|
|
153
|
-
const config: IntlayerConfig = {
|
|
154
|
-
internationalization: {
|
|
155
|
-
locales: [
|
|
156
|
-
Locales.ENGLISH,
|
|
157
|
-
Locales.FRENCH,
|
|
158
|
-
Locales.SPANISH,
|
|
159
|
-
// 您的其他语言
|
|
160
|
-
],
|
|
161
|
-
defaultLocale: Locales.ENGLISH,
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
export default config;
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
> 通过此配置文件,您可以设置本地化的 URL、中间件重定向、cookie 名称、内容声明的位置和扩展名,禁用控制台中的 Intlayer 日志等。有关可用参数的完整列表,请参阅[配置文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/configuration.md)。
|
|
169
|
-
|
|
170
|
-
### 第三步:在您的 Vite 配置中集成 Intlayer
|
|
171
|
-
|
|
172
|
-
将 intlayer 插件添加到您的配置中。
|
|
173
|
-
|
|
174
|
-
```typescript fileName="vite.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
175
|
-
import { defineConfig } from "vite";
|
|
176
|
-
import react from "@vitejs/plugin-react-swc";
|
|
177
|
-
import { intlayer } from "vite-intlayer";
|
|
178
|
-
|
|
179
|
-
// https://vitejs.dev/config/
|
|
180
|
-
export default defineConfig({
|
|
181
|
-
plugins: [react(), intlayer()],
|
|
182
|
-
});
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
> `intlayer()` Vite 插件用于将 Intlayer 集成到 Vite 中。它确保内容声明文件的构建,并在开发模式下监视这些文件。在 Vite 应用程序中定义了 Intlayer 环境变量。此外,它还提供别名以优化性能。
|
|
186
|
-
|
|
187
|
-
### 第4步:声明您的内容
|
|
188
|
-
|
|
189
|
-
创建并管理您的内容声明以存储翻译:
|
|
190
|
-
|
|
191
|
-
```tsx fileName="src/app.content.tsx" contentDeclarationFormat={["typescript", "esm", "commonjs"]}
|
|
192
|
-
import { t, type Dictionary } from "intlayer";
|
|
193
|
-
import type { ReactNode } from "react";
|
|
194
|
-
|
|
195
|
-
const appContent = {
|
|
196
|
-
key: "app",
|
|
197
|
-
content: {
|
|
198
|
-
viteLogo: t({
|
|
199
|
-
en: "Vite logo",
|
|
200
|
-
fr: "Logo Vite",
|
|
201
|
-
es: "Logo Vite",
|
|
202
|
-
}),
|
|
203
|
-
reactLogo: t({
|
|
204
|
-
en: "React logo",
|
|
205
|
-
fr: "Logo React",
|
|
206
|
-
es: "Logo React",
|
|
207
|
-
}),
|
|
208
|
-
|
|
209
|
-
title: "Vite + React",
|
|
210
|
-
|
|
211
|
-
count: t({
|
|
212
|
-
en: "count is ",
|
|
213
|
-
fr: "le compte est ",
|
|
214
|
-
es: "el recuento es ",
|
|
215
|
-
}),
|
|
216
|
-
|
|
217
|
-
edit: t<ReactNode>({
|
|
218
|
-
en: (
|
|
219
|
-
<>
|
|
220
|
-
编辑 <code>src/App.tsx</code> 并保存以测试 HMR
|
|
221
|
-
</>
|
|
222
|
-
),
|
|
223
|
-
fr: (
|
|
224
|
-
<>
|
|
225
|
-
Éditez <code>src/App.tsx</code> et enregistrez pour tester HMR
|
|
226
|
-
</>
|
|
227
|
-
),
|
|
228
|
-
es: (
|
|
229
|
-
<>
|
|
230
|
-
Edita <code>src/App.tsx</code> y guarda para probar HMR
|
|
231
|
-
</>
|
|
232
|
-
),
|
|
233
|
-
}),
|
|
234
|
-
|
|
235
|
-
readTheDocs: t({
|
|
236
|
-
en: "点击 Vite 和 React 标志以了解更多信息",
|
|
237
|
-
fr: "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
238
|
-
es: "Haga clic en los logotipos de Vite y React para obtener más información",
|
|
239
|
-
}),
|
|
240
|
-
},
|
|
241
|
-
} 满足 Dictionary;
|
|
242
|
-
|
|
243
|
-
export default appContent;
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
```json fileName="src/app.content.json" contentDeclarationFormat="json"
|
|
247
|
-
{
|
|
248
|
-
"$schema": "https://intlayer.org/schema.json",
|
|
249
|
-
"key": "app",
|
|
250
|
-
"content": {
|
|
251
|
-
"viteLogo": {
|
|
252
|
-
"nodeType": "translation",
|
|
253
|
-
"translation": {
|
|
254
|
-
"en": "Vite logo",
|
|
255
|
-
"fr": "Logo Vite",
|
|
256
|
-
"es": "Logo Vite"
|
|
257
|
-
}
|
|
258
|
-
},
|
|
259
|
-
"reactLogo": {
|
|
260
|
-
"nodeType": "translation",
|
|
261
|
-
"translation": {
|
|
262
|
-
"zh": "React 标志",
|
|
263
|
-
"en": "React logo",
|
|
264
|
-
"fr": "Logo React",
|
|
265
|
-
"es": "Logo React"
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
"title": {
|
|
269
|
-
"nodeType": "translation",
|
|
270
|
-
"translation": {
|
|
271
|
-
"zh": "Vite + React",
|
|
272
|
-
"en": "Vite + React",
|
|
273
|
-
"fr": "Vite + React",
|
|
274
|
-
"es": "Vite + React"
|
|
275
|
-
}
|
|
276
|
-
},
|
|
277
|
-
"count": {
|
|
278
|
-
"nodeType": "translation",
|
|
279
|
-
"translation": {
|
|
280
|
-
"zh": "计数为 ",
|
|
281
|
-
"en": "count is ",
|
|
282
|
-
"fr": "le compte est ",
|
|
283
|
-
"es": "el recuento es "
|
|
284
|
-
}
|
|
285
|
-
},
|
|
286
|
-
"edit": {
|
|
287
|
-
"nodeType": "translation",
|
|
288
|
-
"translation": {
|
|
289
|
-
"zh": "编辑 src/App.tsx 并保存以测试 HMR",
|
|
290
|
-
"en": "Edit src/App.tsx and save to test HMR",
|
|
291
|
-
"fr": "Éditez src/App.tsx et enregistrez pour tester HMR",
|
|
292
|
-
"es": "Edita src/App.tsx y guarda para probar HMR"
|
|
293
|
-
}
|
|
294
|
-
},
|
|
295
|
-
"readTheDocs": {
|
|
296
|
-
"nodeType": "translation",
|
|
297
|
-
"translation": {
|
|
298
|
-
"zh": "点击 Vite 和 React 标志以了解更多信息",
|
|
299
|
-
"en": "Click on the Vite and React logos to learn more",
|
|
300
|
-
"fr": "Cliquez sur les logos Vite et React pour en savoir plus",
|
|
301
|
-
"es": "Haga clic en los logotipos de Vite y React para obtener más información"
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
> 您的内容声明可以定义在应用程序中的任何位置,只要它们被包含在 `contentDir` 目录中(默认是 `./src`),并且匹配内容声明文件的扩展名(默认是 `.content.{json,ts,tsx,js,jsx,mjs,cjs,md,mdx,yaml,yml}`)。
|
|
309
|
-
|
|
310
|
-
> 更多详情,请参阅[内容声明文档](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/dictionary/content_file.md)。
|
|
311
|
-
|
|
312
|
-
> 如果您的内容文件包含 TSX 代码,您应考虑在内容文件中导入 `import React from "react";`。
|
|
313
|
-
|
|
314
74
|
### 第5步:在代码中使用 Intlayer
|
|
315
75
|
|
|
316
76
|
在整个应用程序中访问您的内容字典:
|
|
@@ -812,54 +572,6 @@ bun run build # Or bun run dev
|
|
|
812
572
|
|
|
813
573
|
</Steps>
|
|
814
574
|
|
|
815
|
-
### 配置 TypeScript
|
|
816
|
-
|
|
817
|
-
Intlayer 使用模块增强(module augmentation)来利用 TypeScript 的优势,使您的代码库更健壮。
|
|
818
|
-
|
|
819
|
-

|
|
820
|
-
|
|
821
|
-

|
|
822
|
-
|
|
823
|
-
确保您的 TypeScript 配置包含自动生成的类型。
|
|
824
|
-
|
|
825
|
-
```json5 fileName="tsconfig.json"
|
|
826
|
-
{
|
|
827
|
-
// ... 您现有的 TypeScript 配置
|
|
828
|
-
"include": [
|
|
829
|
-
// ... 您现有的 TypeScript 配置
|
|
830
|
-
".intlayer/**/*.ts", // 包含自动生成的类型
|
|
831
|
-
],
|
|
832
|
-
}
|
|
833
|
-
```
|
|
834
|
-
|
|
835
|
-
### Git 配置
|
|
836
|
-
|
|
837
|
-
建议忽略 Intlayer 生成的文件,这样可以避免将它们提交到您的 Git 仓库中。
|
|
838
|
-
|
|
839
|
-
为此,您可以在 `.gitignore` 文件中添加以下指令:
|
|
840
|
-
|
|
841
|
-
```plaintext fileName=".gitignore"
|
|
842
|
-
# 忽略 Intlayer 生成的文件
|
|
843
|
-
.intlayer
|
|
844
|
-
```
|
|
845
|
-
|
|
846
|
-
### VS Code 扩展
|
|
847
|
-
|
|
848
|
-
为了提升您使用 Intlayer 的开发体验,您可以安装官方的 **Intlayer VS Code 扩展**。
|
|
849
|
-
|
|
850
|
-
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
851
|
-
|
|
852
|
-
该扩展提供:
|
|
853
|
-
|
|
854
|
-
- **翻译键的自动补全**。
|
|
855
|
-
- **实时错误检测**,用于缺失的翻译。
|
|
856
|
-
- **内联预览**已翻译的内容。
|
|
857
|
-
- **快速操作**,轻松创建和更新翻译。
|
|
858
|
-
|
|
859
|
-
有关如何使用该扩展的更多详细信息,请参阅[Intlayer VS Code 扩展文档](https://intlayer.org/doc/vs-code-extension)。
|
|
860
|
-
|
|
861
|
-
---
|
|
862
|
-
|
|
863
575
|
### (可选)站点地图与 robots.txt(构建时生成)
|
|
864
576
|
|
|
865
577
|
Intlayer 提供 `generateSitemap` 与 `getMultilingualUrls`,可将面向爬虫的多语言 `sitemap.xml` 和 `robots.txt` 格式化并自动写入 `public/`。实践中在 Vite **之前**运行小型 Node 脚本(例如 npm 的 `predev` / `prebuild`)即可在构建或开发时生成这些文件。
|
|
@@ -934,6 +646,54 @@ console.log("SEO files generated successfully.");
|
|
|
934
646
|
|
|
935
647
|
若使用 pnpm 或 yarn,请相应调整命令;也可在 CI 或其他步骤中调用该脚本。
|
|
936
648
|
|
|
649
|
+
### 配置 TypeScript
|
|
650
|
+
|
|
651
|
+
Intlayer 使用模块扩展 (module augmentation) 来利用 TypeScript 的优势,并使你的 codebase 更强大。
|
|
652
|
+
|
|
653
|
+

|
|
654
|
+
|
|
655
|
+

|
|
656
|
+
|
|
657
|
+
确保你的 TypeScript 配置包含了自动生成的类型。
|
|
658
|
+
|
|
659
|
+
```json5 fileName="tsconfig.json"
|
|
660
|
+
{
|
|
661
|
+
// ... 你现有的 TypeScript 配置
|
|
662
|
+
"include": [
|
|
663
|
+
// ... 你现有的 TypeScript 配置
|
|
664
|
+
".intlayer/**/*.ts", // 包含自动生成的类型
|
|
665
|
+
],
|
|
666
|
+
}
|
|
667
|
+
```
|
|
668
|
+
|
|
669
|
+
### Git 配置
|
|
670
|
+
|
|
671
|
+
建议忽略由 Intlayer 生成的文件。这可以让你避免将它们提交到你的 Git 仓库。
|
|
672
|
+
|
|
673
|
+
为此,你可以将以下指令添加到你的 `.gitignore` 文件中:
|
|
674
|
+
|
|
675
|
+
```plaintext fileName=".gitignore"
|
|
676
|
+
# 忽略由 Intlayer 生成的文件
|
|
677
|
+
.intlayer
|
|
678
|
+
```
|
|
679
|
+
|
|
680
|
+
### VS Code 扩展
|
|
681
|
+
|
|
682
|
+
为了提升使用 Intlayer 的开发体验,你可以安装官方的 **Intlayer VS Code 扩展**。
|
|
683
|
+
|
|
684
|
+
[从 VS Code 市场安装](https://marketplace.visualstudio.com/items?itemName=intlayer.intlayer-vs-code-extension)
|
|
685
|
+
|
|
686
|
+
该扩展提供:
|
|
687
|
+
|
|
688
|
+
- 翻译键的**自动补全**。
|
|
689
|
+
- 针对缺失翻译的**实时错误检测**。
|
|
690
|
+
- 已翻译内容的**行内预览**。
|
|
691
|
+
- 轻松创建和更新翻译的**快速操作**。
|
|
692
|
+
|
|
693
|
+
有关如何使用该扩展的更多详细信息,请参阅 [Intlayer VS Code 扩展文档](https://intlayer.org/zh/doc/vs-code-extension)。
|
|
694
|
+
|
|
695
|
+
---
|
|
696
|
+
|
|
937
697
|
### 深入了解
|
|
938
698
|
|
|
939
699
|
要进一步使用,您可以实现[可视化编辑器](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_visual_editor.md)或使用[内容管理系统(CMS)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/zh/intlayer_CMS.md)将内容外部化。
|
package/docs/zh/releases/v8.md
CHANGED
|
@@ -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 optimized 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
|
+
- **Tokenized 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 Optimizations
|
|
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)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intlayer/docs",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-canary.2",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Intlayer documentation",
|
|
6
6
|
"keywords": [
|
|
@@ -73,13 +73,13 @@
|
|
|
73
73
|
"watch": "webpack --config ./webpack.config.ts --watch"
|
|
74
74
|
},
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@intlayer/config": "9.0.0-canary.
|
|
77
|
-
"@intlayer/core": "9.0.0-canary.
|
|
78
|
-
"@intlayer/types": "9.0.0-canary.
|
|
76
|
+
"@intlayer/config": "9.0.0-canary.2",
|
|
77
|
+
"@intlayer/core": "9.0.0-canary.2",
|
|
78
|
+
"@intlayer/types": "9.0.0-canary.2"
|
|
79
79
|
},
|
|
80
80
|
"devDependencies": {
|
|
81
|
-
"@intlayer/api": "9.0.0-canary.
|
|
82
|
-
"@intlayer/cli": "9.0.0-canary.
|
|
81
|
+
"@intlayer/api": "9.0.0-canary.2",
|
|
82
|
+
"@intlayer/cli": "9.0.0-canary.2",
|
|
83
83
|
"@types/node": "25.9.3",
|
|
84
84
|
"@utils/ts-config": "1.0.4",
|
|
85
85
|
"@utils/ts-config-types": "1.0.4",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"rimraf": "6.1.3",
|
|
89
89
|
"tsdown": "0.21.10",
|
|
90
90
|
"typescript": "6.0.3",
|
|
91
|
-
"vitest": "4.1.
|
|
91
|
+
"vitest": "4.1.9"
|
|
92
92
|
},
|
|
93
93
|
"engines": {
|
|
94
94
|
"node": ">=14.18"
|