@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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-03-13
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-06-21
|
|
4
4
|
title: Плагін Sync JSON
|
|
5
5
|
description: Синхронізуйте словники Intlayer із зовнішніми i18n JSON-файлами (i18next, next-intl, react-intl, vue-i18n та ін.). Залишайте ваш існуючий i18n-стек і використовуйте Intlayer для керування, перекладу та тестування повідомлень.
|
|
6
6
|
keywords:
|
|
@@ -24,6 +24,9 @@ slugs:
|
|
|
24
24
|
- sync-json
|
|
25
25
|
youtubeVideo: https://www.youtube.com/watch?v=MpGMxniDHNg
|
|
26
26
|
history:
|
|
27
|
+
- version: 9.0.0
|
|
28
|
+
date: 2026-06-21
|
|
29
|
+
changes: "Додано опцію splitKeys (один словник на ключ простору імен верхнього рівня) для макетів next-intl / react-intl з одним файлом"
|
|
27
30
|
- version: 7.5.0
|
|
28
31
|
date: 2025-12-13
|
|
29
32
|
changes: "Додано підтримку форматів ICU та i18next"
|
|
@@ -182,6 +185,7 @@ syncJSON({
|
|
|
182
185
|
location?: string, // необов'язковий ярлик, за замовчуванням: "plugin"
|
|
183
186
|
priority?: number, // необов'язковий пріоритет для вирішення конфліктів, за замовчуванням: 0
|
|
184
187
|
format?: 'intlayer' | 'icu' | 'i18next', // необов'язковий форматтер, використовується для сумісності з intlayer runtime
|
|
188
|
+
splitKeys?: boolean, // необов'язково, розділяє один файл на один словник для кожного ключа простору імен верхнього рівня (автоматично визначається)
|
|
185
189
|
});
|
|
186
190
|
```
|
|
187
191
|
|
|
@@ -205,6 +209,38 @@ syncJSON({
|
|
|
205
209
|
}),
|
|
206
210
|
```
|
|
207
211
|
|
|
212
|
+
#### `splitKeys` (boolean)
|
|
213
|
+
|
|
214
|
+
Контролює, чи повинен один JSON-файл, **ключі першого рівня якого є просторами імен**, стати одним словником на ключ верхнього рівня, замість одного словника, що містить весь файл.
|
|
215
|
+
|
|
216
|
+
Це відповідає моделі просторів імен таких бібліотек, як `next-intl` та `react-intl`, де один файл `messages/{locale}.json` групує кілька просторів імен за ключами першого рівня, кожен з яких адресується незалежно (наприклад, `useTranslations('Hero')` розв'язується до словника `Hero`).
|
|
217
|
+
|
|
218
|
+
- `undefined` (за замовчуванням): **автоматично визначається** — файл розділяється, коли шаблон `source` не має сегмента `{key}` (один файл містить кожен простір імен), і залишається як єдиний словник в іншому випадку (один файл на ключ).
|
|
219
|
+
- `true`: завжди розділяти кожен ключ верхнього рівня на окремий словник.
|
|
220
|
+
- `false`: ніколи не розділяти; весь файл стає єдиним словником.
|
|
221
|
+
|
|
222
|
+
Дано один файл `messages/{locale}.json`:
|
|
223
|
+
|
|
224
|
+
```json fileName="messages/en.json"
|
|
225
|
+
{
|
|
226
|
+
"Hero": { "title": "Full-stack developer" },
|
|
227
|
+
"Nav": { "work": "Work", "about": "About" },
|
|
228
|
+
"About": { "lead": "I build apps end to end." }
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```ts fileName="intlayer.config.ts"
|
|
233
|
+
syncJSON({
|
|
234
|
+
format: "icu",
|
|
235
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
236
|
+
// splitKeys: true, // мається на увазі, оскільки шаблон не має сегмента `{key}`
|
|
237
|
+
}),
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
Це створює три словники — `Hero`, `Nav` та `About` — тому `useTranslations('Hero')` (next-intl) розв'язується коректно. При зворотному записі всі простори імен знову збираються в той самий файл для кожної локалі.
|
|
241
|
+
|
|
242
|
+
> Коли ви зберігаєте явний сегмент `{key}` у вашому `source` (наприклад, `./locales/${locale}/${key}.json`), кожен файл вже є одним простором імен, тому розділення за замовчуванням вимкнено.
|
|
243
|
+
|
|
208
244
|
### Кілька джерел JSON та пріоритет
|
|
209
245
|
|
|
210
246
|
Ви можете додавати кілька плагінів `syncJSON` для синхронізації різних джерел JSON. Це корисно, коли у вашому проєкті використовується декілька i18n бібліотек або різні структури JSON.
|
|
@@ -337,6 +373,9 @@ loadJSON({
|
|
|
337
373
|
|
|
338
374
|
// Необов'язковий форматувач для JSON-вмісту
|
|
339
375
|
format?: 'intlayer' | 'icu' | 'i18next', // за замовчуванням: 'intlayer'
|
|
376
|
+
|
|
377
|
+
// Розділяє один файл на один словник для кожного ключа верхнього рівня (автоматично визначається)
|
|
378
|
+
splitKeys?: boolean,
|
|
340
379
|
});
|
|
341
380
|
```
|
|
342
381
|
|
|
@@ -358,10 +397,25 @@ loadJSON({
|
|
|
358
397
|
}),
|
|
359
398
|
```
|
|
360
399
|
|
|
400
|
+
#### `splitKeys` (boolean)
|
|
401
|
+
|
|
402
|
+
Така ж поведінка, як і в [`syncJSON`](#splitkeys-boolean): коли один JSON-файл групує кілька просторів імен за ключами першого рівня, кожен ключ верхнього рівня стає окремим словником.
|
|
403
|
+
|
|
404
|
+
- `undefined` (за замовчуванням): **автоматично визначається** — розділяється, коли шаблон `source` не має сегмента `{key}`, інакше — єдиний словник.
|
|
405
|
+
- `true` / `false`: примусово ввімкнути або вимкнути розділення.
|
|
406
|
+
|
|
407
|
+
```ts
|
|
408
|
+
loadJSON({
|
|
409
|
+
source: ({ locale }) => `./messages/${locale}.json`,
|
|
410
|
+
format: "icu",
|
|
411
|
+
// splitKeys auto-enabled: `Hero`, `Nav`, `About`, … each become a dictionary
|
|
412
|
+
}),
|
|
413
|
+
```
|
|
414
|
+
|
|
361
415
|
### Поведінка та конвенції
|
|
362
416
|
|
|
363
417
|
- Якщо ваша маска `source` містить плейсхолдер локалі, імпортуються лише файли для обраної `locale`.
|
|
364
|
-
- Якщо в масці немає сегмента `{key}`, ключ
|
|
418
|
+
- Якщо в масці немає сегмента `{key}`, кожен ключ верхнього рівня файлу за замовчуванням стає окремим словником (див. [`splitKeys`](#splitkeys-boolean)). Встановіть `splitKeys: false`, щоб замість цього завантажити весь файл як єдиний словник `index`.
|
|
365
419
|
- Ключі виводяться зі шляхів файлів шляхом підстановки плейсхолдера `{key}` у вашому source builder.
|
|
366
420
|
- Плагін використовує лише виявлені файли і не створює відсутні локалі чи ключі.
|
|
367
421
|
- Шлях `fill` виводиться з вашого `source` і використовується для оновлення відсутніх значень через CLI, якщо ви погодитесь.
|
package/docs/uk/releases/v8.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-09-22
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
4
|
title: "Новий Intlayer v8 - Що нового?"
|
|
5
5
|
description: "Дізнайтеся, що нового в Intlayer v8. Значні покращення досвіду розробника, валідації контенту та управління словниками."
|
|
6
6
|
keywords:
|
|
@@ -199,7 +199,7 @@ Intlayer v8 вносить значні покращення в обробку
|
|
|
199
199
|
|
|
200
200
|
**3. Використання утиліти:**
|
|
201
201
|
|
|
202
|
-
```
|
|
202
|
+
```typescript
|
|
203
203
|
import { renderMarkdown } from "solid-intlayer/markdown";
|
|
204
204
|
|
|
205
205
|
return <div>{renderMarkdown("# Мій заголовок")}</div>;
|
|
@@ -409,6 +409,16 @@ Intlayer v8 вносить значні покращення в обробку
|
|
|
409
409
|
|
|
410
410
|
---
|
|
411
411
|
|
|
412
|
+
## Файли контенту YAML та Markdown (v8.10.0)
|
|
413
|
+
|
|
414
|
+
Тепер ви можете оголошувати контент безпосередньо за допомогою розширень файлів `.content.md` та `.content.yaml`. Це ідеально підходить для лонгрідів, блогів, документації та політик конфіденційності.
|
|
415
|
+
|
|
416
|
+
Ці файли повністю доступні для редагування у Visual Editor, забезпечуючи спрощений робочий процес для нетехнічних членів команди.
|
|
417
|
+
|
|
418
|
+
Для отримання додаткової інформації див. [Документацію про файли контенту YAML](https://intlayer.org/doc/concept/content#yaml-content-file) та [Документацію про файли контенту Markdown](https://intlayer.org/doc/concept/content/markdown).
|
|
419
|
+
|
|
420
|
+
---
|
|
421
|
+
|
|
412
422
|
## Користувацькі переписування URL
|
|
413
423
|
|
|
414
424
|
Intlayer v8 додає підтримку **користувацьких переписувань URL**, що дозволяє визначати локалізовані шляхи, які відрізняються від стандартної структури `/locale/path`. Це потужна можливість для покращення локального SEO та забезпечення більш природного досвіду користувача для тих, хто не говорить англійською.
|
|
@@ -753,6 +763,60 @@ export default {
|
|
|
753
763
|
</Tab>
|
|
754
764
|
</Tabs>
|
|
755
765
|
|
|
766
|
+
---
|
|
767
|
+
|
|
768
|
+
## Правила множини Unicode CLDR (v8.8.0)
|
|
769
|
+
|
|
770
|
+
Було впроваджено новий хелпер вузла `plural` на основі правил множини, визначених проектом Unicode CLDR, що покращує підтримку складних мов.
|
|
771
|
+
|
|
772
|
+
```typescript fileName="src/openings.content.ts"
|
|
773
|
+
import { plural, t, type Dictionary } from "intlayer";
|
|
774
|
+
|
|
775
|
+
const openingsContent = {
|
|
776
|
+
key: "total_openings",
|
|
777
|
+
content: {
|
|
778
|
+
totalOpenings: t({
|
|
779
|
+
en: plural({
|
|
780
|
+
one: "{{count}} opening",
|
|
781
|
+
other: "{{count}} openings",
|
|
782
|
+
}),
|
|
783
|
+
fr: plural({
|
|
784
|
+
one: "{{count}} offre",
|
|
785
|
+
other: "{{count}} offres",
|
|
786
|
+
}),
|
|
787
|
+
}),
|
|
788
|
+
},
|
|
789
|
+
} satisfies Dictionary;
|
|
790
|
+
|
|
791
|
+
export default openingsContent;
|
|
792
|
+
```
|
|
793
|
+
|
|
794
|
+
Після цього ви можете динамічно передавати кількість у компонент вашого фреймворку:
|
|
795
|
+
|
|
796
|
+
```tsx
|
|
797
|
+
import type { FC } from "react";
|
|
798
|
+
import { useIntlayer } from "react-intlayer";
|
|
799
|
+
|
|
800
|
+
const OpeningsComponent: FC<{ count: number }> = ({ count }) => {
|
|
801
|
+
const { totalOpenings } = useIntlayer("total_openings");
|
|
802
|
+
|
|
803
|
+
return (
|
|
804
|
+
<div>
|
|
805
|
+
{/* Англійською: */}
|
|
806
|
+
{/* count=0 → "0 openings" (other) */}
|
|
807
|
+
{/* count=1 → "1 opening" (one) */}
|
|
808
|
+
{/* count=2 → "2 openings" (other) */}
|
|
809
|
+
{/* count=21 → "21 openings" (other) */}
|
|
810
|
+
<p>{totalOpenings(count)}</p>
|
|
811
|
+
</div>
|
|
812
|
+
);
|
|
813
|
+
};
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
Для отримання додаткової інформації див. [Документацію про плюралізацію](https://intlayer.org/doc/concept/content/plural).
|
|
817
|
+
|
|
818
|
+
---
|
|
819
|
+
|
|
756
820
|
## Валідація схем контенту
|
|
757
821
|
|
|
758
822
|
Intlayer v8 впроваджує валідацію схем для словників. Тепер ви можете визначати повторно використовувані схеми валідації у вашій конфігурації за допомогою Zod і застосовувати їх до ваших файлів контенту. Це гарантує, що ваш контент завжди відповідає очікуваній структурі, виявляючи помилки під час збірки.
|
|
@@ -797,6 +861,34 @@ export default aboutPageMetaContent;
|
|
|
797
861
|
|
|
798
862
|
---
|
|
799
863
|
|
|
864
|
+
## TypeScript: Примітивні аксесори IntlayerNode
|
|
865
|
+
|
|
866
|
+
Тип `IntlayerNode` було оновлено, щоб дозволити виклик примітивних методів JavaScript безпосередньо на вузлах контенту. Це дає змогу взаємодіяти з вашим локалізованим контентом так, ніби це стандартний примітив рядка, числа, булевого значення або масиву.
|
|
867
|
+
|
|
868
|
+
Підтримується в React, Preact, Solid, Svelte, Vue та Angular.
|
|
869
|
+
|
|
870
|
+
### Приклад з рядком (String)
|
|
871
|
+
|
|
872
|
+
```typescript
|
|
873
|
+
content.placeholder; // Повертає IntlayerNode<string>
|
|
874
|
+
content.placeholder.value; // Повертає string
|
|
875
|
+
content.placeholder.toString(); // Повертає string
|
|
876
|
+
content.placeholder.toLowerCase(); // Повертає string
|
|
877
|
+
String(content.placeholder); // Повертає string
|
|
878
|
+
content.placeholder.toUpperCase(); // Повертає рядок у верхньому регістрі
|
|
879
|
+
content.placeholder.replace("a", "b"); // Повертає змінений рядок
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
### Приклад з масивом (Array)
|
|
883
|
+
|
|
884
|
+
```typescript
|
|
885
|
+
content.myArrayOfString // Повертає IntlayerNode<Array<string>>
|
|
886
|
+
content.myArrayOfString.find(...) // Повертає елемент
|
|
887
|
+
content.myArrayOfString.join(', ') // Повертає об'єднаний рядок
|
|
888
|
+
```
|
|
889
|
+
|
|
890
|
+
---
|
|
891
|
+
|
|
800
892
|
### Покращене автоматичне виявлення контенту
|
|
801
893
|
|
|
802
894
|
У v8 Intlayer інтелектуально виявляє синтаксис Markdown, HTML-теги та вставки змінних у рядках контенту. Це означає, що ви часто можете опустити допоміжні функції, такі як `md()`, `html()` або `insert()`.
|
|
@@ -1002,9 +1094,20 @@ export default {
|
|
|
1002
1094
|
|
|
1003
1095
|
---
|
|
1004
1096
|
|
|
1097
|
+
## Інструменти: C++ Watcher та LSP на базі OXC (v8.12.0)
|
|
1098
|
+
|
|
1099
|
+
Intlayer v8.12.0 приносить значні покращення у досвід розробника:
|
|
1100
|
+
|
|
1101
|
+
- **Parcel Watcher**: Спостерігач за контентом (content watcher) було мігровано з `chokidar` на `@parcel/watcher`, що використовує нативне спостереження за файлами на C++ для забезпечення швидших оновлень та значно меншого споживання пам'яті.
|
|
1102
|
+
- **Новий Language Server Protocol (LSP)**: Тепер доступний абсолютно новий LSP. Створений на основі парсингу OXC, він допомагає вашій IDE та AI-агентам безперешкодно пов'язувати виклики `useIntlayer('my-key')` з відповідними файлами `.content` і навпаки.
|
|
1103
|
+
|
|
1104
|
+
Для отримання додаткової інформації див. [Документацію LSP](https://intlayer.org/doc/lsp).
|
|
1105
|
+
|
|
1106
|
+
---
|
|
1107
|
+
|
|
1005
1108
|
## Оптимізації компілятора
|
|
1006
1109
|
|
|
1007
|
-
Intlayer v8 включає новий шар кешування для компілятора Markdown та HTML. Це гарантує, що ідентичні рядки контенту з однаковою конфігурацією парсяться лише один раз, що значно зменшує витрати під час повторних відтворень або при використанні одного й того
|
|
1110
|
+
Intlayer v8 включає новий шар кешування для компілятора Markdown та HTML. Це гарантує, що ідентичні рядки контенту з однаковою конфігурацією парсяться лише один раз, що значно зменшує витрати під час повторних відтворень або при використанні одного й того же контенту в декількох місцях.
|
|
1008
1111
|
|
|
1009
1112
|
<Tabs group='bundler'>
|
|
1010
1113
|
<Tab label="Next.js" value="nextjs">
|
|
@@ -1057,6 +1160,48 @@ Intlayer v8 включає новий шар кешування для комп
|
|
|
1057
1160
|
|
|
1058
1161
|
---
|
|
1059
1162
|
|
|
1163
|
+
## Експериментальні оптимізації збірки: Minify & Purge (v8.7.0)
|
|
1164
|
+
|
|
1165
|
+
Intlayer v8.7.0 представляє нові експериментальні функції збірки у вашому `intlayer.config.ts`, розроблені для оптимізації вашого production-бандлу:
|
|
1166
|
+
|
|
1167
|
+
- **Мініфікація словників (Dictionary Minification)**: Мініфікує файли словників для зменшення їхнього розміру.
|
|
1168
|
+
- **Очищення невикористовуваних ключів (Unused Key Purging)**: Сканує та видаляє невикористовувані ключі перекладу зі словників, перейменовуючи активні ключі на короткі символи (наприклад, `"products" -> "a"`, `"pricing" -> "b"`). Це зменшує розмір бандлу до 5%.
|
|
1169
|
+
- **Вимкнення перевірок TypeScript**: Прискорює збірку шляхом вимкнення типізації TypeScript під час кроку компіляції.
|
|
1170
|
+
|
|
1171
|
+
```typescript fileName="intlayer.config.ts"
|
|
1172
|
+
import { Locales, type IntlayerConfig } from "intlayer";
|
|
1173
|
+
|
|
1174
|
+
const config: IntlayerConfig = {
|
|
1175
|
+
internationalization: {
|
|
1176
|
+
locales: [Locales.ENGLISH, Locales.FRENCH],
|
|
1177
|
+
defaultLocale: Locales.ENGLISH,
|
|
1178
|
+
},
|
|
1179
|
+
dictionary: {
|
|
1180
|
+
importMode: "dynamic",
|
|
1181
|
+
},
|
|
1182
|
+
build: {
|
|
1183
|
+
/**
|
|
1184
|
+
* Мініфікувати словники для зменшення розміру бандлу.
|
|
1185
|
+
*/
|
|
1186
|
+
minify: true,
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* Очистити невикористовувані ключі у словниках
|
|
1190
|
+
*/
|
|
1191
|
+
purge: true,
|
|
1192
|
+
|
|
1193
|
+
/**
|
|
1194
|
+
* Вказує, чи повинна збірка перевіряти типи TypeScript
|
|
1195
|
+
*/
|
|
1196
|
+
checkTypes: false,
|
|
1197
|
+
},
|
|
1198
|
+
};
|
|
1199
|
+
|
|
1200
|
+
export default config;
|
|
1201
|
+
```
|
|
1202
|
+
|
|
1203
|
+
---
|
|
1204
|
+
|
|
1060
1205
|
## Гнучкість: Уніфікований режим імпорту
|
|
1061
1206
|
|
|
1062
1207
|
Властивість булевого типу `live` була застаріла на користь більш всеосяжної властивості `importMode`. Це дозволяє явно визначати, як словники мають завантажуватися: статично, динамічно або через live-синхронізацію.
|
|
@@ -1204,6 +1349,49 @@ export default {
|
|
|
1204
1349
|
|
|
1205
1350
|
---
|
|
1206
1351
|
|
|
1352
|
+
## Підтримка Angular: Vite Bundler (v8.11.0)
|
|
1353
|
+
|
|
1354
|
+
Для користувачів Angular Intlayer тепер нативно підтримує бандлер Vite через новий кастомний плагін esbuild, що прискорює час розробки та збірки.
|
|
1355
|
+
|
|
1356
|
+
Детальніше про конфігурацію див. у [Документації середовища Angular](https://intlayer.org/doc/environment/angular).
|
|
1357
|
+
|
|
1358
|
+
---
|
|
1359
|
+
|
|
1360
|
+
## Генерація карти сайту (Sitemap) (v8.6.0)
|
|
1361
|
+
|
|
1362
|
+
Intlayer тепер автоматично генерує карти сайтів (sitemaps) на основі ваших локалей та режиму маршрутизації. Це особливо корисно для SEO-оптимізації в архітектурах роутерів, таких як TanStack Router:
|
|
1363
|
+
|
|
1364
|
+
```typescript fileName="src/routes/sitemap.xml.ts"
|
|
1365
|
+
import { createFileRoute } from "@tanstack/react-router";
|
|
1366
|
+
import { generateSitemap } from "intlayer";
|
|
1367
|
+
|
|
1368
|
+
const SITE_URL = (
|
|
1369
|
+
import.meta.env.VITE_SITE_URL ?? "http://localhost:3000"
|
|
1370
|
+
).replace(/\/$/, "");
|
|
1371
|
+
|
|
1372
|
+
export const Route = createFileRoute("/sitemap.xml")({
|
|
1373
|
+
server: {
|
|
1374
|
+
handlers: {
|
|
1375
|
+
GET: async () => {
|
|
1376
|
+
const sitemap = generateSitemap(
|
|
1377
|
+
[
|
|
1378
|
+
{ path: "/", changefreq: "daily", priority: 1.0 },
|
|
1379
|
+
{ path: "/about", changefreq: "monthly", priority: 0.8 },
|
|
1380
|
+
],
|
|
1381
|
+
{ siteUrl: SITE_URL }
|
|
1382
|
+
);
|
|
1383
|
+
|
|
1384
|
+
return new Response(sitemap, {
|
|
1385
|
+
headers: { "Content-Type": "application/xml" },
|
|
1386
|
+
});
|
|
1387
|
+
},
|
|
1388
|
+
},
|
|
1389
|
+
},
|
|
1390
|
+
});
|
|
1391
|
+
```
|
|
1392
|
+
|
|
1393
|
+
---
|
|
1394
|
+
|
|
1207
1395
|
## Примітки до міграції з v7
|
|
1208
1396
|
|
|
1209
1397
|
### Зміни в конфігурації
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-14
|
|
3
|
+
updatedAt: 2026-06-14
|
|
4
|
+
title: Новий Intlayer v9 - Що нового?
|
|
5
|
+
description: Дізнайтеся, що нового в Intlayer v9. Представляємо сумісні пакети швидкої заміни (drop-in) для популярних бібліотек i18n та підтримку Collections, Variants та Dynamic Records.
|
|
6
|
+
keywords:
|
|
7
|
+
- Intlayer
|
|
8
|
+
- Сумісність
|
|
9
|
+
- Міграція
|
|
10
|
+
- Колекції
|
|
11
|
+
- Варіанти
|
|
12
|
+
- Динамічні записи
|
|
13
|
+
- i18next
|
|
14
|
+
- next-intl
|
|
15
|
+
- vue-i18n
|
|
16
|
+
slugs:
|
|
17
|
+
- doc
|
|
18
|
+
- releases
|
|
19
|
+
- v9
|
|
20
|
+
author: aymericzip
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
# Новий Intlayer v9 - Що нового?
|
|
24
|
+
|
|
25
|
+
Ласкаво просимо до Intlayer v9! Цей мажорний реліз є величезною віхою у спрощенні шляху міграції на Intlayer завдяки **Compat Adapter Packages** (пакетам адаптерів сумісності) для основних бібліотек i18n (`react-i18next`, `next-intl`, `vue-i18n` тощо) та додає підтримку складних структур контенту: **Collections** (Колекцій), **Variants** (Варіантів) та **Dynamic Records** (Динамічних записів).
|
|
26
|
+
|
|
27
|
+
## Зміст
|
|
28
|
+
|
|
29
|
+
<TOC levels={[2]} maxDepth={1} />
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Пакети адаптерів сумісності (Compat Adapter Packages)
|
|
34
|
+
|
|
35
|
+
Мігрувати на Intlayer з популярних бібліотек i18n тепер простіше, ніж будь-коли. Ми створили п'ять пакетів сумісності, які надають **точно такий самий публічний API**, як і стандартні бібліотеки i18n, але делегують усю роботу з перекладу Intlayer під час виконання (runtime).
|
|
36
|
+
|
|
37
|
+
### Той самий публічний API зі строгою типізацією
|
|
38
|
+
|
|
39
|
+
Замінивши імпорти, ви отримуєте всі переваги Intlayer (включаючи типізацію на етапі компіляції відповідно до ваших реальних словників) з мінімальними змінами в коді:
|
|
40
|
+
|
|
41
|
+
- `@intlayer/i18next`
|
|
42
|
+
- `@intlayer/react-i18next`
|
|
43
|
+
- `@intlayer/next-intl`
|
|
44
|
+
- `@intlayer/next-i18next`
|
|
45
|
+
- `@intlayer/vue-i18n`
|
|
46
|
+
|
|
47
|
+
Наприклад, просто змініть:
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
import { useTranslation } from "react-i18next";
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
на:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { useTranslation } from "@intlayer/react-i18next";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Тепер ваші ключі будуть **строго типізовані** відповідно до ваших словників Intlayer, забезпечуючи повне автодоповнення шляхів через крапку (dot-path) у вашій IDE!
|
|
60
|
+
|
|
61
|
+
### Плагіни аліасів для бандлерів (Vite, Next.js, Turbopack)
|
|
62
|
+
|
|
63
|
+
Щоб дозволити міграцію без ручного переписування всіх інструкцій імпорту, кожен пакет адаптера сумісності містить **кастомний плагін для бандлера** (Vite або Next.js) у підшляху `/plugin`.
|
|
64
|
+
|
|
65
|
+
Ці плагіни автоматично перезаписують існуючі імпорти (наприклад, `react-i18next` або `next-intl`) на їхні еквіваленти `@intlayer/*` під час збірки.
|
|
66
|
+
|
|
67
|
+
#### Приклад для Next.js (Webpack / Turbopack)
|
|
68
|
+
|
|
69
|
+
Замість `withIntlayer` оберніть вашу конфігурацію Next.js плагіном сумісності:
|
|
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)
|
|
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
|
+
Усі адаптери сумісності тепер направляють резолв перекладів через єдиний, високооптимізований парсер часу виконання: `@intlayer/core/messageFormat`.
|
|
96
|
+
|
|
97
|
+
- **Interpolate Message**: Резолвить стандартні `{{var}}` (пробіли та dot-paths), аргументи у форматі ICU (`{v, number, percent}` тощо) та прості шаблони `{var}`.
|
|
98
|
+
- **Message Node Resolver**: Резолвить вкладені вузли: `insert()`, `plural()` (правила множини CLDR), `enu()` (перелічення), `gender()`, HTML-теги, масиви та вузли функцій зворотного виклику (callable function nodes).
|
|
99
|
+
- **Tokenized Tag Parser**: Підтримує інлайнові XML/HTML-теги та нумеровані теги (наприклад, `<1>children</1>`) для забезпечення рендерингу форматованого тексту (rich-text) "з коробки".
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## Специфікація функцій: Collections, Variants та Dynamic Records
|
|
104
|
+
|
|
105
|
+
Intlayer v9 виходить за рамки статичних об'єктів типу ключ-значення, дозволяючи словникам оголошувати динамічні структури макетів, які повністю типізовані від початку до кінця (end-to-end).
|
|
106
|
+
|
|
107
|
+
### 1. Колекції (Collections)
|
|
108
|
+
|
|
109
|
+
Визначайте керований CMS список упорядкованих елементів (наприклад, FAQ, товари або списки блогів):
|
|
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
|
+
uk: "Що таке Intlayer?",
|
|
120
|
+
en: "What is Intlayer?",
|
|
121
|
+
fr: "Qu'est-ce qu'Intlayer ?",
|
|
122
|
+
}),
|
|
123
|
+
answer: t({
|
|
124
|
+
uk: "Інструментарій i18n.",
|
|
125
|
+
en: "An i18n toolkit.",
|
|
126
|
+
fr: "Une boîte à outils i18n.",
|
|
127
|
+
}),
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
} satisfies Dictionary;
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
#### Використання:
|
|
134
|
+
|
|
135
|
+
```ts
|
|
136
|
+
// Отримати всі елементи
|
|
137
|
+
const allFaqs = useIntlayer("faq"); // -> { question: string, answer: string }[]
|
|
138
|
+
|
|
139
|
+
// Отримати один елемент за індексом
|
|
140
|
+
const faq = useIntlayer("faq", { item: 1 }); // -> { question: string, answer: string }
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### 2. Варіанти (Variants)
|
|
144
|
+
|
|
145
|
+
Надавайте A/B тести, сезонні заголовки, feature flags або кастомні цільові сторінки (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({ uk: "Ласкаво просимо", en: "Welcome", fr: "Bienvenue" }),
|
|
155
|
+
black_friday: t({
|
|
156
|
+
uk: "Купити зараз",
|
|
157
|
+
en: "Shop now",
|
|
158
|
+
fr: "Acheter maintenant",
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
} satisfies Dictionary;
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
#### Використання:
|
|
165
|
+
|
|
166
|
+
```ts
|
|
167
|
+
const banner = useIntlayer("hero-banner", { variant: "black_friday" });
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 3. Динамічні записи (Dynamic Records)
|
|
171
|
+
|
|
172
|
+
Визначайте словники, записи яких завантажуються динамічно під час виконання за допомогою ідентифікаторів запитів (query IDs):
|
|
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({ uk: "Чистий код", en: "Clean Code", fr: "Code Propre" }),
|
|
185
|
+
},
|
|
186
|
+
} satisfies Dictionary;
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
#### Використання:
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
// Динамічно завантажує лише запитуваний елемент (потребує Suspense)
|
|
193
|
+
const product = useIntlayer("product-copy", {
|
|
194
|
+
id: "prod_123",
|
|
195
|
+
category: "books",
|
|
196
|
+
});
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Динамічне завантаження та оптимізація розміру бандла
|
|
202
|
+
|
|
203
|
+
Щоб зберегти розмір бандлів надзвичайно малим, Intlayer v9 підтримує динамічне ліниве завантаження (lazy loading).
|
|
204
|
+
|
|
205
|
+
У вашій конфігурації встановіть `importMode` у `'dynamic'` або `'fetch'`:
|
|
206
|
+
|
|
207
|
+
```ts fileName="intlayer.config.ts"
|
|
208
|
+
export default {
|
|
209
|
+
dictionary: {
|
|
210
|
+
importMode: "dynamic", // "static" | "dynamic" | "fetch"
|
|
211
|
+
},
|
|
212
|
+
};
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Під час збірки `@intlayer/swc` та `@intlayer/babel` сканують ваші файли та замінюють виклики `useIntlayer` / `getIntlayer` на tree-shakeable обгортки (`useDictionary` / `useDictionaryDynamic`). Завантажується лише контент, необхідний для вибраного елемента колекції, варіанта або локалі, що запобігає потраплянню невикористовуваних перекладів у ваш продакшн-бандл.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## Примітки щодо міграції з v8
|
|
220
|
+
|
|
221
|
+
Якщо ви оновлюєтеся з v8, зверніть увагу, що v9 не містить критичних змін (breaking changes). Проте ось ключові зміни:
|
|
222
|
+
|
|
223
|
+
- **Locales & Dialects**: Якщо ви використовуєте зовнішні залежності i18n, додайте відповідні плагіни адаптерів сумісності у вашу конфігурацію або налаштування бандлера для автоматичного перезапису імпортів.
|
|
224
|
+
- **Custom Selectors**: При виклику `useIntlayer` другий параметр тепер зарезервований для об'єкта опцій, що містить `{ locale, item, variant, id }`. Якщо раніше ви передавали рядок локалі безпосередньо, ви все ще можете це робити, але для розширеного вибору рекомендується використовувати об'єкт опцій.
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
## Корисні посилання
|
|
229
|
+
|
|
230
|
+
- [Посібник з пакетів адаптерів сумісності (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/index.md)
|
|
231
|
+
- [Динамічні словники - Collections, Variants та Dynamic Records](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/index.md)
|
|
232
|
+
- [Довідник з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
|
package/docs/ur/cli/index.md
CHANGED