@intlayer/docs 8.12.5-canary.0 → 9.0.0-canary.3
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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +56 -2
- 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/plugins/sync-json.md +245 -13
- 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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +244 -12
- 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/plugins/sync-json.md +221 -48
- 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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +224 -51
- 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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +223 -50
- 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/plugins/sync-json.md +246 -14
- 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/plugins/sync-json.md +222 -49
- 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/plugins/sync-json.md +269 -95
- 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/plugins/sync-json.md +222 -50
- 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/plugins/sync-json.md +56 -2
- 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/plugins/sync-json.md +230 -57
- 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/plugins/sync-json.md +223 -50
- 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
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-14
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
|
+
title: Neues Intlayer v9 – Was ist neu?
|
|
5
|
+
description: Entdecken Sie die Neuerungen in Intlayer v9. Einführung von Drop-in-Kompatibilitätspaketen für beliebte i18n-Bibliotheken und Unterstützung für Collections, Variants und 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
|
+
# Neues Intlayer v9 – Was ist neu?
|
|
24
|
+
|
|
25
|
+
Willkommen bei Intlayer v9! Dieses Major Release markiert einen riesigen Meilenstein bei der Vereinfachung des Migrationspfads zu Intlayer mit **Compat Adapter Packages** für wichtige i18n-Bibliotheken (`react-i18next`, `next-intl`, `vue-i18n`, etc.) und fügt Unterstützung für reichhaltige Inhaltsstrukturen hinzu: **Collections**, **Variants** und **Dynamic Records**.
|
|
26
|
+
|
|
27
|
+
## Inhaltsverzeichnis
|
|
28
|
+
|
|
29
|
+
<TOC levels={[2]} maxDepth={1} />
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Compat Adapter Packages
|
|
34
|
+
|
|
35
|
+
Die Migration von beliebten i18n-Bibliotheken zu Intlayer ist jetzt einfacher denn je. Wir haben fünf Kompatibilitätspakete erstellt, die die **exakt gleichen öffentlichen APIs** wie Standard-i18n-Bibliotheken bereitstellen, aber die gesamte Übersetzungsarbeit zur Laufzeit an Intlayer delegieren.
|
|
36
|
+
|
|
37
|
+
### Gleiche öffentliche API mit strenger Typisierung
|
|
38
|
+
|
|
39
|
+
Durch das Ersetzen von Imports erhalten Sie alle Vorteile von Intlayer (einschließlich Compile-Time-Typsicherheit gegenüber Ihren tatsächlichen Dictionaries) mit minimalen Codeänderungen:
|
|
40
|
+
|
|
41
|
+
- `@intlayer/i18next`
|
|
42
|
+
- `@intlayer/react-i18next`
|
|
43
|
+
- `@intlayer/next-intl`
|
|
44
|
+
- `@intlayer/next-i18next`
|
|
45
|
+
- `@intlayer/vue-i18n`
|
|
46
|
+
|
|
47
|
+
Ändern Sie zum Beispiel einfach:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { useTranslation } from "react-i18next";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
zu:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Ihre Keys werden nun **streng typisiert** gegenüber Ihren Intlayer-Dictionaries, was eine vollständige Dot-Path-Auto-Vervollständigung in Ihrer IDE bietet!
|
|
60
|
+
|
|
61
|
+
### Bundler Alias Plugins (Vite, Next.js, Turbopack)
|
|
62
|
+
|
|
63
|
+
Um die Migration ohne manuelles Umschreiben aller Import-Statements zu ermöglichen, enthält jedes Compat Adapter Package ein **benutzerdefiniertes Bundler-Plugin** (Vite oder Next.js) unter dem Subpfad `/plugin`.
|
|
64
|
+
|
|
65
|
+
Diese Plugins schreiben bestehende Imports (z.B. `react-i18next` oder `next-intl`) zur Build-Zeit automatisch in ihre `@intlayer/*`-Äquivalente um.
|
|
66
|
+
|
|
67
|
+
#### Next.js (Webpack / Turbopack) Beispiel
|
|
68
|
+
|
|
69
|
+
Anstelle von `withIntlayer` umschließen Sie Ihre Next.js-Konfiguration mit dem Kompatibilitäts-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) Beispiel
|
|
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
|
+
Alle Kompatibilitätsadapter leiten die Übersetzungsauflösung nun über einen einzigen, hochoptimierten Runtime-Parser: `@intlayer/core/messageFormat`.
|
|
96
|
+
|
|
97
|
+
- **Interpolate Message**: Löst Standard `{{var}}` (Leerzeichen & Dot-Pfade), ICU-formatierte Argumente (`{v, number, percent}` etc.) und einfache `{var}`-Templates auf.
|
|
98
|
+
- **Message Node Resolver**: Löst verschachtelte Nodes auf: `insert()`, `plural()` (CLDR-Pluralregeln), `enu()` (Aufzählung), `gender()`, HTML-Tags, Arrays und aufrufbare Funktions-Nodes.
|
|
99
|
+
- **Tokenized Tag Parser**: Unterstützt Inline-XML/HTML-Tags und nummerierte Tags (z.B. `<1>children</1>`), um Rich-Text-Rendering out-of-the-box zu ermöglichen.
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Feature Spec: Collections, Variants & Dynamic Records
|
|
104
|
+
|
|
105
|
+
Intlayer v9 geht über statische Schlüssel-Wert-Objekte hinaus und ermöglicht es Dictionaries, dynamische Layout-Strukturen zu deklarieren, die End-to-End vollständig typisiert sind.
|
|
106
|
+
|
|
107
|
+
### 1. Collections
|
|
108
|
+
|
|
109
|
+
Definieren Sie eine CMS-verwaltete Liste geordneter Elemente (z.B. FAQs, Produkte oder Bloglisten):
|
|
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({
|
|
119
|
+
de: "Was ist Intlayer?",
|
|
120
|
+
en: "What is Intlayer?",
|
|
121
|
+
fr: "Qu'est-ce qu'Intlayer ?",
|
|
122
|
+
}),
|
|
123
|
+
answer: t({
|
|
124
|
+
de: "Ein i18n-Toolkit.",
|
|
125
|
+
en: "An i18n toolkit.",
|
|
126
|
+
fr: "Une boîte à outils i18n.",
|
|
127
|
+
}),
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
} satisfies Dictionary;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Verwendung:
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
// Alle Elemente abrufen
|
|
137
|
+
const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
|
|
138
|
+
|
|
139
|
+
// Einzelnes Element nach Index abrufen
|
|
140
|
+
const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 2. Variants
|
|
144
|
+
|
|
145
|
+
Liefern Sie A/B-Tests, saisonale Header, Feature Flags oder benutzerdefinierte Landing Pages:
|
|
146
|
+
|
|
147
|
+
```ts fileName="hero.content.ts"
|
|
148
|
+
import { t, type Dictionary } from "intlayer";
|
|
149
|
+
|
|
150
|
+
export default {
|
|
151
|
+
key: "hero-banner",
|
|
152
|
+
variant: "default",
|
|
153
|
+
content: {
|
|
154
|
+
control: t({ de: "Willkommen", en: "Welcome", fr: "Bienvenue" }),
|
|
155
|
+
black_friday: t({
|
|
156
|
+
de: "Jetzt einkaufen",
|
|
157
|
+
en: "Shop now",
|
|
158
|
+
fr: "Acheter maintenant",
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
} satisfies Dictionary;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Verwendung:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
const banner = useIntlayer("hero-banner", { variant: "black_friday" });
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 3. Dynamic Records
|
|
171
|
+
|
|
172
|
+
Definieren Sie Dictionaries, deren Einträge zur Laufzeit dynamisch über Query-IDs geladen werden:
|
|
173
|
+
|
|
174
|
+
```ts fileName="product.content.ts"
|
|
175
|
+
import { t, type Dictionary } from "intlayer";
|
|
176
|
+
|
|
177
|
+
export default {
|
|
178
|
+
key: "product-copy",
|
|
179
|
+
meta: {
|
|
180
|
+
id: "prod_123",
|
|
181
|
+
category: "books",
|
|
182
|
+
},
|
|
183
|
+
content: {
|
|
184
|
+
title: t({ de: "Clean Code", en: "Clean Code", fr: "Code Propre" }),
|
|
185
|
+
},
|
|
186
|
+
} satisfies Dictionary;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Verwendung:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
// Ruft nur das angeforderte Element dynamisch ab (erfordert Suspense)
|
|
193
|
+
const product = useIntlayer("product-copy", {
|
|
194
|
+
id: "prod_123",
|
|
195
|
+
category: "books",
|
|
196
|
+
});
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Dynamisches Laden & Optimierungen der Bundle-Größe
|
|
202
|
+
|
|
203
|
+
Um Bundles extrem klein zu halten, unterstützt Intlayer v9 dynamisches Lazy Loading.
|
|
204
|
+
|
|
205
|
+
Stellen Sie in Ihrer Konfiguration `importMode` auf `'dynamic'` oder `'fetch'` ein:
|
|
206
|
+
|
|
207
|
+
```ts fileName="intlayer.config.ts"
|
|
208
|
+
export default {
|
|
209
|
+
dictionary: {
|
|
210
|
+
importMode: "dynamic", // "static" | "dynamic" | "fetch"
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Zur Build-Zeit scannen `@intlayer/swc` und `@intlayer/babel` Ihre Dateien und ersetzen `useIntlayer` / `getIntlayer`-Aufrufe durch tree-shakeable Wrapper (`useDictionary` / `useDictionaryDynamic`). Nur der für das ausgewählte Collection-Element, die Variante oder das Locale erforderliche Inhalt wird geladen, wodurch verhindert wird, dass Ihr Produktions-Bundle ungenutzte Übersetzungen enthält.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Migrationshinweise von v8
|
|
220
|
+
|
|
221
|
+
Wenn Sie von v8 upgraden, beachten Sie, dass v9 keine Breaking Changes enthält. Hier sind jedoch die wichtigsten Änderungen:
|
|
222
|
+
|
|
223
|
+
- **Locales & Dialects**: Wenn Sie externe i18n-Abhängigkeiten verwenden, fügen Sie deren entsprechende Kompatibilitätsadapter-Plugins in Ihrer Konfiguration oder Ihrem Bundler-Setup hinzu, um Imports automatisch umzuschreiben.
|
|
224
|
+
- **Custom Selectors**: Beim Aufruf von `useIntlayer` ist der zweite Parameter nun für ein Options-Objekt reserviert, das `{ locale, item, variant, id }` enthält. Wenn Sie zuvor direkt einen Locale-String übergeben haben, können Sie dies weiterhin tun, aber die Verwendung des Options-Objekts wird für erweiterte Auswahlen empfohlen.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Nützliche Links
|
|
229
|
+
|
|
230
|
+
- [Leitfaden für Compat Adapter Packages](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/compat/index.md)
|
|
231
|
+
- [Dynamische Dictionaries – Collections, Variants & Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/dynamic_dictionaries/index.md)
|
|
232
|
+
- [Konfigurationsreferenz](https://github.com/aymericzip/intlayer/blob/main/docs/docs/de/configuration.md)
|
package/docs/en/CI_CD.md
CHANGED
|
@@ -93,7 +93,7 @@ export default config;
|
|
|
93
93
|
|
|
94
94
|
```bash fileName=".husky/pre-push"
|
|
95
95
|
npx intlayer build # To ensure dictionaries are up to date
|
|
96
|
-
npx intlayer fill --unpushed --mode
|
|
96
|
+
npx intlayer fill --unpushed --mode complete # Only fill missing content, does not update existing ones
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
> For more information about Intlayer CLI commands and their usage, refer to the [CLI documentation](https://github.com/aymericzip/intlayer/blob/main/docs/docs/en/cli/index.md).
|
|
@@ -103,11 +103,11 @@ npx intlayer fill --unpushed --mode fill # Only fill missing content, does no
|
|
|
103
103
|
```bash fileName=".husky/pre-push"
|
|
104
104
|
# App 1
|
|
105
105
|
npx intlayer build --base-dir ./app1
|
|
106
|
-
npx intlayer fill --base-dir ./app1 --unpushed --mode
|
|
106
|
+
npx intlayer fill --base-dir ./app1 --unpushed --mode complete
|
|
107
107
|
|
|
108
108
|
# App 2
|
|
109
109
|
npx intlayer build --base-dir ./app2
|
|
110
|
-
npx intlayer fill --base-dir ./app2 --unpushed --mode
|
|
110
|
+
npx intlayer fill --base-dir ./app2 --unpushed --mode complete
|
|
111
111
|
```
|
|
112
112
|
|
|
113
113
|
## Using GitHub Actions
|
|
@@ -135,8 +135,8 @@ jobs:
|
|
|
135
135
|
runs-on: ubuntu-latest
|
|
136
136
|
env:
|
|
137
137
|
# OpenAI
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
AI_PROVIDER: openai
|
|
139
|
+
AI_MODEL: gpt-5-mini
|
|
140
140
|
AI_API_KEY: ${{ secrets.AI_API_KEY }}
|
|
141
141
|
|
|
142
142
|
steps:
|
|
@@ -167,10 +167,10 @@ jobs:
|
|
|
167
167
|
|
|
168
168
|
# Step 6: Use AI to automatically fill missing translations
|
|
169
169
|
- name: 🤖 Auto-fill missing translations
|
|
170
|
-
run: npx intlayer fill --git-diff --mode
|
|
170
|
+
run: npx intlayer fill --git-diff --mode complete --provider $AI_PROVIDER --model $AI_MODEL --api-key $AI_API_KEY
|
|
171
171
|
|
|
172
172
|
# Step 7: Check if there are changes and commit them
|
|
173
|
-
- name:
|
|
173
|
+
- name: 🔍 Check for changes
|
|
174
174
|
id: check-changes
|
|
175
175
|
run: |
|
|
176
176
|
if [ -n "$(git status --porcelain)" ]; then
|
package/docs/en/cli/ci.md
CHANGED
|
@@ -128,18 +128,72 @@ bun x intlayer ci fill --verbose --mode complete
|
|
|
128
128
|
|
|
129
129
|
### Use in CI/CD pipelines
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
Running `intlayer init` scaffolds two ready-to-use GitHub Actions workflows for you (see [Scaffolded GitHub Actions](#scaffolded-github-actions) below). The example here shows the equivalent setup using the `ci` command for a monorepo, where credentials are injected per project from `INTLAYER_PROJECT_CREDENTIALS`.
|
|
132
|
+
|
|
133
|
+
> **AI access**: The `fill` command needs AI access to generate translations. The credentials injected by `ci` from `INTLAYER_PROJECT_CREDENTIALS` (Intlayer CMS access keys) grant AI access through the Intlayer backend, so no separate AI provider key is required. If you prefer to use your own provider key instead, pass `--provider`, `--model`, and `--api-key` to `intlayer ci fill`. The `test` command does not require AI access.
|
|
134
|
+
|
|
135
|
+
```yaml fileName=".github/workflows/intlayer-ci.yml"
|
|
136
|
+
name: Intlayer CI
|
|
137
|
+
|
|
138
|
+
on:
|
|
139
|
+
pull_request:
|
|
140
|
+
branches:
|
|
141
|
+
- main
|
|
142
|
+
|
|
143
|
+
permissions:
|
|
144
|
+
contents: write
|
|
145
|
+
pull-requests: write
|
|
146
|
+
|
|
147
|
+
jobs:
|
|
148
|
+
intlayer:
|
|
149
|
+
runs-on: ubuntu-latest
|
|
150
|
+
env:
|
|
151
|
+
# CMS access keys per project. They also grant AI access for `fill`.
|
|
152
|
+
INTLAYER_PROJECT_CREDENTIALS: ${{ secrets.INTLAYER_PROJECT_CREDENTIALS }}
|
|
153
|
+
steps:
|
|
154
|
+
- name: ⬇️ Checkout repository
|
|
155
|
+
uses: actions/checkout@v4
|
|
156
|
+
with:
|
|
157
|
+
persist-credentials: true
|
|
158
|
+
fetch-depth: 0
|
|
159
|
+
|
|
160
|
+
- name: 🟢 Setup Node.js
|
|
161
|
+
uses: actions/setup-node@v4
|
|
162
|
+
with:
|
|
163
|
+
node-version: 20
|
|
164
|
+
|
|
165
|
+
- name: 📦 Install dependencies
|
|
166
|
+
run: npm ci
|
|
167
|
+
|
|
168
|
+
- name: 🤖 Fill missing translations
|
|
169
|
+
run: npx intlayer ci fill --git-diff --mode complete
|
|
170
|
+
|
|
171
|
+
- name: 🧪 Test for missing translations
|
|
172
|
+
run: npx intlayer ci test
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## Scaffolded GitHub Actions
|
|
176
|
+
|
|
177
|
+
When you run `intlayer init`, Intlayer detects your package manager (npm, yarn, pnpm, or bun) and scaffolds two GitHub Actions workflows under `.github/workflows/`, with commands matching that package manager:
|
|
132
178
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
env:
|
|
136
|
-
INTLAYER_PROJECT_CREDENTIALS: ${{ secrets.INTLAYER_PROJECT_CREDENTIALS }}
|
|
179
|
+
- **`intlayer-fill.yml`** — On every pull request, builds the dictionaries and runs `intlayer fill --git-diff --mode complete` to generate missing translations for the changed dictionaries, then commits the result back to the PR branch.
|
|
180
|
+
- **`intlayer-test.yml`** — On every pull request, builds the dictionaries and runs `intlayer test`, failing the check when required locales are missing translations.
|
|
137
181
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
182
|
+
Existing workflow files are never overwritten. To skip scaffolding entirely, run:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npx intlayer init --no-github-actions
|
|
141
186
|
```
|
|
142
187
|
|
|
188
|
+
### Providing AI access to the fill workflow
|
|
189
|
+
|
|
190
|
+
The scaffolded `intlayer-fill.yml` requires AI access. Two options are available (configured in the workflow's `env` block):
|
|
191
|
+
|
|
192
|
+
1. **Your own AI provider key** — Add an `AI_API_KEY` secret in your repository settings (Settings → Secrets and variables → Actions). The workflow forwards it via `--provider`, `--model`, and `--api-key`.
|
|
193
|
+
2. **Intlayer CMS access keys** — Add `INTLAYER_CLIENT_ID` and `INTLAYER_CLIENT_SECRET` secrets and wire them into your `intlayer.config` `editor` section. CMS access keys grant AI access through the Intlayer backend.
|
|
194
|
+
|
|
195
|
+
The `intlayer-test.yml` workflow does not require any AI access.
|
|
196
|
+
|
|
143
197
|
## Error Handling
|
|
144
198
|
|
|
145
199
|
- If `INTLAYER_PROJECT_CREDENTIALS` is not set, the command will exit with an error.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2024-08-11
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-06-17
|
|
4
4
|
title: Review Document
|
|
5
5
|
description: Learn how to review documentation files for quality, consistency, and completeness across different locales.
|
|
6
6
|
keywords:
|
|
@@ -15,6 +15,10 @@ slugs:
|
|
|
15
15
|
- concept
|
|
16
16
|
- cli
|
|
17
17
|
- doc-review
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.0.0
|
|
20
|
+
date: 2026-06-17
|
|
21
|
+
changes: "Add --log option"
|
|
18
22
|
author: aymericzip
|
|
19
23
|
---
|
|
20
24
|
|
|
@@ -55,8 +59,110 @@ For most use cases,
|
|
|
55
59
|
|
|
56
60
|
## Arguments:
|
|
57
61
|
|
|
58
|
-
|
|
62
|
+
**File list options:**
|
|
59
63
|
|
|
60
|
-
|
|
64
|
+
- **`--doc-pattern [docPattern...]`**: Glob patterns to match documentation files to review.
|
|
61
65
|
|
|
62
|
-
|
|
66
|
+
> Example: `npx intlayer doc review --doc-pattern "docs/**/*.md" "src/**/*.mdx"`
|
|
67
|
+
|
|
68
|
+
- **`--excluded-glob-pattern [excludedGlobPattern...]`**: Glob patterns to exclude from review.
|
|
69
|
+
|
|
70
|
+
> Example: `npx intlayer doc review --excluded-glob-pattern "docs/internal/**"`
|
|
71
|
+
|
|
72
|
+
- **`--skip-if-modified-before [skipIfModifiedBefore]`**: Skip the file if it has been modified before the given time.
|
|
73
|
+
- Can be an absolute time as "2025-12-05" (string or Date)
|
|
74
|
+
- Can be a relative time in ms `1 * 60 * 60 * 1000` (1 hour)
|
|
75
|
+
- This option checks the update time of the file using the `fs.stat` method. So it could be impacted by Git or other tools that modify the file.
|
|
76
|
+
|
|
77
|
+
> Example: `npx intlayer doc review --skip-if-modified-before "2025-12-05"`
|
|
78
|
+
|
|
79
|
+
- **`--skip-if-modified-after [skipIfModifiedAfter]`**: Skip the file if it has been modified within the given time.
|
|
80
|
+
- Can be an absolute time as "2025-12-05" (string or Date)
|
|
81
|
+
- Can be a relative time in ms `1 * 60 * 60 * 1000` (1 hour)
|
|
82
|
+
- This option checks the update time of the file using the `fs.stat` method. So it could be impacted by Git or other tools that modify the file.
|
|
83
|
+
|
|
84
|
+
> Example: `npx intlayer doc review --skip-if-modified-after "2025-12-05"`
|
|
85
|
+
|
|
86
|
+
- **`--skip-if-exists`**: Skip the file if it already exists.
|
|
87
|
+
|
|
88
|
+
> Example: `npx intlayer doc review --skip-if-exists`
|
|
89
|
+
|
|
90
|
+
**Review mode options:**
|
|
91
|
+
|
|
92
|
+
- **`--log`**: Log-only mode. Do not translate with AI; instead log the blocks that need attention (with line numbers and content) for the base and target locales, to help another agent generate the translations.
|
|
93
|
+
|
|
94
|
+
> Example: `npx intlayer doc review --log`
|
|
95
|
+
|
|
96
|
+
**Entry output options:**
|
|
97
|
+
|
|
98
|
+
- **`--locales [locales...]`**: Target locales to review documentation for.
|
|
99
|
+
|
|
100
|
+
> Example: `npx intlayer doc review --locales fr es de`
|
|
101
|
+
|
|
102
|
+
- **`--base-locale [baseLocale]`**: Source locale (base document) to compare with.
|
|
103
|
+
|
|
104
|
+
> Example: `npx intlayer doc review --base-locale en`
|
|
105
|
+
|
|
106
|
+
**File processing options:**
|
|
107
|
+
|
|
108
|
+
- **`--nb-simultaneous-file-processed [nbSimultaneousFileProcessed]`**: Number of files to process simultaneously for review.
|
|
109
|
+
|
|
110
|
+
> Example: `npx intlayer doc review --nb-simultaneous-file-processed 5`
|
|
111
|
+
|
|
112
|
+
**AI options:**
|
|
113
|
+
|
|
114
|
+
- **`--model [model]`**: The AI model to use for review (e.g., `gpt-3.5-turbo`).
|
|
115
|
+
- **`--provider [provider]`**: The AI provider to use for review.
|
|
116
|
+
- **`--temperature [temperature]`**: Temperature setting for the AI model.
|
|
117
|
+
- **`--api-key [apiKey]`**: Provide your own API key for the AI service.
|
|
118
|
+
- **`--application-context [applicationContext]`**: Provide additional context for the AI review.
|
|
119
|
+
- **`--data-serialization [dataSerialization]`**: The data serialization format to use for the AI features of Intlayer. Options: `json` (standard, reliable), `toon` (fewer tokens, less consistent).
|
|
120
|
+
- **`--custom-prompt [prompt]`**: Customize the base prompt used for review. (Note: For most use cases, the `--custom-instructions` option is recommended instead.)
|
|
121
|
+
|
|
122
|
+
> Example: `npx intlayer doc review --model deepseek-chat --provider deepseek --temperature 0.5 --api-key sk-1234567890 --application-context "My application is a cat store"`
|
|
123
|
+
|
|
124
|
+
**Environment variables options:**
|
|
125
|
+
|
|
126
|
+
- **`--env`**: Specify the environment (e.g., `development`, `production`).
|
|
127
|
+
- **`--env-file [envFile]`**: Provide a custom environment file to load variables from.
|
|
128
|
+
- **`--base-dir`**: Specify the base directory for the project.
|
|
129
|
+
- **`--no-cache`**: Disable the cache.
|
|
130
|
+
|
|
131
|
+
> Example: `npx intlayer doc review --base-dir ./docs --env-file .env.production.local`
|
|
132
|
+
|
|
133
|
+
**Log options:**
|
|
134
|
+
|
|
135
|
+
- **`--verbose`**: Enable verbose logging for debugging. (default to true using CLI)
|
|
136
|
+
|
|
137
|
+
> Example: `npx intlayer doc review --verbose`
|
|
138
|
+
|
|
139
|
+
**Custom instructions options:**
|
|
140
|
+
|
|
141
|
+
- **`--custom-instructions [customInstructions]`**: Custom instructions added to the prompt. Useful to apply specific rules regarding formatting, urls translation, etc.
|
|
142
|
+
|
|
143
|
+
> Example: `npx intlayer doc review --custom-instructions "Avoid translating urls, and keep the markdown format"`
|
|
144
|
+
|
|
145
|
+
> Example: `npx intlayer doc review --custom-instructions "$(cat ./instructions.md)"`
|
|
146
|
+
|
|
147
|
+
**Git options:**
|
|
148
|
+
|
|
149
|
+
- **`--git-diff`**: Only run on files that include changes from base (default `origin/main`) to current branch (default: `HEAD`).
|
|
150
|
+
- **`--git-diff-base`**: Specify the base reference for git diff (default `origin/main`).
|
|
151
|
+
- **`--git-diff-current`**: Specify the current reference for git diff (default: `HEAD`).
|
|
152
|
+
- **`--uncommitted`**: Include uncommitted changes.
|
|
153
|
+
- **`--unpushed`**: Include unpushed changes.
|
|
154
|
+
- **`--untracked`**: Include untracked files.
|
|
155
|
+
|
|
156
|
+
> Example: `npx intlayer doc review --git-diff --git-diff-base origin/main --git-diff-current HEAD`
|
|
157
|
+
|
|
158
|
+
> Example: `npx intlayer doc review --uncommitted --unpushed --untracked`
|
|
159
|
+
|
|
160
|
+
> Note that the output file path will be determined by replacing the following patterns:
|
|
161
|
+
>
|
|
162
|
+
> - `/{{baseLocale}}/` by `/{{locale}}/` (Unix)
|
|
163
|
+
> - `\{{baseLocale}}\` by `\{{locale}}\` (Windows)
|
|
164
|
+
> - `_{{baseLocale}}.` by `_{{locale}}.`
|
|
165
|
+
> - `{{baseLocale}}_` by `{{locale}}_`
|
|
166
|
+
> - `.{{baseLocaleName}}.` by `.{{localeName}}.`
|
|
167
|
+
>
|
|
168
|
+
> If the pattern is not found, the output file will add the `.{{locale}}` at the extensions of the file. `./my/file.md` will be reviewed and updated to `./my/file.fr.md` for the French locale.
|
package/docs/en/cli/index.md
CHANGED
package/docs/en/cli/scan.md
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-13
|
|
3
|
+
updatedAt: 2026-06-13
|
|
4
|
+
title: "Migrate from i18n-js to Intlayer"
|
|
5
|
+
description: "Learn how to migrate your application from i18n-js to Intlayer using the compat adapter."
|
|
6
|
+
keywords:
|
|
7
|
+
- i18n-js
|
|
8
|
+
- intlayer
|
|
9
|
+
- migration
|
|
10
|
+
- compat
|
|
11
|
+
slugs:
|
|
12
|
+
- doc
|
|
13
|
+
- compatibility
|
|
14
|
+
- i18n-js
|
|
15
|
+
history:
|
|
16
|
+
- version: 9.0.0
|
|
17
|
+
date: 2026-06-13
|
|
18
|
+
changes: "Init history"
|
|
19
|
+
author: aymericzip
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Migrate from i18n-js to Intlayer
|
|
23
|
+
|
|
24
|
+
Transitioning from the `i18n-js` library to Intlayer is a highly optimized migration designed to offload large translations configurations into Intlayer's structured file resolution system.
|
|
25
|
+
|
|
26
|
+
## What to do
|
|
27
|
+
|
|
28
|
+
Execute the following setup command in your repository:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
npx intlayer init
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
With `intlayer.config.ts` prepared, you can add Intlayer's alias to your bundler configuration so that any imports of `i18n-js` target the compat package `@intlayer/i18n-js`.
|
|
35
|
+
|
|
36
|
+
## What it does under the hood
|
|
37
|
+
|
|
38
|
+
`i18n-js` accesses namespaces through expressions like `i18n.t('scope.key', {name})` along with locale fallbacks and specific plural mappings.
|
|
39
|
+
|
|
40
|
+
Under the hood:
|
|
41
|
+
|
|
42
|
+
- **Interpolation:** The compat adapter easily parses `%{name}` mappings into your targeted runtime dictionary value.
|
|
43
|
+
- **Pluralization:** Replaces `one/other` subkeys and maps them against Intlayer's powerful underlying plural mechanisms (`Intl.PluralRules`), abstracting away manual mappings.
|
|
44
|
+
- **Locales:** Instead of loading monolithic language payloads at bootstrap, dictionaries are served up optimally based on the current context setup via the native Intlayer configuration.
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-13
|
|
3
|
+
updatedAt: 2026-06-13
|
|
4
|
+
title: "Migrate from i18next to Intlayer"
|
|
5
|
+
description: "Learn how to migrate your Vanilla JS/TS application from i18next to Intlayer using the compat adapter."
|
|
6
|
+
keywords:
|
|
7
|
+
- i18next
|
|
8
|
+
- vanilla
|
|
9
|
+
- javascript
|
|
10
|
+
- typescript
|
|
11
|
+
- intlayer
|
|
12
|
+
- migration
|
|
13
|
+
- compat
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- compatibility
|
|
17
|
+
- i18next
|
|
18
|
+
history:
|
|
19
|
+
- version: 9.0.0
|
|
20
|
+
date: 2026-06-13
|
|
21
|
+
changes: "Init history"
|
|
22
|
+
author: aymericzip
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Migrate from i18next to Intlayer
|
|
26
|
+
|
|
27
|
+
For a detailed step-by-step tutorial, please see our full [i18next Migration Guide](../migration_from_i18next_to_intlayer.md).
|
|
28
|
+
|
|
29
|
+
Intlayer perfectly replicates the core runtime characteristics of `i18next`. By utilizing the compat package, your Vanilla applications or internal modules can continue to leverage familiar syntax.
|
|
30
|
+
|
|
31
|
+
## What to do
|
|
32
|
+
|
|
33
|
+
To begin, initialize Intlayer in your project:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npx intlayer init
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
If you are using Vite, include the Intlayer plugin to route imports to `@intlayer/i18next`:
|
|
40
|
+
|
|
41
|
+
```typescript fileName="vite.config.ts"
|
|
42
|
+
import { defineConfig } from "vite";
|
|
43
|
+
import { i18nextVitePlugin } from "@intlayer/i18next/plugin";
|
|
44
|
+
|
|
45
|
+
export default defineConfig({
|
|
46
|
+
plugins: [i18nextVitePlugin()],
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## What it does under the hood
|
|
51
|
+
|
|
52
|
+
The `i18nextVitePlugin` aliases `i18next` imports to `@intlayer/i18next`, avoiding bundle bloat from JSON file inclusions.
|
|
53
|
+
|
|
54
|
+
Under the hood:
|
|
55
|
+
|
|
56
|
+
- **Instance configuration:** `createInstance` correctly parses and applies namespace fallbacks while leveraging Intlayer's compilation pipeline for dictionary retrieval.
|
|
57
|
+
- **Interpolation:** Native support for `{{name}}` replacements and `$t(key)` nesting recursively.
|
|
58
|
+
- **Context & Plurals:** Identifies and resolves suffix formats like `key_male` and `key_one`/`key_other` evaluating against standard `Intl.PluralRules`.
|
|
59
|
+
- **Return objects:** The `returnObjects: true` mode safely extracts trees from Intlayer dictionaries.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-13
|
|
3
|
+
updatedAt: 2026-06-13
|
|
4
|
+
title: "Intlayer Compat Adapters"
|
|
5
|
+
description: "Migrate your existing i18n solution to Intlayer with zero friction using compat adapters."
|
|
6
|
+
keywords:
|
|
7
|
+
- compat
|
|
8
|
+
- migration
|
|
9
|
+
- internationalization
|
|
10
|
+
- i18n
|
|
11
|
+
- Intlayer
|
|
12
|
+
slugs:
|
|
13
|
+
- doc
|
|
14
|
+
- compatibility
|
|
15
|
+
history:
|
|
16
|
+
- version: 9.0.0
|
|
17
|
+
date: 2026-06-13
|
|
18
|
+
changes: "Init history"
|
|
19
|
+
author: aymericzip
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
# Intlayer Compat Adapters
|
|
23
|
+
|
|
24
|
+
Migrating a large application to a new internationalization library can be daunting. To ease this transition, Intlayer provides **compat adapters** for the most popular i18n libraries in the ecosystem.
|
|
25
|
+
|
|
26
|
+
These adapter packages expose the **exact same public API** as your existing i18n libraries, but delegate all translation work to Intlayer at runtime.
|
|
27
|
+
|
|
28
|
+
## How it works
|
|
29
|
+
|
|
30
|
+
When you use a compat adapter, you do not need to rewrite your application's imports or change how you use your translation hooks and components. Instead, Intlayer's bundler plugins automatically alias your existing imports to the Intlayer compat packages.
|
|
31
|
+
|
|
32
|
+
For example, a developer replaces `import { useTranslation } from 'react-i18next'` with `import { useTranslation } from '@intlayer/react-i18next'` (done automatically via the bundler plugin), and the app keeps working with translations now served from Intlayer dictionaries. Keys are also typed against your Intlayer dictionaries!
|
|
33
|
+
|
|
34
|
+
## Available Compat Adapters
|
|
35
|
+
|
|
36
|
+
Choose your existing library below to see how to migrate seamlessly:
|
|
37
|
+
|
|
38
|
+
- [Vue I18n](./vue-i18n.md)
|
|
39
|
+
- [Transloco](./transloco.md)
|
|
40
|
+
- [React Intl](./react-intl.md)
|
|
41
|
+
- [Svelte I18n](./svelte-i18n.md)
|
|
42
|
+
- [React i18next](./react-i18next.md)
|
|
43
|
+
- [Polyglot.js](./polyglot.md)
|
|
44
|
+
- [NuxtJS I18n](./nuxtjs-i18n.md)
|
|
45
|
+
- [NGX Translate](./ngx-translate.md)
|
|
46
|
+
- [Next Translate](./next-translate.md)
|
|
47
|
+
- [Next Intl](./next-intl.md)
|
|
48
|
+
- [Next i18next](./next-i18next.md)
|
|
49
|
+
- [i18next](./i18next.md)
|
|
50
|
+
- [Lingui](./lingui.md)
|
|
51
|
+
- [I18n-js](./i18n-js.md)
|